def read(self, *args):
print "reading last numbers!"
try:
self.SIM.gotoFile(LND_FILE_PATH)
# Send the get response command, to find out record length
data, sw = self.SIM.sendAPDUmatchSW("A0C000000F", SW_OK)
self.recordLength = int(data[28:30], 16) # Usually 0x20
# Now we can work out the name length & number of records
self.nameLength = self.recordLength - 14 # Defined GSM 11.11
self.numberRecords = int(data[4:8], 16) / self.recordLength
except:
pySIMmessage(self, "Unable to find your phonebook on your SIM card.", "SIM card error")
return
if not self.SIM.checkAndVerifyCHV1(CHV_READ, data):
return
apdu = "A0B2%s04" + IntToHex(self.recordLength)
dlg = wxskinProgressDialog("Last Dialed Numbers", "Reading your last dialed numbers", self.numberRecords + 1, self, wx.PD_CAN_ABORT | wx.PD_APP_MODAL)
try:
hexNameLen = self.nameLength << 1
for i in range(1, self.numberRecords + 1):
if not dlg.Update(i):
self.abortedRead = 1
break
data, sw = self.SIM.sendAPDUmatchSW(apdu % IntToHex(i), SW_OK)
# Find the end of the name
#print data
name = ""
number = ""
if data[0:2] != 'FF':
name = GSM3_38ToASCII(unhexlify(data[:hexNameLen]))
if ord(name[-1]) > 0x80:
# Nokia phones add this as a group identifier. Remove it.
name = name[:-1].rstrip()
if data[hexNameLen:hexNameLen+2] != 'FF':
if name == "":
name == "(unknown)"
numberLen = int(data[hexNameLen:hexNameLen+2], 16)
if numberLen > 0 and numberLen <= (11): # Includes TON/NPI byte
hexNumber = data[hexNameLen+2:hexNameLen+2+(numberLen<<1)]
if hexNumber[:2] == '91':
number = "+"
number += GSMPhoneNumberToString(hexNumber[2:])
self.itemDataMap[i] = (name, number)
self.abortedRead = 0
except:
# Finished with the guage
self.abortedRead = 1
print_exc()
pySIMmessage(self, "Unable to read the phonebook on your SIM card.", "SIM card error")
dlg.Destroy()
评论列表
文章目录