PyFT8 2.11.0__tar.gz → 2.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyft8-2.11.0 → pyft8-2.12.0}/PKG-INFO +2 -2
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/pskreporter.py +1 -1
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/pyft8.py +39 -34
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/PKG-INFO +2 -2
- {pyft8-2.11.0 → pyft8-2.12.0}/README.md +1 -1
- {pyft8-2.11.0 → pyft8-2.12.0}/pyproject.toml +1 -1
- {pyft8-2.11.0 → pyft8-2.12.0}/LICENSE +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/MANIFEST.in +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/__init__.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/databases.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/gui.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/receiver.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/rigctrl.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/time_utils.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8/transmitter.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/SOURCES.txt +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/dependency_links.txt +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/entry_points.txt +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/requires.txt +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/PyFT8.egg-info/top_level.txt +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/setup.cfg +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/dev/CQ AAAA.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/dev/osd.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/dev/test_generate_wav.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/dev/test_loopback_performance.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/dev/view_worked_before.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/plot_baseline.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/spare.py +0 -0
- {pyft8-2.11.0 → pyft8-2.12.0}/tests/test_batch_and_live.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyFT8
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.12.0
|
|
4
4
|
Summary: FT8 Decoding and Encoding in Python with test/loopback code
|
|
5
5
|
Author-email: G1OJS <g1ojs@yahoo.com>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -20,7 +20,7 @@ Dynamic: license-file
|
|
|
20
20
|
# PyFT8 [](https://pepy.tech/projects/pyft8) [](https://pepy.tech/projects/pyft8)
|
|
21
21
|
# All-Python FT8 Transceiver GUI / Command Line Modem
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
## Note - my recent additions to the GUI have caused issues with the non-GUI based command line processing. I'm working on fixing this. V2.11.0 addresses this somewhat but I need to complete the revision and check the notes below for the command line options ##
|
|
24
24
|
|
|
25
25
|
This repository contains the source code for PyFT8, an all-Python open source FT8 transceiver that you can run as a basic GUI or from the command line to receive and transmit. Decoding performance (number of decodes) is about 70% of that achieved by WSJT-x in NORM mode, but (tbc) slightly above ft8_lib.
|
|
26
26
|
|
|
@@ -51,7 +51,7 @@ class PSKR_upload:
|
|
|
51
51
|
self.rx_block = self._block(b"\x99\x92", rx)
|
|
52
52
|
self.console_print = console_print
|
|
53
53
|
self.lock = threading.Lock()
|
|
54
|
-
print(f"[PSKR_upload] Spots will upload to pskreporter")
|
|
54
|
+
print(f"[PSKR_upload] Spots will upload to pskreporter if Rx band is known")
|
|
55
55
|
threading.Thread(target = self._check_for_send, daemon = True).start()
|
|
56
56
|
|
|
57
57
|
def _enc_str(self, s):
|
|
@@ -12,12 +12,12 @@ from PyFT8.time_utils import global_time_utils
|
|
|
12
12
|
from PyFT8.rigctrl import Rig_CAT, Rig_hamlib
|
|
13
13
|
from PyFT8.databases import History, ADIF
|
|
14
14
|
|
|
15
|
-
VER = '2.
|
|
15
|
+
VER = '2.12.0'
|
|
16
16
|
|
|
17
17
|
MAX_TX_START_SECONDS = 2.5
|
|
18
18
|
HEARING_PANEL_LIFE_MINS = 5
|
|
19
19
|
PSKR_REFRESH_MINS = 20
|
|
20
|
-
rig, gui, qso, adif_logging, history, pskr_upload = None, None, None, None, None, None
|
|
20
|
+
config_folder, rig, gui, qso, adif_logging, history, pskr_upload, output_device_idx = None, None, None, None, None, None, None, None
|
|
21
21
|
busy_profile, hearing_me = None, None
|
|
22
22
|
|
|
23
23
|
def get_config():
|
|
@@ -323,14 +323,22 @@ def cli():
|
|
|
323
323
|
parser.add_argument('-o','--outputcard_keywords', help = 'Comma-separated keywords to identify the output sound device')
|
|
324
324
|
parser.add_argument('-n','--no_gui', action='store_true', help = "Don't create a gui")
|
|
325
325
|
parser.add_argument('-m','--transmit_message', nargs='?', help = 'Transmit a message')
|
|
326
|
-
parser.add_argument('-w','--wave_output_file', nargs='?', help = 'Wave output file name'
|
|
326
|
+
parser.add_argument('-w','--wave_output_file', nargs='?', help = 'Wave output file name')
|
|
327
327
|
parser.add_argument('-a', '--parse_all_file', action='store_true', help = 'parse and save .../config_folder/ALL.txt to heard me / heard by me data')
|
|
328
328
|
args = parser.parse_args()
|
|
329
|
+
|
|
329
330
|
if len(sys.argv)==1:
|
|
330
331
|
parser.print_help(sys.stderr)
|
|
331
332
|
sys.exit(1)
|
|
333
|
+
|
|
334
|
+
if args.transmit_message or args.outputcard_keywords:
|
|
335
|
+
audio_out = AudioOut()
|
|
336
|
+
clearest_frequency = 760
|
|
337
|
+
|
|
338
|
+
if args.transmit_message and args.wave_output_file:
|
|
339
|
+
make_wav(args.transmit_message, f"{args.wave_output_file}")
|
|
340
|
+
sys.exit(1)
|
|
332
341
|
|
|
333
|
-
output_device_idx = None
|
|
334
342
|
config_folder = f"{args.config_folder}".strip()
|
|
335
343
|
get_config()
|
|
336
344
|
mc, mg = config['station']['call'], config['station']['grid']
|
|
@@ -347,44 +355,41 @@ def cli():
|
|
|
347
355
|
console_print("Connecting to rig via CAT")
|
|
348
356
|
rig = Rig_CAT(config)
|
|
349
357
|
|
|
350
|
-
if args.transmit_message or args.outputcard_keywords:
|
|
351
|
-
audio_out = AudioOut()
|
|
352
|
-
clearest_frequency = 760
|
|
353
|
-
|
|
354
358
|
if args.outputcard_keywords:
|
|
355
359
|
outputcard_keywords = args.outputcard_keywords.replace(' ','').split(',')
|
|
356
360
|
output_device_idx = audio_out.find_device(outputcard_keywords)
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
if args.outputcard_keywords:
|
|
361
|
+
|
|
362
|
+
if args.transmit_message and rig and args.outputcard_keywords:
|
|
360
363
|
qso.set_tx_message(args.transmit_message)
|
|
361
|
-
else:
|
|
362
|
-
make_wav(args.transmit_message, f"{config_folder}/{args.wave_output_file}")
|
|
363
|
-
else:
|
|
364
|
-
if not args.inputcard_keywords:
|
|
365
|
-
print("No input device specified")
|
|
366
364
|
sys.exit(1)
|
|
365
|
+
|
|
366
|
+
if not args.inputcard_keywords:
|
|
367
|
+
print("No input device specified")
|
|
368
|
+
sys.exit(1)
|
|
369
|
+
else:
|
|
367
370
|
audio_in = AudioIn(3100)
|
|
368
371
|
input_device_idx = audio_in.find_device(args.inputcard_keywords.replace(' ','').split(','))
|
|
369
372
|
if not input_device_idx:
|
|
370
373
|
console_print("No input device")
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
if
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
374
|
+
sys.exit(1)
|
|
375
|
+
rx = Receiver(audio_in, [200, 3100], on_rx_decode, on_rx_busy_profile)
|
|
376
|
+
audio_in.start_streamed_audio(input_device_idx)
|
|
377
|
+
|
|
378
|
+
if not args.no_gui:
|
|
379
|
+
gui = Gui(audio_in.dBgrid_main, 4, 2, config, on_gui_sidebars_refresh, on_gui_msg_click, on_gui_control_click)
|
|
380
|
+
history = History(config_folder, mc, mg, PSKR_REFRESH_MINS, args.parse_all_file)
|
|
381
|
+
adif_logging = ADIF(f"{config_folder}/PyFT8.adi")
|
|
382
|
+
history.load_from_wb(adif_logging.cache)
|
|
383
|
+
|
|
384
|
+
if mc is not None and 'pskreporter' in config.keys():
|
|
385
|
+
if config['pskreporter']['upload'] == 'Y':
|
|
386
|
+
pskr_upload = PSKR_upload(mc, mg, software = f"PyFT8 v{VER}", console_print = console_print) if not mc is None else None
|
|
387
|
+
|
|
388
|
+
if gui is None:
|
|
389
|
+
wait_for_keyboard()
|
|
390
|
+
else:
|
|
391
|
+
gui.set_bandstats_title(f"Pskreporter Spots\nto/from {config['station']['grid'][:4]} <{PSKR_REFRESH_MINS:.0f} mins")
|
|
392
|
+
gui.plt.show()
|
|
388
393
|
|
|
389
394
|
|
|
390
395
|
#================== TEST CODE ============================================================
|
|
@@ -394,6 +399,6 @@ if __name__ == "__main__":
|
|
|
394
399
|
#with mock.patch('sys.argv', ['pyft8', '-c C:/Users/drala/Documents/Projects/GitHub/G1OJS/PyFT8_cfg', '-a']):
|
|
395
400
|
#with mock.patch('sys.argv', ['pyft8', '-i Mic, CODEC', '-c C:/Users/drala/Documents/Projects/GitHub/G1OJS/PyFT8_cfg']):
|
|
396
401
|
#with mock.patch('sys.argv', ['pyft8', '-i Mic, CODEC', '-n', '-c C:/Users/drala/Documents/Projects/GitHub/G1OJS/PyFT8_cfg']):
|
|
397
|
-
#with mock.patch('sys.argv', ['pyft8', '-m', "CQ G1OJS IO90",
|
|
402
|
+
#with mock.patch('sys.argv', ['pyft8', '-m', "CQ G1OJS IO90", "-w", "PyFT8.wav"]):
|
|
398
403
|
#with mock.patch('sys.argv', ['pyft8', '-m', "CQ G1OJS IO90", '-o', "Speak, CODEC", '-c C:/Users/drala/Documents/Projects/GitHub/G1OJS/PyFT8_cfg']):
|
|
399
404
|
cli()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyFT8
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.12.0
|
|
4
4
|
Summary: FT8 Decoding and Encoding in Python with test/loopback code
|
|
5
5
|
Author-email: G1OJS <g1ojs@yahoo.com>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -20,7 +20,7 @@ Dynamic: license-file
|
|
|
20
20
|
# PyFT8 [](https://pepy.tech/projects/pyft8) [](https://pepy.tech/projects/pyft8)
|
|
21
21
|
# All-Python FT8 Transceiver GUI / Command Line Modem
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
## Note - my recent additions to the GUI have caused issues with the non-GUI based command line processing. I'm working on fixing this. V2.11.0 addresses this somewhat but I need to complete the revision and check the notes below for the command line options ##
|
|
24
24
|
|
|
25
25
|
This repository contains the source code for PyFT8, an all-Python open source FT8 transceiver that you can run as a basic GUI or from the command line to receive and transmit. Decoding performance (number of decodes) is about 70% of that achieved by WSJT-x in NORM mode, but (tbc) slightly above ft8_lib.
|
|
26
26
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# PyFT8 [](https://pepy.tech/projects/pyft8) [](https://pepy.tech/projects/pyft8)
|
|
2
2
|
# All-Python FT8 Transceiver GUI / Command Line Modem
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
## Note - my recent additions to the GUI have caused issues with the non-GUI based command line processing. I'm working on fixing this. V2.11.0 addresses this somewhat but I need to complete the revision and check the notes below for the command line options ##
|
|
5
5
|
|
|
6
6
|
This repository contains the source code for PyFT8, an all-Python open source FT8 transceiver that you can run as a basic GUI or from the command line to receive and transmit. Decoding performance (number of decodes) is about 70% of that achieved by WSJT-x in NORM mode, but (tbc) slightly above ft8_lib.
|
|
7
7
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|