mirror of
https://gitea.osmocom.org/sim-card/pysim.git
synced 2026-03-30 14:17:55 +03:00
commands: Allow reading binary/record files if they are already selected.
Change-Id: Iad3b240eab8a54a4d0ef2623bc9dd17f7dce5fa5
This commit is contained in:
@@ -55,14 +55,17 @@ class SimCardCommands(object):
|
|||||||
rv.append(data)
|
rv.append(data)
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
def read_binary_selected(self, length, offset=0):
|
||||||
|
pdu = self.cla_byte + 'b0%04x%02x' % (offset, (min(256, length) & 0xff))
|
||||||
|
return self._tp.send_apdu(pdu)
|
||||||
|
|
||||||
def read_binary(self, ef, length=None, offset=0):
|
def read_binary(self, ef, length=None, offset=0):
|
||||||
if not hasattr(type(ef), '__iter__'):
|
if not hasattr(type(ef), '__iter__'):
|
||||||
ef = [ef]
|
ef = [ef]
|
||||||
r = self.select_file(ef)
|
r = self.select_file(ef)
|
||||||
if length is None:
|
if length is None:
|
||||||
length = int(r[-1][4:8], 16) - offset
|
length = int(r[-1][4:8], 16) - offset
|
||||||
pdu = self.cla_byte + 'b0%04x%02x' % (offset, (min(256, length) & 0xff))
|
return self.read_binary_selected(length, offset)
|
||||||
return self._tp.send_apdu(pdu)
|
|
||||||
|
|
||||||
def update_binary(self, ef, data, offset=0):
|
def update_binary(self, ef, data, offset=0):
|
||||||
if not hasattr(type(ef), '__iter__'):
|
if not hasattr(type(ef), '__iter__'):
|
||||||
@@ -71,13 +74,16 @@ class SimCardCommands(object):
|
|||||||
pdu = self.cla_byte + 'd6%04x%02x' % (offset, len(data)/2) + data
|
pdu = self.cla_byte + 'd6%04x%02x' % (offset, len(data)/2) + data
|
||||||
return self._tp.send_apdu_checksw(pdu)
|
return self._tp.send_apdu_checksw(pdu)
|
||||||
|
|
||||||
|
def read_record_selected(self, rec_length, rec_no):
|
||||||
|
pdu = self.cla_byte + 'b2%02x04%02x' % (rec_no, rec_length)
|
||||||
|
return self._tp.send_apdu(pdu)
|
||||||
|
|
||||||
def read_record(self, ef, rec_no):
|
def read_record(self, ef, rec_no):
|
||||||
if not hasattr(type(ef), '__iter__'):
|
if not hasattr(type(ef), '__iter__'):
|
||||||
ef = [ef]
|
ef = [ef]
|
||||||
r = self.select_file(ef)
|
r = self.select_file(ef)
|
||||||
rec_length = int(r[-1][28:30], 16)
|
rec_length = int(r[-1][28:30], 16)
|
||||||
pdu = self.cla_byte + 'b2%02x04%02x' % (rec_no, rec_length)
|
return self.read_record_selected(rec_length, rec_no)
|
||||||
return self._tp.send_apdu(pdu)
|
|
||||||
|
|
||||||
def update_record(self, ef, rec_no, data, force_len=False):
|
def update_record(self, ef, rec_no, data, force_len=False):
|
||||||
if not hasattr(type(ef), '__iter__'):
|
if not hasattr(type(ef), '__iter__'):
|
||||||
|
|||||||
Reference in New Issue
Block a user