Christina Quast | f274a78 | 2015-03-03 22:19:21 +0100 | [diff] [blame] | 1 | import sys |
| 2 | |
Christina Quast | 2dcaa10 | 2015-03-06 18:14:43 +0100 | [diff] [blame] | 3 | from pySim.commands import SimCardCommands |
| 4 | from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid |
| 5 | from pySim.transport.pcsc import PcscSimLink |
| 6 | |
| 7 | |
Christina Quast | 2dcaa10 | 2015-03-06 18:14:43 +0100 | [diff] [blame] | 8 | |
| 9 | def pySim_read(): |
| 10 | sl = PcscSimLink(0) |
| 11 | |
| 12 | # Create command layer |
| 13 | scc = SimCardCommands(transport=sl) |
| 14 | |
| 15 | # Wait for SIM card |
| 16 | sl.wait_for_card() |
| 17 | |
| 18 | # Program the card |
| 19 | print("Reading ...") |
| 20 | |
| 21 | # EF.ICCID |
| 22 | (res, sw) = scc.read_binary(['3f00', '2fe2']) |
| 23 | if sw == '9000': |
| 24 | print("ICCID: %s" % (dec_iccid(res),)) |
| 25 | else: |
| 26 | print("ICCID: Can't read, response code = %s" % (sw,)) |
| 27 | |
| 28 | # EF.IMSI |
| 29 | (res, sw) = scc.read_binary(['3f00', '7f20', '6f07']) |
| 30 | if sw == '9000': |
| 31 | print("IMSI: %s" % (dec_imsi(res),)) |
| 32 | else: |
| 33 | print("IMSI: Can't read, response code = %s" % (sw,)) |
| 34 | |
| 35 | # EF.SMSP |
| 36 | (res, sw) = scc.read_record(['3f00', '7f10', '6f42'], 1) |
| 37 | if sw == '9000': |
| 38 | print("SMSP: %s" % (res,)) |
| 39 | else: |
| 40 | print("SMSP: Can't read, response code = %s" % (sw,)) |
| 41 | |
| 42 | # EF.HPLMN |
| 43 | # (res, sw) = scc.read_binary(['3f00', '7f20', '6f30']) |
| 44 | # if sw == '9000': |
| 45 | # print("HPLMN: %s" % (res)) |
| 46 | # print("HPLMN: %s" % (dec_hplmn(res),)) |
| 47 | # else: |
| 48 | # print("HPLMN: Can't read, response code = %s" % (sw,)) |
| 49 | # FIXME |
| 50 | |
| 51 | # EF.ACC |
| 52 | (res, sw) = scc.read_binary(['3f00', '7f20', '6f78']) |
| 53 | if sw == '9000': |
| 54 | print("ACC: %s" % (res,)) |
| 55 | else: |
| 56 | print("ACC: Can't read, response code = %s" % (sw,)) |
| 57 | |
| 58 | # EF.MSISDN |
| 59 | try: |
| 60 | # print(scc.record_size(['3f00', '7f10', '6f40'])) |
| 61 | (res, sw) = scc.read_record(['3f00', '7f10', '6f40'], 1) |
| 62 | if sw == '9000': |
| 63 | if res[1] != 'f': |
| 64 | print("MSISDN: %s" % (res,)) |
| 65 | else: |
| 66 | print("MSISDN: Not available") |
| 67 | else: |
| 68 | print("MSISDN: Can't read, response code = %s" % (sw,)) |
| 69 | except: |
| 70 | prin#t("MSISDN: Can't read. Probably not existing file") |
| 71 | |
| 72 | # Done for this card and maybe for everything ? |
| 73 | print("Done !\n") |