The ATH command can take some time, resulting in a positive delay; or
the first time.sleep() may terminate earlier resulting in a negative
delay.
In either case compensate for these delays in the second sleep, in order
to try to diverge as little possible from the total nominal symbol
transmission distance.
# Dial, then wait self.call_setup_time_max to make sure the receiver
# gets at least one RING, and then hangup and sleep the time needed to
# transmit a symbol.
# Dial, then wait self.call_setup_time_max to make sure the receiver
# gets at least one RING, and then hangup and sleep the time needed to
# transmit a symbol.
+ time_before = time.time()
self.modem.send_command("ATDT" + destination_number + ";")
time.sleep(self.call_setup_time_max)
self.modem.send_command("ATH")
self.modem.get_response()
self.modem.send_command("ATDT" + destination_number + ";")
time.sleep(self.call_setup_time_max)
self.modem.send_command("ATH")
self.modem.get_response()
+ time_after = time.time()
+
+ # Account for possible delays in order to be as adherent as
+ # possible to the nominal total symbol transmission distance.
+ delay = (time_after - time_before) - self.call_setup_time_max
+ logging.debug("Delay %.2f", delay)
+
+ remaining_sleep_time = sleep_time - delay
+ if remaining_sleep_time < 0:
+ remaining_sleep_time = 0
+
+ logging.debug("Should sleep %.2f. Will sleep %.2f", sleep_time,
+ remaining_sleep_time)
+ time.sleep(remaining_sleep_time)
def transmit(self, message, destination_number):
morse_message = self.translator.text_to_morse(message)
def transmit(self, message, destination_number):
morse_message = self.translator.text_to_morse(message)