Skip to content

Commit 6d26dc0

Browse files
author
brentru
committed
make read_line public for client code which needs to access serial uart
1 parent 2a32c3e commit 6d26dc0

File tree

1 file changed

+45
-54
lines changed

1 file changed

+45
-54
lines changed

adafruit_fona/adafruit_fona.py

Lines changed: 45 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def _init_fona(self):
133133
self._uart.reset_input_buffer()
134134

135135
self.uart_write(b"ATI\r\n")
136-
self._read_line(multiline=True)
136+
self.read_line(multiline=True)
137137

138138
if self._buf.find(b"SIM808 R14") != -1:
139139
self._fona_type = FONA_808_V2
@@ -147,7 +147,7 @@ def _init_fona(self):
147147
if self._fona_type == FONA_800_L:
148148
# determine if SIM800H
149149
self.uart_write(b"AT+GMM\r\n")
150-
self._read_line(multiline=True)
150+
self.read_line(multiline=True)
151151

152152
if self._buf.find(b"SIM800H") != -1:
153153
self._fona_type = FONA_800_H
@@ -188,15 +188,15 @@ def iemi(self):
188188
self._uart.reset_input_buffer()
189189

190190
self.uart_write(b"AT+GSN\r\n")
191-
self._read_line(multiline=True)
191+
self.read_line(multiline=True)
192192
iemi = self._buf[0:15]
193193
return iemi.decode("utf-8")
194194

195195
@property
196196
def local_ip(self):
197197
"""Returns the local IP Address, False if not set."""
198198
self.uart_write(b"AT+CIFSR\r\n")
199-
self._read_line()
199+
self.read_line()
200200
try:
201201
ip_addr = self.pretty_ip(self._buf)
202202
except ValueError:
@@ -209,9 +209,9 @@ def iccid(self):
209209
if self._debug:
210210
print("ICCID")
211211
self.uart_write(b"AT+CCID\r\n")
212-
self._read_line(timeout=2000) # 6.2.23, 2sec max. response time
212+
self.read_line(timeout=2000) # 6.2.23, 2sec max. response time
213213
iccid = self._buf.decode()
214-
self._read_line() # eat 'OK'
214+
self.read_line() # eat 'OK'
215215
return iccid
216216

217217
@property
@@ -240,7 +240,7 @@ def set_gprs(self, apn=None, enable=True):
240240
# enable multi connection mode (3,1)
241241
if not self._send_check_reply(b"AT+CIPMUX=1", reply=REPLY_OK):
242242
return False
243-
self._read_line()
243+
self.read_line()
244244

245245
# enable receive data manually (7,2)
246246
if not self._send_check_reply(b"AT+CIPRXGET=1", reply=REPLY_OK):
@@ -348,7 +348,7 @@ def rssi(self):
348348
rssi = map_range(reply_num, 2, 30, -110, -54)
349349

350350
# read out the 'ok'
351-
self._read_line()
351+
self.read_line()
352352
return rssi
353353

354354
@property
@@ -367,7 +367,7 @@ def gps(self):
367367
status = int(self._buf[10:11].decode("utf-8"))
368368
if status == 1:
369369
status = 3 # assume 3D fix
370-
self._read_line()
370+
self.read_line()
371371
elif self._fona_type == FONA_3G_A or self._fona_type == FONA_3G_E:
372372
raise NotImplementedError(
373373
"FONA 3G not currently supported by this library."
@@ -396,14 +396,14 @@ def gps(self, gps_on=False):
396396
if self._fona_type == FONA_808_V2:
397397
if not self._send_parse_reply(b"AT+CGPSPWR?", b"+CGPSPWR: ", ":"):
398398
return False
399-
self._read_line()
399+
self.read_line()
400400
if not self._send_parse_reply(b"AT+CGNSPWR?", b"+CGNSPWR: ", ":"):
401401
return False
402402

403403
state = self._buf
404404

405405
if gps_on and not state:
406-
self._read_line()
406+
self.read_line()
407407
if self._fona_type == FONA_808_V2:
408408
# try GNS
409409
if not self._send_check_reply(b"AT+CGNSPWR=1", reply=REPLY_OK):
@@ -438,9 +438,9 @@ def get_host_by_name(self, hostname):
438438
return False
439439

440440
# attempt to parse a response
441-
self._read_line()
441+
self.read_line()
442442
while not self._parse_reply(b"+CDNSGIP:", idx=2):
443-
self._read_line()
443+
self.read_line()
444444

445445
return self._buf
446446

@@ -487,23 +487,23 @@ def send_sms(self, phone_number, message):
487487
return False
488488

489489
self.uart_write(b'AT+CMGS="+' + str(phone_number).encode() + b'"' + b"\r")
490-
self._read_line()
490+
self.read_line()
491491

492492
# expect >
493493
if self._buf[0] != 62:
494494
# promoting mark ('>') not found
495495
return False
496-
self._read_line()
496+
self.read_line()
497497

498498
# write out message and ^z
499499
self.uart_write((message + chr(26)).encode())
500500

501501
if self._fona_type == FONA_3G_A or self._fona_type == FONA_3G_E:
502502
# eat 2x CRLF
503-
self._read_line(200)
504-
self._read_line(200)
503+
self.read_line(200)
504+
self.read_line(200)
505505
# read +CMGS, wait ~10sec.
506-
self._read_line(10000)
506+
self.read_line(10000)
507507

508508
if not "+CMGS" in self._buf:
509509
return False
@@ -531,18 +531,18 @@ def num_sms(self, sim_storage=True):
531531
):
532532
return self._buf
533533

534-
self._read_line() # eat OK
534+
self.read_line() # eat OK
535535
if self._send_parse_reply(b"AT+CPMS?", b'"SM",', idx=1):
536536
return self._buf
537537

538-
self._read_line() # eat OK
538+
self.read_line() # eat OK
539539
if self._send_parse_reply(b"AT+CPMS?", b'"SM_P",', idx=1):
540540
return self._buf
541541
return False
542542

543543
def delete_all_sms(self):
544544
"""Deletes all SMS messages on the FONA SIM."""
545-
self._read_line()
545+
self.read_line()
546546
if not self._send_check_reply(b"AT+CMGF=1", reply=REPLY_OK):
547547
return False
548548

@@ -579,7 +579,7 @@ def read_sms(self, sms_slot):
579579
return False
580580

581581
self.uart_write(b"AT+CMGR=" + str(sms_slot).encode() + b"\r\n")
582-
self._read_line(1000)
582+
self.read_line(1000)
583583
resp = self._buf
584584

585585
# get sender
@@ -597,7 +597,7 @@ def read_sms(self, sms_slot):
597597
self._uart.readinto(self._buf)
598598
message = bytes(self._buf).decode()
599599
self._uart.reset_input_buffer()
600-
self._read_line() # eat 'OK'
600+
self.read_line() # eat 'OK'
601601

602602
return sender, message
603603

@@ -611,19 +611,19 @@ def get_socket(self):
611611
print("*** Get socket")
612612

613613
self.uart_write(b"AT+CIPSTATUS\r\n")
614-
self._read_line(100) # OK
615-
self._read_line(100) # table header
614+
self.read_line(100) # OK
615+
self.read_line(100) # table header
616616

617617
allocated_socket = 0
618618
for sock in range(0, FONA_MAX_SOCKETS): # check if INITIAL state
619-
self._read_line(100)
619+
self.read_line(100)
620620
self._parse_reply(b"C:", idx=5)
621621
if self._buf.strip('"') == "INITIAL" or self._buf.strip('"') == "CLOSED":
622622
allocated_socket = sock
623623
break
624624
# read out the rest of the responses
625625
for _ in range(allocated_socket, FONA_MAX_SOCKETS):
626-
self._read_line(100)
626+
self.read_line(100)
627627
if self._debug:
628628
print("Allocated socket #%d" % allocated_socket)
629629
return allocated_socket
@@ -638,7 +638,7 @@ def remote_ip(self, sock_num):
638638
), "Provided socket exceeds the maximum number of \
639639
sockets for the FONA module."
640640
self.uart_write(b"AT+CIPSTATUS=" + str(sock_num).encode() + b"\r\n")
641-
self._read_line(100)
641+
self.read_line(100)
642642

643643
self._parse_reply(b"+CIPSTATUS:", idx=3)
644644
return self._buf
@@ -654,10 +654,10 @@ def socket_status(self, sock_num):
654654
sockets for the FONA module."
655655
if not self._send_check_reply(b"AT+CIPSTATUS", reply=REPLY_OK, timeout=100):
656656
return False
657-
self._read_line()
657+
self.read_line()
658658

659659
for state in range(0, sock_num + 1): # read "C: <n>" for each active connection
660-
self._read_line()
660+
self.read_line()
661661
if state == sock_num:
662662
break
663663
self._parse_reply(b"C:", idx=5)
@@ -666,7 +666,7 @@ def socket_status(self, sock_num):
666666

667667
# eat the rest of the sockets
668668
for _ in range(sock_num, FONA_MAX_SOCKETS):
669-
self._read_line()
669+
self.read_line()
670670

671671
if not "CONNECTED" in state:
672672
return False
@@ -691,8 +691,8 @@ def socket_available(self, sock_num):
691691
if self._debug:
692692
print("\t {} bytes available.".format(self._buf))
693693

694-
self._read_line()
695-
self._read_line()
694+
self.read_line()
695+
self.read_line()
696696

697697
return data
698698

@@ -727,7 +727,7 @@ def socket_connect(self, sock_num, dest, port, conn_mode=TCP_MODE):
727727

728728
# Query local IP Address
729729
self.uart_write(b"AT+CIFSR\r\n")
730-
self._read_line()
730+
self.read_line()
731731

732732
# Start connection
733733
self.uart_write(b"AT+CIPSTART=" + str(sock_num).encode())
@@ -760,7 +760,7 @@ def socket_close(self, sock_num, quick_close=1):
760760

761761
self.uart_write(b"AT+CIPCLOSE=" + str(sock_num).encode() + b",")
762762
self.uart_write(str(quick_close).encode() + b"\r\n")
763-
self._read_line()
763+
self.read_line()
764764
if not self._parse_reply(b"CLOSE OK", idx=0):
765765
return False
766766
return True
@@ -784,7 +784,7 @@ def socket_read(self, sock_num, length):
784784
self.uart_write(b",")
785785
self.uart_write(str(length).encode() + b"\r\n")
786786

787-
self._read_line()
787+
self.read_line()
788788

789789
if not self._parse_reply(b"+CIPRXGET:"):
790790
return False
@@ -799,7 +799,7 @@ def socket_write(self, sock_num, buffer):
799799
:param bytes buffer: Bytes to write to socket.
800800
801801
"""
802-
self._read_line()
802+
self.read_line()
803803
assert (
804804
sock_num < FONA_MAX_SOCKETS
805805
), "Provided socket exceeds the maximum number of \
@@ -808,14 +808,14 @@ def socket_write(self, sock_num, buffer):
808808
self._uart.reset_input_buffer()
809809
self.uart_write(b"AT+CIPSEND=" + str(sock_num).encode())
810810
self.uart_write(b"," + str(len(buffer)).encode() + b"\r\n")
811-
self._read_line()
811+
self.read_line()
812812

813813
if self._buf[0] != 62:
814814
# promoting mark ('>') not found
815815
return False
816816

817817
self.uart_write(buffer + b"\r\n")
818-
self._read_line(3000)
818+
self.read_line(3000)
819819

820820
if "SEND OK" not in self._buf.decode():
821821
return False
@@ -829,15 +829,6 @@ def in_waiting(self):
829829
"""Returns number of bytes available to be read in the input buffer."""
830830
return self._uart.in_waiting
831831

832-
def uart_readinto(self, buf):
833-
"""Reads len(buf) bytes into a provided buf.
834-
:param bytearray buf: bytes object.
835-
"""
836-
self._uart.readinto(buf)
837-
if self._debug:
838-
print("\tUARTREAD ::", buf)
839-
return buf
840-
841832
def uart_write(self, buffer):
842833
"""UART ``write`` with optional debug that prints
843834
the buffer before sending.
@@ -855,7 +846,7 @@ def _send_parse_reply(self, send_data, reply_data, divider=",", idx=0):
855846
:param str divider: Separator
856847
857848
"""
858-
self._read_line()
849+
self.read_line()
859850
self._get_reply(send_data)
860851

861852
if not self._parse_reply(reply_data, divider, idx):
@@ -877,7 +868,7 @@ def _get_reply(
877868
else:
878869
self.uart_write(prefix + suffix + b"\r\n")
879870

880-
return self._read_line(timeout)
871+
return self.read_line(timeout)
881872

882873
def _parse_reply(self, reply, divider=",", idx=0):
883874
"""Attempts to find reply in UART buffer, reads up to divider.
@@ -903,7 +894,7 @@ def _parse_reply(self, reply, divider=",", idx=0):
903894

904895
return True
905896

906-
def _read_line(self, timeout=FONA_DEFAULT_TIMEOUT_MS, multiline=False):
897+
def read_line(self, timeout=FONA_DEFAULT_TIMEOUT_MS, multiline=False):
907898
"""Reads one or multiple lines into the buffer. Optionally prints the buffer
908899
after reading.
909900
:param int timeout: Time to wait for UART serial to reply, in seconds.
@@ -952,7 +943,7 @@ def _send_check_reply(
952943
:param bytes reply: Expected response from module.
953944
954945
"""
955-
self._read_line()
946+
self.read_line()
956947
if send is None:
957948
if not self._get_reply(prefix=prefix, suffix=suffix, timeout=timeout):
958949
return False
@@ -995,14 +986,14 @@ def _get_reply_quoted(self, prefix, suffix, timeout):
995986

996987
self.uart_write(prefix + b'"' + suffix + b'"\r\n')
997988

998-
return self._read_line(timeout)
989+
return self.read_line(timeout)
999990

1000991
def _expect_reply(self, reply, timeout=10000):
1001992
"""Reads line from FONA module and compares to reply from FONA module.
1002993
:param bytes reply: Expected reply from module.
1003994
1004995
"""
1005-
self._read_line(timeout)
996+
self.read_line(timeout)
1006997
if reply not in self._buf:
1007998
return False
1008999
return True

0 commit comments

Comments
 (0)