CallDistanceTransceiver.py: make log_symbol() a standalone function
[SaveMySugar/python3-savemysugar.git] / src / savemysugar / CallDistanceTransceiver.py
index 4a7e139..d05236b 100755 (executable)
@@ -161,6 +161,11 @@ class MorseDistanceModulator(object):
         return distances
 
 
+def log_symbol(distance, symbol, extra_info=""):
+    logging.info("distance: %.2f Received \"%s\"%s", distance, symbol,
+                 extra_info)
+
+
 class CallDistanceTransceiver(object):
     """Transmit Morse messages using the distance between calls.
 
@@ -216,8 +221,6 @@ class CallDistanceTransceiver(object):
         self.modem = modem
         self.translator = MorseTranslator()
 
-        self.destination_number = ""
-
         self.call_setup_time_max = call_setup_time_max
 
         if add_inter_call_distance:
@@ -287,17 +290,13 @@ class CallDistanceTransceiver(object):
 
         self.end_of_message = False
 
-    def log_symbol(self, distance, symbol, extra_info=""):
-        logging.info("distance: %.2f Received \"%s\"%s", distance, symbol,
-                     extra_info)
-
     def receive_character(self):
         current_ring_time = time.time()
 
         if self.previous_ring_time == -1:
             self.previous_ring_time = current_ring_time
             self.previous_call_time = current_ring_time
-            self.log_symbol(0, "", "(The very first ring)")
+            log_symbol(0, "", "(The very first ring)")
             return
 
         ring_distance = current_ring_time - self.previous_ring_time
@@ -326,7 +325,7 @@ class CallDistanceTransceiver(object):
             character = self.translator.signal_to_character(signal)
             extra_info = " got \"%s\"" % character
 
-        self.log_symbol(call_distance, symbol, extra_info)
+        log_symbol(call_distance, symbol, extra_info)
 
         if symbol != "EOM":
             # Add spaces around the wordspace symbol to make it easier to split
@@ -352,7 +351,7 @@ class CallDistanceTransceiver(object):
     def get_text(self):
         return self.text_message
 
-    def transmit_symbol(self, symbol, sleep_time):
+    def transmit_symbol(self, destination_number, symbol, sleep_time):
         logging.info("Dial and wait %.2f = %.2f + %.2f seconds "
                      "(transmitting '%s')",
                      self.call_setup_time_max + sleep_time,
@@ -363,15 +362,13 @@ class CallDistanceTransceiver(object):
         # 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.
-        self.modem.send_command("ATDT" + self.destination_number + ";")
+        self.modem.send_command("ATDT" + destination_number + ";")
         time.sleep(self.call_setup_time_max)
         self.modem.send_command("ATH")
         self.modem.get_response()
         time.sleep(sleep_time)
 
     def transmit(self, message, destination_number):
-        self.destination_number = destination_number
-
         morse_message = self.translator.text_to_morse(message)
         distances = self.modulator.modulate(morse_message)
 
@@ -384,7 +381,7 @@ class CallDistanceTransceiver(object):
                 total_sleep_time = self.call_setup_time_max + distance
                 symbol = self.modulator.distance_to_symbol(total_sleep_time)
 
-            self.transmit_symbol(symbol, distance)
+            self.transmit_symbol(destination_number, symbol, distance)
 
     def estimate_transmit_duration(self, message):
         morsemessage = self.translator.text_to_morse(message)
@@ -401,7 +398,7 @@ class CallDistanceTransceiver(object):
                       transmitting_time)
 
 
-def test_send_receive():
+def test_transmit_receive():
     logging.basicConfig(level=logging.DEBUG)
     call_setup_time_min = 0
     call_setup_time_max = 0.01
@@ -424,24 +421,27 @@ def test_send_receive():
         def send_command(self, command):
             pass
 
-        def get_response(self, response):
+        def get_response(self, response=None):
             # pylint: disable=unused-argument
 
-            setup_time = random.uniform(self.transceiver.call_setup_time_min,
-                                        self.transceiver.call_setup_time_max)
+            setup_time = random.uniform(self.transceiver.modulator.period_min,
+                                        self.transceiver.modulator.period_max)
 
             if self.ring_count == 0:
                 # dummy ring
                 pass
             elif self.ring_count == 1:
                 # received a '.'
-                time.sleep(setup_time + self.transceiver.dot_time.dist)
+                dot_time = self.transceiver.modulator.dot_time.dist
+                time.sleep(setup_time + dot_time)
             elif self.ring_count == 2:
                 # received a '/'
-                time.sleep(setup_time + self.transceiver.wordspace_time.dist)
+                wordspace_time = self.transceiver.modulator.wordspace_time.dist
+                time.sleep(setup_time + wordspace_time)
             else:
                 # received an 'EOM'
-                time.sleep(setup_time + self.transceiver.eom_time.dist)
+                eom_time = self.transceiver.modulator.eom_time.dist
+                time.sleep(setup_time + eom_time)
 
             self.ring_count += 1
             self.ring_count %= 4
@@ -454,13 +454,15 @@ def test_send_receive():
 
     modem.transceiver = xcv
 
+    xcv.transmit("CODEX PARIS", "0")
+
     while True:
-        xcv.receive_loop()
         modem.ring_count = 0
+        xcv.receive_loop()
         print()
         print("Message received!")
         print("\"%s\"" % xcv.get_text(), flush=True)
 
 
 if __name__ == "__main__":
-    test_send_receive()
+    test_transmit_receive()