modem_atcmd: raise ProtocolError instead of ReaderError on CME ERROR

Also accept ProtocolError in addition to SwMatchError in filesystem.py
when probing for applications

Change-Id: I82b50408328f8eaaee5c9e311c4620d20f930642
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index ce1882b..b5d0ccd 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -1352,7 +1352,7 @@
                 if sw == "9000":
                     print(" %s: %s" % (f.name, f.aid))
                     apps_taken.append(f)
-            except SwMatchError:
+            except (SwMatchError, ProtocolError):
                 pass
         return apps_taken
 
diff --git a/pySim/transport/modem_atcmd.py b/pySim/transport/modem_atcmd.py
index a373d68..ea50bc9 100644
--- a/pySim/transport/modem_atcmd.py
+++ b/pySim/transport/modem_atcmd.py
@@ -148,8 +148,9 @@
         log.debug('Sending command: %s',  cmd)
 
         # Send AT+CSIM command to the modem
-        # TODO: also handle +CME ERROR: <err>
         rsp = self.send_at_cmd(cmd)
+        if rsp[-1].startswith(b'+CME ERROR:'):
+            raise ProtocolError('AT+CSIM failed with: %s' % str(rsp))
         if len(rsp) != 2 or rsp[-1] != b'OK':
             raise ReaderError('APDU transfer failed: %s' % str(rsp))
         rsp = rsp[0]  # Get rid of b'OK'