11from time import sleep
22from typing import Callable , Any
3+ from logging import Logger , getLogger
34
45from rich .progress import Progress , TextColumn , BarColumn , TaskProgressColumn
56
@@ -73,7 +74,7 @@ def encode_message(
7374 message : str
7475) -> str :
7576 words : list [str ] = []
76- for word in message .lower ().split (" " ):
77+ for word in message .casefold ().split (" " ):
7778 w : list [str ] = []
7879 for letter in word :
7980 w .append ("|" .join (MORSE_TABLE .get (letter , "" )))
@@ -84,12 +85,16 @@ def encode_message(
8485
8586
8687def relay_message (
88+ logger : Logger ,
8789 beepstart : Callable [[], Any ],
8890 beepstop : Callable [[], Any ],
8991 message : str ,
9092 unittime : float
9193) -> None :
94+ logger .info (f"Starting morse message: '{ message } '" )
9295 encoded = encode_message (message )
96+ logger .info ("Message encoded" )
97+ logger .info ("Relaying message..." )
9398 with Progress (
9499 TextColumn ("[progress.description]{task.description}" ),
95100 BarColumn (),
@@ -116,6 +121,9 @@ def relay_message(
116121 f"Invalid morse stream character: '{ char } '"
117122 )
118123
124+ echo_green ("Message complete" )
125+ logger .info ("Message complete" )
126+
119127
120128def main (
121129 port : str ,
@@ -129,34 +137,44 @@ def main(
129137 unittime : int = 50 ,
130138 compatibility : str = "none" ,
131139) -> None :
140+ logger = getLogger ("iman.morse" )
132141 if not ignore_non_ascii :
133142 try :
134143 message .casefold ().encode ("ascii" )
135144 except UnicodeEncodeError :
136145 echo_red ("The message contains non-ASCII characters." )
146+ logger .critical ("Message contains non-ASCII characters." )
137147 exit (1 )
138148
149+ logger .info (f"Opening connection on { port } " )
150+ logger .debug (
151+ f"Connection parameters: baud={ baud :d} , timeout={ timeout :d} , "
152+ f"tries={ retry :d} , sync-after-timeout={ str (sync_after_timeout )} "
153+ )
139154 with open_serial (
140155 port ,
141156 speed = baud ,
142157 timeout = timeout ,
143158 retry = retry ,
144159 sync_after_timeout = sync_after_timeout
145160 ) as com :
146- tps = GeoCom (com )
161+ tps = GeoCom (com , logger . getChild ( "instrument" ) )
147162 beepstart = tps .bmm .beep_start
148163 beepstop = tps .bmm .beep_stop
149164 match compatibility .lower ():
150165 case "tps1000" :
166+ logger .debug (f"Running with '{ compatibility } ' compatibility" )
151167 beepstart = tps .bmm .beep_on
152168 beepstop = tps .bmm .beep_off
153169 case "none" :
154170 pass
155171
156172 relay_message (
173+ logger ,
157174 lambda : beepstart (intensity ),
158175 beepstop ,
159176 message ,
160177 unittime * 1e-3
161178 )
162- echo_green ("Message complete." )
179+
180+ logger .info (f"Closed connection on { port } " )
0 commit comments