From 51b5017b430ecd055340c25230928bc099713777 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 10 Feb 2007 18:31:02 +0000 Subject: [PATCH] Added proper handling of sessions. Thanks to scotty for pointing that out. --- src/libprs500/communicate.py | 13 ++++++++++--- src/libprs500/prstypes.py | 12 ++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/libprs500/communicate.py b/src/libprs500/communicate.py index ae9508f682..d44fde4e84 100755 --- a/src/libprs500/communicate.py +++ b/src/libprs500/communicate.py @@ -165,10 +165,14 @@ class PRS500Device(Device): try: if not dev.handle: dev.open() + if not dev.in_session: + dev.send_validated_command(BeginEndSession(end=False)) + dev.in_session = True res = func(*args, **kwargs) except ArgumentError: if not kwargs.has_key("end_session") or kwargs["end_session"]: - dev.send_validated_command(EndSession()) + dev.send_validated_command(BeginEndSession(end=True)) + dev.in_session = False raise except USBError, err: if "No such device" in str(err): @@ -183,7 +187,8 @@ class PRS500Device(Device): dev.close() raise if not kwargs.has_key("end_session") or kwargs["end_session"]: - dev.send_validated_command(EndSession()) + dev.send_validated_command(BeginEndSession(end=True)) + dev.in_session = False return res return run_session @@ -200,7 +205,8 @@ class PRS500Device(Device): Device.__init__(self) self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID) # Handle that is used to communicate with device. Setup in L{open} - self.handle = None + self.handle = None + self.in_session = False self.log_packets = log_packets self.report_progress = report_progress if len(key) > 8: @@ -286,6 +292,7 @@ class PRS500Device(Device): except Exception, err: print >> sys.stderr, err self.handle, self.device = None, None + self.in_session = False def _send_command(self, command, response_type=Response, timeout=1000): """ diff --git a/src/libprs500/prstypes.py b/src/libprs500/prstypes.py index 287856bfc9..7daba91761 100755 --- a/src/libprs500/prstypes.py +++ b/src/libprs500/prstypes.py @@ -386,15 +386,15 @@ class DirClose(ShortCommand): ShortCommand.__init__(self, number=DirClose.NUMBER, type=0x01, command=_id) -class EndSession(ShortCommand): +class BeginEndSession(ShortCommand): """ - Ask device to change status to 'USB connected' i.e., tell the - device that the present sequence of commands is complete + Ask device to either start or end a session. """ - NUMBER = 0x1 #: Command number - def __init__(self): + NUMBER = 0x01 #: Command number + def __init__(self, end=True): + command = 0x00 if end else 0x01 ShortCommand.__init__(self, \ - number=EndSession.NUMBER, type=0x01, command=0x00) + number=BeginEndSession.NUMBER, type=0x01, command=command) class GetUSBProtocolVersion(ShortCommand): """ Get USB Protocol version used by device """