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.
self.modem = modem
self.translator = MorseTranslator()
- self.destination_number = ""
-
self.call_setup_time_max = call_setup_time_max
if add_inter_call_distance:
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):
+ def receive_symbol(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
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
def receive_loop(self):
while not self.end_of_message:
self.modem.get_response("RING")
- self.receive_character()
+ self.receive_symbol()
logging.debug("Current message: %s", self.morse_message)
self.end_of_message = False
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,
# 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)
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)
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
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
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()