Skip to content

Commit 7990aa5

Browse files
author
James Boulton
committedApr 14, 2024·
Check the write buffer bytes sent when writing bytes over serial
1 parent 9e2a555 commit 7990aa5

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed
 

‎dashio/sim767x.py

+33-8
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,32 @@ def __init__(self, serial_port: str, network: str, apn: str, baud_rate: int):
160160
"""
161161
self._network = network
162162
self._apn = apn
163-
self._serial_at = serial.Serial(serial_port, baud_rate)
163+
self._serial_at = serial.Serial(serial_port, baud_rate,)
164164
self._serial_at.flush()
165165
self._sched = Schedular("LTE Connection Schedular")
166166
self._sched.add_timer(0.001, 0.0, self._run_processing)
167167
self._sched.add_timer(1.0, 0.25, self._run_one_second_module_tasks)
168168
self._sched.add_timer(1.0, 0.5, self._run_one_second_mqtt_tasks)
169169
self._sched.add_timer(1.0, 0.75, self._run_one_second_gnss_tasks)
170170

171+
def write_serial_buffer(self, data: bytes, chunk_size=64):
172+
"""
173+
Writes data to a serial port while preventing buffer overrun.
174+
175+
Args:
176+
- data: Data to be written to the serial port.
177+
- chunk_size: Maximum chunk size to write at a time.
178+
"""
179+
total_bytes_written = 0
180+
while total_bytes_written < len(data):
181+
chunk = data[total_bytes_written: total_bytes_written + chunk_size]
182+
bytes_written = self._serial_at.write(chunk)
183+
if bytes_written is not None:
184+
total_bytes_written += bytes_written
185+
# Optional: Add a delay if needed between chunks
186+
time.sleep(0.1)
187+
return total_bytes_written
188+
171189
def close(self):
172190
"""Close"""
173191
self._sched.stop()
@@ -267,7 +285,8 @@ def _protected_at_cmd(self, cmd: str, on_ok_callback: Callable[[], None], on_ent
267285
self._run_at_callbacks = True
268286

269287
command = f"AT+{cmd}\r\n"
270-
self._serial_at.write(command.encode())
288+
self.write_serial_buffer(command.encode())
289+
# self._serial_at.write(command.encode())
271290

272291
return True
273292
else:
@@ -600,7 +619,8 @@ def _set_unsolicited_network_reg_messages(self):
600619
def _set_carrier(self):
601620
if self._network:
602621
carrier_str = f'AT+COPS=4,2,"{self._network}"' # 1 = manual (4 = manual/auto), 2 = short format. For One NZ SIM cards not roaming in NZ, Could take up to 60s
603-
self._serial_at.write(carrier_str.encode()) # ??? Maybe should be protected
622+
self.write_serial_buffer(carrier_str.encode())
623+
# self._serial_at.write(carrier_str.encode()) # ??? Maybe should be protected
604624

605625
def _start_pdp_context(self):
606626
context_str = f'CGDCONT=1,"IP","{self._apn}"'
@@ -647,14 +667,16 @@ def _mqtt_request_will_toic(self):
647667
self._mqtt_connect()
648668

649669
def _mqtt_enter_will_toic(self):
650-
self._serial_at.write((self._will_topic).encode())
670+
self.write_serial_buffer(self._will_topic.encode())
671+
# self._serial_at.write(self._will_topic.encode())
651672

652673
def _mqtt_request_will_message(self):
653674
temp_str = f'CMQTTWILLMSG=0,{str(len(self._will_message))},2'
654675
self._protected_at_cmd(temp_str, self._req_mqtt_connect, self._mqtt_enter_will_message) # clientIndex = 0, qos = 2
655676

656677
def _mqtt_enter_will_message(self):
657-
self._serial_at.write(self._will_message.encode())
678+
self.write_serial_buffer(self._will_topic.encode())
679+
# self._serial_at.write(self._will_message.encode())
658680

659681
def _req_mqtt_connect(self):
660682
self._mqtt_state = MqttState.MQTT_REQ_CONNECT
@@ -672,7 +694,8 @@ def _mqtt_req_subscribe(self):
672694

673695
def _mqtt_enter_sub_topic(self):
674696
logger.debug("Sub Topic: %s", self._sub_topic)
675-
self._serial_at.write(self._sub_topic.encode())
697+
self.write_serial_buffer(self._sub_topic.encode())
698+
# self._serial_at.write(self._sub_topic.encode())
676699

677700
# ----- MQTT Publish ------
678701
def _mqtt_request_publish(self, topic: str, message: str):
@@ -685,14 +708,16 @@ def _mqtt_request_publish(self, topic: str, message: str):
685708

686709
def _mqtt_enter_pub_topic(self):
687710
logger.debug("Pub Topic: %s", self._pub_topic)
688-
self._serial_at.write(self._pub_topic.encode())
711+
self.write_serial_buffer(self._pub_topic.encode())
712+
# self._serial_at.write(self._pub_topic.encode())
689713

690714
def _mqtt_request_payload(self):
691715
self._protected_at_cmd(f"CMQTTPAYLOAD=0,{str(len(self._tx_message))}", self._mqtt_publish, self._mqtt_enter_message) # clientIndex = 0
692716

693717
def _mqtt_enter_message(self):
694718
logger.debug("Publish Message: %s\n%s", self._pub_topic, self._tx_message)
695-
self._serial_at.write(self._tx_message.encode())
719+
self.write_serial_buffer(self._tx_message.encode())
720+
# self._serial_at.write(self._tx_message.encode())
696721

697722
def _mqtt_publish(self):
698723
if self._protected_at_cmd("CMQTTPUB=0,2,60", self._print_ok, None): # clientIndex = 0

‎utilities/c64_encode

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ def _format_python(c64_str: str, width=80) -> str:
2323
c64_str,
2424
width=width,
2525
replace_whitespace=False,
26-
drop_whitespace=False
26+
drop_whitespace=False,
27+
expand_tabs=False
2728
)
2829
new_s = '"\\\n"'.join(new_l)
2930
return '"' + new_s + '"'

0 commit comments

Comments
 (0)
Please sign in to comment.