@@ -543,43 +543,50 @@ def num_sms(self, sim_storage=True):
543543
544544 # ask how many SMS are stored
545545 if sim_storage :
546- if self ._send_parse_reply (b"AT+CPMS?" , FONA_SMS_STORAGE_SIM + b"," , idx = 1 ):
547- return self . _buf
546+ if not self ._send_parse_reply (b"AT+CPMS?" , FONA_SMS_STORAGE_SIM + b"," , idx = 1 ):
547+ return False
548548 else :
549- if self ._send_parse_reply (b"AT+CPMS?" , FONA_SMS_STORAGE_INTERNAL + b"," , idx = 1 ):
550- return self ._buf
551- if self ._send_parse_reply (b"AT+CPMS?" , b"\" SM\" ," , idx = 1 ):
552- return self ._buf
553- if self ._send_parse_reply (b"AT+CPMS?" , b"\" SM_P\" ," , idx = 1 ):
554- return self ._buf
555- return False
549+ if not self ._send_parse_reply (b"AT+CPMS?" , FONA_SMS_STORAGE_INTERNAL + b"," , idx = 1 ):
550+ return False
551+ if not self ._send_parse_reply (b"AT+CPMS?" , b"\" SM\" ," , idx = 1 ):
552+ return False
553+ if not self ._send_parse_reply (b"AT+CPMS?" , b"\" SM_P\" ," , idx = 1 ):
554+ return False
555+
556+ self ._uart .reset_input_buffer ()
557+ return self ._buf
556558
557559 def read_sms (self , sms_slot = None ):
558- """Reads SMS messages from FONA device.
560+ """Reads and parses SMS messages from FONA device. Returns the SMS
561+ (sender, data) as a tuple.
559562 If no sms_slot is selected, read_sms returns all sms messages on the device.
560563 :param int sms_slot: SMS memory slot number.
561564
562565 """
566+ self ._read_line ()
567+
563568 # text mode
564569 if not self ._send_check_reply (b"AT+CMGF=1" , reply = REPLY_OK ):
565570 return False
566571
567572 if not self ._send_check_reply (b"AT+CSDH=1" , reply = REPLY_OK ):
568573 return False
569574
570- # TODO: Add this back
571- #if sms_slot is None:
572- # self.uart_write(b"AT+CMGL=\"ALL\"" + b"\r\n")
573- # self._read_line()
574- # return True
575-
576575 self .uart_write (b"AT+CMGR=" + str (sms_slot ).encode () + b"\r \n " )
577576 self ._read_line (1000 )
577+ resp = self ._buf
578+
579+ # get sender
580+ if not self ._parse_reply (b"+CMGR:" , idx = 1 ):
581+ return False
582+ sender = self ._buf
578583
579584 # get sms length
585+ self ._buf = resp
580586 if not self ._parse_reply (b"+CMGR:" , idx = 11 ):
581587 return False
582588 sms_len = self ._buf
589+
583590 # rsize shared buf
584591 self ._buf = bytearray (sms_len )
585592 # read into buffer
@@ -588,7 +595,7 @@ def read_sms(self, sms_slot=None):
588595 self ._uart .reset_input_buffer ()
589596
590597
591- return bytes (self ._buf ).decode ()
598+ return sender , bytes (self ._buf ).decode ()
592599
593600
594601 ### Socket API (TCP, UDP) ###
0 commit comments