mirror of
https://git.code.sf.net/p/fldigi/fldigi
synced 2026-08-13 17:47:54 -04:00
ADIF submode
* Add submode support
- export both MODE and SUBMODE to external loggers
iaw ADIF spec 3.04
This commit is contained in:
parent
044dd29fa7
commit
57cc6eaf2c
8 changed files with 402 additions and 344 deletions
|
|
@ -36,6 +36,7 @@
|
|||
#include "globals.h"
|
||||
#include "modem.h"
|
||||
#include "data_io.h"
|
||||
#include "strutil.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
@ -46,172 +47,187 @@ using namespace std;
|
|||
// Last value (true/false) determines if it's used with the KISS interface.
|
||||
// It must have 8 bit support. Current selection based on the modems used in FLAMP.
|
||||
|
||||
//struc entries:
|
||||
// mode, **modem, *sname, *name, *pskmail_name, *adif_name, *export_mode, *export_submode, *vid_name, iface_io
|
||||
|
||||
|
||||
const struct mode_info_t mode_info[NUM_MODES] = {
|
||||
{MODE_NULL, &null_modem, "NULL", "NULL", "", "NULL", "", "", DISABLED_IO },
|
||||
{MODE_NULL,&null_modem,"NULL","NULL","","NULL","","","", DISABLED_IO },
|
||||
|
||||
{MODE_CW, &cw_modem, "CW", "CW", "CW", "CW", "CW", "CW", DISABLED_IO },
|
||||
{MODE_CW,&cw_modem,"CW","CW","CW","CW","CW","","CW", DISABLED_IO },
|
||||
|
||||
{MODE_CONTESTIA, &contestia_modem, "CTSTIA", "Contestia", "", "CONTESTI", "CONTESTI", "CT", DISABLED_IO },
|
||||
{MODE_CONTESTIA,&contestia_modem,"CTSTIA","Contestia","","CONTESTI","CONTESTI","","CT", DISABLED_IO },
|
||||
|
||||
{MODE_DOMINOEXMICRO,&dominoexmicro_modem, "DOMEX Micro", "DominoEX Micro", "DOMINOEXMICRO", "DOMINO", "DOMINO", "DM M", DISABLED_IO },
|
||||
{MODE_DOMINOEX4, &dominoex4_modem, "DOMEX4", "DominoEX 4", "DOMINOEX4", "DOMINO", "DOMINO", "DM 4", DISABLED_IO },
|
||||
{MODE_DOMINOEX5, &dominoex5_modem, "DOMEX5", "DominoEX 5", "DOMINOEX5", "DOMINO", "DOMINO", "DM 5", DISABLED_IO },
|
||||
{MODE_DOMINOEX8, &dominoex8_modem, "DOMEX8", "DominoEX 8", "DOMINOEX8", "DOMINO", "DOMINO", "DM 8", DISABLED_IO },
|
||||
{MODE_DOMINOEX11, &dominoex11_modem, "DOMX11", "DominoEX 11", "DOMINOEX11", "DOMINO", "DOMINO", "DM11", DISABLED_IO },
|
||||
{MODE_DOMINOEX16, &dominoex16_modem, "DOMX16", "DominoEX 16", "DOMINOEX16", "DOMINO", "DOMINO", "DM16", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX22, &dominoex22_modem, "DOMX22", "DominoEX 22", "DOMINOEX22", "DOMINO", "DOMINO", "DM22", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX44, &dominoex44_modem, "DOMX44", "DominoEX 44", "DOMINOEX44", "DOMINO", "DOMINO", "DM44", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX88, &dominoex88_modem, "DOMX88", "DominoEX 88", "DOMINOEX88", "DOMINO", "DOMINO", "DM88", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEXMICRO,&dominoexmicro_modem,"DOMEX Micro","DominoEX Micro","DOMINOEXMICRO","DOMINO","DOMINO","","DM M", DISABLED_IO },
|
||||
{MODE_DOMINOEX4,&dominoex4_modem,"DOMEX4","DominoEX 4","DOMINOEX4","DOMINO","DOMINO","","DM 4", DISABLED_IO },
|
||||
{MODE_DOMINOEX5,&dominoex5_modem,"DOMEX5","DominoEX 5","DOMINOEX5","DOMINO","DOMINO","","DM 5", DISABLED_IO },
|
||||
{MODE_DOMINOEX8,&dominoex8_modem,"DOMEX8","DominoEX 8","DOMINOEX8","DOMINO","DOMINO","","DM 8", DISABLED_IO },
|
||||
{MODE_DOMINOEX11,&dominoex11_modem,"DOMX11","DominoEX 11","DOMINOEX11","DOMINO","DOMINO","","DM11", DISABLED_IO },
|
||||
{MODE_DOMINOEX16,&dominoex16_modem,"DOMX16","DominoEX 16","DOMINOEX16","DOMINO","DOMINO","","DM16", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX22,&dominoex22_modem,"DOMX22","DominoEX 22","DOMINOEX22","DOMINO","DOMINO","","DM22", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX44,&dominoex44_modem,"DOMX44","DominoEX 44","DOMINOEX44","DOMINO","DOMINO","","DM44", ARQ_IO | KISS_IO },
|
||||
{MODE_DOMINOEX88,&dominoex88_modem,"DOMX88","DominoEX 88","DOMINOEX88","DOMINO","DOMINO","","DM88", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_FELDHELL, &feld_modem, "FELDHELL", "Feld Hell", "", "HELL", "HELL", "HELL", DISABLED_IO },
|
||||
{MODE_SLOWHELL, &feld_slowmodem, "SLOWHELL", "Slow Hell", "", "HELL", "HELL", "SHLL", DISABLED_IO },
|
||||
{MODE_HELLX5, &feld_x5modem, "HELLX5", "Feld Hell X5", "", "HELL", "HELL", "HLX5", DISABLED_IO },
|
||||
{MODE_HELLX9, &feld_x9modem, "HELLX9", "Feld Hell X9", "", "HELL", "HELL", "HLX9", DISABLED_IO },
|
||||
{MODE_FSKHELL, &feld_FMmodem, "FSKHELL", "FSK Hell", "", "FMHELL", "HELL", "FMHL", DISABLED_IO },
|
||||
{MODE_FSKH105, &feld_FM105modem, "FSKH105", "FSK Hell-105", "", "FMHELL", "HELL", "H105", DISABLED_IO },
|
||||
{MODE_HELL80, &feld_80modem, "HELL80", "Hell 80", "", "HELL80", "HELL", "HL80", DISABLED_IO },
|
||||
{MODE_FELDHELL,&feld_modem,"FELDHELL","Feld Hell","","HELL","HELL","","HELL", DISABLED_IO },
|
||||
{MODE_SLOWHELL,&feld_slowmodem,"SLOWHELL","Slow Hell","","HELL","HELL","","SHLL", DISABLED_IO },
|
||||
{MODE_HELLX5,&feld_x5modem,"HELLX5","Feld Hell X5","","HELL","HELL","","HLX5", DISABLED_IO },
|
||||
{MODE_HELLX9,&feld_x9modem,"HELLX9","Feld Hell X9","","HELL","HELL","","HLX9", DISABLED_IO },
|
||||
{MODE_FSKHELL,&feld_FMmodem,"FSKHELL","FSK Hell","","FSKHELL","HELL","FSKHELL","FSKHL", DISABLED_IO },
|
||||
{MODE_FSKH105,&feld_FM105modem,"FSKH105","FSK Hell-105","","FMHELL","HELL","FMHELL","H105", DISABLED_IO },
|
||||
{MODE_HELL80,&feld_80modem,"HELL80","Hell 80","","HELL80","HELL","HELL80","HL80", DISABLED_IO },
|
||||
|
||||
{MODE_MFSK8, &mfsk8_modem, "MFSK8", "MFSK-8", "MFSK8", "MFSK8", "MFSK", "MK 8", DISABLED_IO },
|
||||
{MODE_MFSK16, &mfsk16_modem, "MFSK16", "MFSK-16", "MFSK16", "MFSK16", "MFSK", "MK16", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK32, &mfsk32_modem, "MFSK32", "MFSK-32", "MFSK32", "MFSK32", "MFSK", "MK32", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK8,&mfsk8_modem,"MFSK8","MFSK-8","MFSK8","MFSK8","MFSK","MFSK8","MK 8", DISABLED_IO },
|
||||
{MODE_MFSK16,&mfsk16_modem,"MFSK16","MFSK-16","MFSK16","MFSK16","MFSK","MFSK16","MK16", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK32,&mfsk32_modem,"MFSK32","MFSK-32","MFSK32","MFSK32","MFSK","MFSK32","MK32", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_MFSK4, &mfsk4_modem, "MFSK4", "MFSK-4", "MFSK4", "MFSK4", "MFSK", "MK 4", DISABLED_IO },
|
||||
{MODE_MFSK11, &mfsk11_modem, "MFSK11", "MFSK-11", "MFSK11", "MFSK11", "MFSK", "MK11", DISABLED_IO },
|
||||
{MODE_MFSK22, &mfsk22_modem, "MFSK22", "MFSK-22", "MFSK22", "MFSK22", "MFSK", "MK22", DISABLED_IO },
|
||||
{MODE_MFSK31, &mfsk31_modem, "MFSK31", "MFSK-31", "MFSK31", "MFSK31", "MFSK", "MK31", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK64, &mfsk64_modem, "MFSK64", "MFSK-64", "MFSK64", "MFSK64", "MFSK", "MK64", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK128, &mfsk128_modem, "MFSK128", "MFSK-128", "MFSK128", "MFSK128", "MFSK", "MK128", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK64L, &mfsk64l_modem, "MFSK64L", "MFSK-64L", "MFSK64L", "MFSK64L", "MFSK", "MK64L", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK128L, &mfsk128l_modem, "MFSK128L", "MFSK-128L", "MFSK128L", "MFSK128L", "MFSK", "MK128L", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK4,&mfsk4_modem,"MFSK4","MFSK-4","MFSK4","MFSK4","MFSK","MFSK4","MK 4", DISABLED_IO },
|
||||
{MODE_MFSK11,&mfsk11_modem,"MFSK11","MFSK-11","MFSK11","MFSK11","MFSK","MFSK11","MK11", DISABLED_IO },
|
||||
{MODE_MFSK22,&mfsk22_modem,"MFSK22","MFSK-22","MFSK22","MFSK22","MFSK","MFSK22","MK22", DISABLED_IO },
|
||||
{MODE_MFSK31,&mfsk31_modem,"MFSK31","MFSK-31","MFSK31","MFSK31","MFSK","MFSK31","MK31", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK64,&mfsk64_modem,"MFSK64","MFSK-64","MFSK64","MFSK64","MFSK","MFSK64","MK64", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK128,&mfsk128_modem,"MFSK128","MFSK-128","MFSK128","MFSK128","MFSK","MFSK128","MK128", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK64L,&mfsk64l_modem,"MFSK64L","MFSK-64L","MFSK64L","MFSK64L","MFSK","MFSK64","MK64L", ARQ_IO | KISS_IO },
|
||||
{MODE_MFSK128L,&mfsk128l_modem,"MFSK128L","MFSK-128L","MFSK128L","MFSK128L","MFSK","MFSK128","MK128L", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_WEFAX_576, &wefax576_modem, "WEFAX576", "WEFAX-IOC576", "WEFAXIOC576", "FAX", "FAX", "FX576", DISABLED_IO },
|
||||
{MODE_WEFAX_288, &wefax288_modem, "WEFAX288", "WEFAX-IOC288", "WEFAXIOC288", "FAX", "FAX", "FX288", DISABLED_IO },
|
||||
{MODE_WEFAX_576,&wefax576_modem,"WEFAX576","WEFAX-IOC576","WEFAXIOC576","FAX","FAX","","FX576", DISABLED_IO },
|
||||
{MODE_WEFAX_288,&wefax288_modem,"WEFAX288","WEFAX-IOC288","WEFAXIOC288","FAX","FAX","","FX288", DISABLED_IO },
|
||||
|
||||
{MODE_NAVTEX, &navtex_modem, "NAVTEX", "NAVTEX", "NAVTEX", "TOR", "NAVTEX", "NAVTEX", DISABLED_IO },
|
||||
{MODE_SITORB, &sitorb_modem, "SITORB", "SITORB", "SITORB", "TOR", "SITORB", "SITORB", DISABLED_IO },
|
||||
{MODE_NAVTEX,&navtex_modem,"NAVTEX","NAVTEX","NAVTEX","TOR","NAVTEX","","NAVTEX", DISABLED_IO },
|
||||
{MODE_SITORB,&sitorb_modem,"SITORB","SITORB","SITORB","TOR","SITORB","","SITORB", DISABLED_IO },
|
||||
|
||||
{MODE_MT63_500S, &mt63_500S_modem, "MT63-500S", "MT63-500S", "MT63-500S", "MT63-500S", "MT63", "MT63-500S", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_500L, &mt63_500L_modem, "MT63-500L", "MT63-500L", "MT63-500L", "MT63-500L", "MT63", "MT63-500L", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_1000S, &mt63_1000S_modem, "MT63-1KS", "MT63-1000S", "MT63-1XXS", "MT63-1KS", "MT63", "MT63 1KS", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_1000L, &mt63_1000L_modem, "MT63-1KL", "MT63-1000L", "MT63-1XXL", "MT63-1KL", "MT63", "MT63 1KL", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_2000S, &mt63_2000S_modem, "MT63-2KS", "MT63-2000S", "MT63-2XXS", "MT63-2KS", "MT63", "MT63 2KS", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_2000L, &mt63_2000L_modem, "MT63-2KL", "MT63-2000L", "MT63-2XXL", "MT63-2KL", "MT63", "MT63 2KL", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_500S,&mt63_500S_modem,"MT63-500S","MT63-500S","MT63-500S","MT63-500S","MT63","","MT63-500S", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_500L,&mt63_500L_modem,"MT63-500L","MT63-500L","MT63-500L","MT63-500L","MT63","","MT63-500L", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_1000S,&mt63_1000S_modem,"MT63-1KS","MT63-1000S","MT63-1XXS","MT63-1KS","MT63","","MT63 1KS", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_1000L,&mt63_1000L_modem,"MT63-1KL","MT63-1000L","MT63-1XXL","MT63-1KL","MT63","","MT63 1KL", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_2000S,&mt63_2000S_modem,"MT63-2KS","MT63-2000S","MT63-2XXS","MT63-2KS","MT63","","MT63 2KS", ARQ_IO | KISS_IO },
|
||||
{MODE_MT63_2000L,&mt63_2000L_modem,"MT63-2KL","MT63-2000L","MT63-2XXL","MT63-2KL","MT63","","MT63 2KL", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_PSK31, &psk31_modem, "BPSK31", "BPSK-31", "PSK31", "PSK31", "PSK", "P31", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK63, &psk63_modem, "BPSK63", "BPSK-63", "PSK63", "PSK63", "PSK", "P63", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK63F, &psk63f_modem, "BPSK63F", "BPSK-63F", "PSK63F", "PSK63F", "PSK", "P63F", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK125, &psk125_modem, "BPSK125", "BPSK-125", "PSK125", "PSK125", "PSK", "P125", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK250, &psk250_modem, "BPSK250", "BPSK-250", "PSK250", "PSK250", "PSK", "P250", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK500, &psk500_modem, "BPSK500", "BPSK-500", "PSK500", "PSK500", "PSK", "P500", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK1000, &psk1000_modem, "BPSK1000", "BPSK-1000", "PSK1000", "PSK1000", "PSK", "P1000", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK31,&psk31_modem,"BPSK31","BPSK-31","PSK31","PSK31","PSK","PSK31","P31", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK63,&psk63_modem,"BPSK63","BPSK-63","PSK63","PSK63","PSK","PSK63","P63", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK63F,&psk63f_modem,"BPSK63F","BPSK-63F","PSK63F","PSK63F","PSK","PSK63F","P63F", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK125,&psk125_modem,"BPSK125","BPSK-125","PSK125","PSK125","PSK","PSK125","P125", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK250,&psk250_modem,"BPSK250","BPSK-250","PSK250","PSK250","PSK","PSK250","P250", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK500,&psk500_modem,"BPSK500","BPSK-500","PSK500","PSK500","PSK","PSK500","P500", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK1000,&psk1000_modem,"BPSK1000","BPSK-1000","PSK1000","PSK1000","PSK","PSK1000","P1000", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_12X_PSK125, &psk125_c12_modem, "PSK125C12", "12xPSK125", "PSK125C12", "PSK125C12", "PSK", "P125C12", ARQ_IO | KISS_IO },
|
||||
{MODE_6X_PSK250, &psk250_c6_modem, "PSK250C6", "6xPSK250", "PSK250C6", "PSK250C6", "PSK", "P2506", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK500, &psk500_c2_modem, "PSK500C2", "2xPSK500", "PSK500C2", "PSK500C2", "PSK", "2xP500", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK500, &psk500_c4_modem, "PSK500C4", "4xPSK500", "PSK500C4", "PSK500C4", "PSK", "4xP500", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK800, &psk800_c2_modem, "PSK800C2", "2xPSK800", "PSK800C2", "PSK800C2", "PSK", "P800RC2", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK1000, &psk1000_c2_modem, "PSK1000C2", "2xPSK1000", "PSK1000C2", "PSK1000C2", "PSK", "P1KC2", ARQ_IO | KISS_IO },
|
||||
{MODE_12X_PSK125,&psk125_c12_modem,"PSK125C12","12xPSK125","PSK125C12","PSK125C12","PSK","","P125C12", ARQ_IO | KISS_IO },
|
||||
{MODE_6X_PSK250,&psk250_c6_modem,"PSK250C6","6xPSK250","PSK250C6","PSK250C6","PSK","","P2506", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK500,&psk500_c2_modem,"PSK500C2","2xPSK500","PSK500C2","PSK500C2","PSK","","2xP500", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK500,&psk500_c4_modem,"PSK500C4","4xPSK500","PSK500C4","PSK500C4","PSK","","4xP500", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK800,&psk800_c2_modem,"PSK800C2","2xPSK800","PSK800C2","PSK800C2","PSK","","P800RC2", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK1000,&psk1000_c2_modem,"PSK1000C2","2xPSK1000","PSK1000C2","PSK1000C2","PSK","","P1KC2", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_QPSK31, &qpsk31_modem, "QPSK31", "QPSK-31", "QPSK31", "QPSK31", "PSK", "Q31", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK63, &qpsk63_modem, "QPSK63", "QPSK-63", "QPSK63", "QPSK63", "PSK", "Q63", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK125, &qpsk125_modem, "QPSK125", "QPSK-125", "QPSK125", "QPSK125", "PSK", "Q125", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK250, &qpsk250_modem, "QPSK250", "QPSK-250", "QPSK250", "QPSK250", "PSK", "Q250", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK500, &qpsk500_modem, "QPSK500", "QPSK-500", "QPSK500", "QPSK500", "PSK", "Q500", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK31,&qpsk31_modem,"QPSK31","QPSK-31","QPSK31","QPSK31","PSK","QPSK31","Q31", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK63,&qpsk63_modem,"QPSK63","QPSK-63","QPSK63","QPSK63","PSK","QPSK63","Q63", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK125,&qpsk125_modem,"QPSK125","QPSK-125","QPSK125","QPSK125","PSK","QPSK125","Q125", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK250,&qpsk250_modem,"QPSK250","QPSK-250","QPSK250","QPSK250","PSK","QPSK250","Q250", ARQ_IO | KISS_IO },
|
||||
{MODE_QPSK500,&qpsk500_modem,"QPSK500","QPSK-500","QPSK500","QPSK500","PSK","QPSK500","Q500", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_8PSK125, &_8psk125_modem, "8PSK125", "8PSK-125", "8PSK125", "8PSK125", "PSK", "8PSK125", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK125FL, &_8psk125fl_modem, "8PSK125FL", "8PSK-125FL", "8PSK125FL", "8PSK125FL", "PSK", "8PSK125FL", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK125F, &_8psk125f_modem, "8PSK125F", "8PSK-125F", "8PSK125F", "8PSK125F", "PSK", "8PSK125F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250, &_8psk250_modem, "8PSK250", "8PSK-250", "8PSK250", "8PSK250", "PSK", "8PSK250", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250FL, &_8psk250fl_modem, "8PSK250FL", "8PSK-250FL", "8PSK250FL", "8PSK250F", "PSK", "8PSK250FL", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250F, &_8psk250f_modem, "8PSK250F", "8PSK-250F", "8PSK250F", "8PSK250F", "PSK", "8PSK250F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK500, &_8psk500_modem, "8PSK500", "8PSK-500", "8PSK500", "8PSK500", "PSK", "8PSK500", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK500F, &_8psk500f_modem, "8PSK500F", "8PSK-500F", "8PSK500F", "8PSK500F", "PSK", "8PSK500F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1000, &_8psk1000_modem, "8PSK1000", "8PSK-1000", "8PSK1000", "8PSK1000", "PSK", "8PSK1000", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1000F, &_8psk1000f_modem, "8PSK1000F", "8PSK-1000F", "8PSK1000F", "8PSK1000F", "PSK", "8PSK1000F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1200F, &_8psk1200f_modem, "8PSK1200F", "8PSK-1200F", "8PSK1200F", "8PSK1200F", "PSK", "8PSK1200F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK125,&_8psk125_modem,"8PSK125","8PSK-125","8PSK125","8PSK125","PSK","","8PSK125", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK125FL,&_8psk125fl_modem,"8PSK125FL","8PSK-125FL","8PSK125FL","8PSK125FL","PSK","","8PSK125FL", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK125F,&_8psk125f_modem,"8PSK125F","8PSK-125F","8PSK125F","8PSK125F","PSK","","8PSK125F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250,&_8psk250_modem,"8PSK250","8PSK-250","8PSK250","8PSK250","PSK","","8PSK250", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250FL,&_8psk250fl_modem,"8PSK250FL","8PSK-250FL","8PSK250FL","8PSK250F","PSK","","8PSK250FL", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK250F,&_8psk250f_modem,"8PSK250F","8PSK-250F","8PSK250F","8PSK250F","PSK","","8PSK250F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK500,&_8psk500_modem,"8PSK500","8PSK-500","8PSK500","8PSK500","PSK","","8PSK500", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK500F,&_8psk500f_modem,"8PSK500F","8PSK-500F","8PSK500F","8PSK500F","PSK","","8PSK500F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1000,&_8psk1000_modem,"8PSK1000","8PSK-1000","8PSK1000","8PSK1000","PSK","","8PSK1000", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1000F,&_8psk1000f_modem,"8PSK1000F","8PSK-1000F","8PSK1000F","8PSK1000F","PSK","","8PSK1000F", ARQ_IO | KISS_IO },
|
||||
{MODE_8PSK1200F,&_8psk1200f_modem,"8PSK1200F","8PSK-1200F","8PSK1200F","8PSK1200F","PSK","","8PSK1200F", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_OLIVIA, &olivia_modem, "OLIVIA", "OLIVIA", "OLIVIA", "OLIVIA", "OLIVIA", "OL", DISABLED_IO },
|
||||
{MODE_OLIVIA_4_250, &olivia_4_250_modem, "Olivia-4-250", "OL 4-250", "OLIV 4-250", "OLIVIA-4/250", "OLIVIA", "OL4/250", ARQ_IO },
|
||||
{MODE_OLIVIA_8_250, &olivia_8_250_modem, "Olivia-8-250", "OL 8-250", "OLIV 8-250", "OLIVIA-8/250", "OLIVIA", "OL8/250", ARQ_IO },
|
||||
{MODE_OLIVIA_4_500, &olivia_4_500_modem, "Olivia-4-500", "OL 4-500", "OLIV 4-500", "OLIVIA-4/500", "OLIVIA", "OL4/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_8_500, &olivia_8_500_modem, "Olivia-8-500", "OL 8-500", "OLIV 8-500", "OLIVIA-8/500", "OLIVIA", "OL8/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_16_500,&olivia_16_500_modem, "Olivia-16-500", "OL 16-500", "OLIV 16-500", "OLIVIA-16/500", "OLIVIA", "OL16/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_8_1000,&olivia_8_1000_modem, "Olivia-8-1K", "OL 8-1K", "OLIV 8-1K", "OLIVIA-8/1K", "OLIVIA", "OL8/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_16_1000,&olivia_16_1000_modem, "Olivia-16-1K", "OL 16-1K", "OLIV 16-1K", "OLIVIA-16/1K", "OLIVIA", "OL16/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_32_1000,&olivia_32_1000_modem, "Olivia-32-1K", "OL 32-1K", "OLIV 32-1K", "OLIVIA-32/1K", "OLIVIA", "OL32/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_64_2000,&olivia_64_2000_modem, "Olivia-64-2K", "OL 64-2K", "OLIV 64-2K", "OLIVIA-64/2K", "OLIVIA", "OL64/2K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA,&olivia_modem,"OLIVIA","OLIVIA","OLIVIA","OLIVIA","OLIVIA","","OL", DISABLED_IO },
|
||||
{MODE_OLIVIA_4_250,&olivia_4_250_modem,"Olivia-4-250","OL 4-250","OLIV 4-250","OLIVIA-4/250","OLIVIA","OLIVIA 4/250","OL4/250", ARQ_IO },
|
||||
{MODE_OLIVIA_8_250,&olivia_8_250_modem,"Olivia-8-250","OL 8-250","OLIV 8-250","OLIVIA-8/250","OLIVIA","OLIVIA 8/250","OL8/250", ARQ_IO },
|
||||
{MODE_OLIVIA_4_500,&olivia_4_500_modem,"Olivia-4-500","OL 4-500","OLIV 4-500","OLIVIA-4/500","OLIVIA","OLIVIA 4/500","OL4/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_8_500,&olivia_8_500_modem,"Olivia-8-500","OL 8-500","OLIV 8-500","OLIVIA-8/500","OLIVIA","OLIVIA 8/500","OL8/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_16_500,&olivia_16_500_modem,"Olivia-16-500","OL 16-500","OLIV 16-500","OLIVIA-16/500","OLIVIA","OLIVIA 16/500","OL16/500", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_8_1000,&olivia_8_1000_modem,"Olivia-8-1K","OL 8-1K","OLIV 8-1K","OLIVIA-8/1K","OLIVIA","OLIVIA 8/1000","OL8/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_16_1000,&olivia_16_1000_modem,"Olivia-16-1K","OL 16-1K","OLIV 16-1K","OLIVIA-16/1K","OLIVIA","OLIVIA 16/1000","OL16/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_32_1000,&olivia_32_1000_modem,"Olivia-32-1K","OL 32-1K","OLIV 32-1K","OLIVIA-32/1K","OLIVIA","OLIVIA 32/1000","OL32/1K", ARQ_IO | KISS_IO },
|
||||
{MODE_OLIVIA_64_2000,&olivia_64_2000_modem,"Olivia-64-2K","OL 64-2K","OLIV 64-2K","OLIVIA-64/2K","OLIVIA","OLIVIA 64/2000","OL64/2K", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_RTTY, &rtty_modem, "RTTY", "RTTY", "RTTY", "RTTY", "RTTY", "RY", DISABLED_IO },
|
||||
{MODE_RTTY,&rtty_modem,"RTTY","RTTY","RTTY","RTTY","RTTY","","RY", DISABLED_IO },
|
||||
|
||||
{MODE_THORMICRO, &thormicro_modem, "THOR Micro", "THOR Micro", "THORM", "THOR-M", "THOR", "THM", DISABLED_IO },
|
||||
{MODE_THOR4, &thor4_modem, "THOR4", "THOR 4", "THOR4", "THOR4", "THOR", "TH4", DISABLED_IO },
|
||||
{MODE_THOR5, &thor5_modem, "THOR5", "THOR 5", "THOR5", "THOR5", "THOR", "TH5", DISABLED_IO },
|
||||
{MODE_THOR8, &thor8_modem, "THOR8", "THOR 8", "THOR8", "THOR8", "THOR", "TH8", DISABLED_IO },
|
||||
{MODE_THOR11, &thor11_modem, "THOR11", "THOR 11", "THOR11", "THOR11", "THOR", "TH11", DISABLED_IO },
|
||||
{MODE_THOR16, &thor16_modem, "THOR16", "THOR 16", "THOR16", "THOR16", "THOR", "TH16", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR22, &thor22_modem, "THOR22", "THOR 22", "THOR22", "THOR22", "THOR", "TH22", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR25x4, &thor25x4_modem, "THOR25x4", "THOR 25 x4", "THOR25x4", "THOR-25X4", "THOR", "TH25", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR50x1, &thor50x1_modem, "THOR50x1", "THOR 50 x1", "THOR50x1", "THOR-50X1", "THOR", "TH51", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR50x2, &thor50x2_modem, "THOR50x2", "THOR 50 x2", "THOR50x2", "THOR-50X2", "THOR", "TH52", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR100, &thor100_modem, "THOR100", "THOR 100", "THOR100", "THOR-100", "THOR", "TH100", ARQ_IO | KISS_IO },
|
||||
{MODE_THORMICRO,&thormicro_modem,"THOR Micro","THOR Micro","THORM","THOR-M","THOR","","THM", DISABLED_IO },
|
||||
{MODE_THOR4,&thor4_modem,"THOR4","THOR 4","THOR4","THOR4","THOR","","TH4", DISABLED_IO },
|
||||
{MODE_THOR5,&thor5_modem,"THOR5","THOR 5","THOR5","THOR5","THOR","","TH5", DISABLED_IO },
|
||||
{MODE_THOR8,&thor8_modem,"THOR8","THOR 8","THOR8","THOR8","THOR","","TH8", DISABLED_IO },
|
||||
{MODE_THOR11,&thor11_modem,"THOR11","THOR 11","THOR11","THOR11","THOR","","TH11", DISABLED_IO },
|
||||
{MODE_THOR16,&thor16_modem,"THOR16","THOR 16","THOR16","THOR16","THOR","","TH16", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR22,&thor22_modem,"THOR22","THOR 22","THOR22","THOR22","THOR","","TH22", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR25x4,&thor25x4_modem,"THOR25x4","THOR 25 x4","THOR25x4","THOR-25X4","THOR","","TH25", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR50x1,&thor50x1_modem,"THOR50x1","THOR 50 x1","THOR50x1","THOR-50X1","THOR","","TH51", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR50x2,&thor50x2_modem,"THOR50x2","THOR 50 x2","THOR50x2","THOR-50X2","THOR","","TH52", ARQ_IO | KISS_IO },
|
||||
{MODE_THOR100,&thor100_modem,"THOR100","THOR 100","THOR100","THOR-100","THOR","","TH100", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_THROB1, &throb1_modem, "THROB1", "Throb 1", "", "THRB", "THRB", "TB1", DISABLED_IO },
|
||||
{MODE_THROB2, &throb2_modem, "THROB2", "Throb 2", "", "THRB", "THRB", "TB2", DISABLED_IO },
|
||||
{MODE_THROB4, &throb4_modem, "THROB4", "Throb 4", "", "THRB", "THRB", "TB4", DISABLED_IO },
|
||||
{MODE_THROBX1, &throbx1_modem, "THRBX1", "ThrobX 1", "", "THRBX", "THRB", "TX1", DISABLED_IO },
|
||||
{MODE_THROBX2, &throbx2_modem, "THRBX2", "ThrobX 2", "", "THRBX", "THRB", "TX2", DISABLED_IO },
|
||||
{MODE_THROBX4, &throbx4_modem, "THRBX4", "ThrobX 4", "", "THRBX", "THRB", "TX4", DISABLED_IO },
|
||||
{MODE_THROB1,&throb1_modem,"THROB1","Throb 1","","THRB","THRB","","TB1", DISABLED_IO },
|
||||
{MODE_THROB2,&throb2_modem,"THROB2","Throb 2","","THRB","THRB","","TB2", DISABLED_IO },
|
||||
{MODE_THROB4,&throb4_modem,"THROB4","Throb 4","","THRB","THRB","","TB4", DISABLED_IO },
|
||||
{MODE_THROBX1,&throbx1_modem,"THRBX1","ThrobX 1","","THRBX","THRB","THRBX","TX1", DISABLED_IO },
|
||||
{MODE_THROBX2,&throbx2_modem,"THRBX2","ThrobX 2","","THRBX","THRB","THRBX","TX2", DISABLED_IO },
|
||||
{MODE_THROBX4,&throbx4_modem,"THRBX4","ThrobX 4","","THRBX","THRB","THRBX","TX4", DISABLED_IO },
|
||||
|
||||
//{MODE_PACKET, &pkt_modem, "PACKET", "Packet", "", "PKT", "PKT", ARQ_IO | KISS_IO },
|
||||
//{MODE_PACKET,&pkt_modem,"PACKET","Packet","","PKT","PKT","PKT",ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_PSK125R, &psk125r_modem, "PSK125R", "PSK-125R", "PSK125R", "PSK125R", "PSK", "P125R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK250R, &psk250r_modem, "PSK250R", "PSK-250R", "PSK250R", "PSK250R", "PSK", "P250R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK500R, &psk500r_modem, "PSK500R", "PSK-500R", "PSK500R", "PSK500R", "PSK", "P500R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK1000R, &psk1000r_modem, "PSK1000R", "PSK-1000R", "PSK1000R", "PSK1000R", "PSK", "PSK1000R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK125R,&psk125r_modem,"PSK125R","PSK-125R","PSK125R","PSK125R","PSK","","P125R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK250R,&psk250r_modem,"PSK250R","PSK-250R","PSK250R","PSK250R","PSK","","P250R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK500R,&psk500r_modem,"PSK500R","PSK-500R","PSK500R","PSK500R","PSK","","P500R", ARQ_IO | KISS_IO },
|
||||
{MODE_PSK1000R,&psk1000r_modem,"PSK1000R","PSK-1000R","PSK1000R","PSK1000R","PSK","","PSK1000R", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_4X_PSK63R, &psk63r_c4_modem, "PSK63RC4", "4xPSK63R", "PSK63RC4", "PSK63RC4", "PSK", "P63R4", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK63R, &psk63r_c5_modem, "PSK63RC5", "5xPSK63R", "PSK63RC5", "PSK63RC5", "PSK", "P63R5", ARQ_IO | KISS_IO },
|
||||
{MODE_10X_PSK63R, &psk63r_c10_modem, "PSK63RC10", "10xPSK63R", "PSK63RC10", "PSK63RC10", "PSK", "P63R10", ARQ_IO | KISS_IO },
|
||||
{MODE_20X_PSK63R, &psk63r_c20_modem, "PSK63RC20", "20xPSK63R", "PSK63RC20", "PSK63RC20", "PSK", "P63R20", ARQ_IO | KISS_IO },
|
||||
{MODE_32X_PSK63R, &psk63r_c32_modem, "PSK63RC32", "32xPSK63R", "PSK63RC32", "PSK63RC32", "PSK", "P63R32", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK63R,&psk63r_c4_modem,"PSK63RC4","4xPSK63R","PSK63RC4","PSK63RC4","PSK","","P63R4", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK63R,&psk63r_c5_modem,"PSK63RC5","5xPSK63R","PSK63RC5","PSK63RC5","PSK","","P63R5", ARQ_IO | KISS_IO },
|
||||
{MODE_10X_PSK63R,&psk63r_c10_modem,"PSK63RC10","10xPSK63R","PSK63RC10","PSK63RC10","PSK","","P63R10", ARQ_IO | KISS_IO },
|
||||
{MODE_20X_PSK63R,&psk63r_c20_modem,"PSK63RC20","20xPSK63R","PSK63RC20","PSK63RC20","PSK","","P63R20", ARQ_IO | KISS_IO },
|
||||
{MODE_32X_PSK63R,&psk63r_c32_modem,"PSK63RC32","32xPSK63R","PSK63RC32","PSK63RC32","PSK","","P63R32", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_4X_PSK125R, &psk125r_c4_modem, "PSK125RC4", "4xPSK125R", "PSK125RC4", "PSK125RC4", "PSK", "P125R4", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK125R, &psk125r_c5_modem, "PSK125RC5", "5xPSK125R", "PSK125RC5", "PSK125RC5", "PSK", "P125R5", ARQ_IO | KISS_IO },
|
||||
{MODE_10X_PSK125R, &psk125r_c10_modem, "PSK125RC10", "10xPSK125R", "PSK125RC10", "PSK125RC10", "PSK", "P125R10", ARQ_IO | KISS_IO },
|
||||
{MODE_12X_PSK125R, &psk125r_c12_modem, "PSK125RC12", "12xPSK125R", "PSK125RC12", "PSK125RC12", "PSK", "P125R12", ARQ_IO | KISS_IO },
|
||||
{MODE_16X_PSK125R, &psk125r_c16_modem, "PSK125RC16", "16xPSK125R", "PSK125RC16", "PSK125RC16", "PSK", "P125R16", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK125R,&psk125r_c4_modem,"PSK125RC4","4xPSK125R","PSK125RC4","PSK125RC4","PSK","","P125R4", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK125R,&psk125r_c5_modem,"PSK125RC5","5xPSK125R","PSK125RC5","PSK125RC5","PSK","","P125R5", ARQ_IO | KISS_IO },
|
||||
{MODE_10X_PSK125R,&psk125r_c10_modem,"PSK125RC10","10xPSK125R","PSK125RC10","PSK125RC10","PSK","","P125R10", ARQ_IO | KISS_IO },
|
||||
{MODE_12X_PSK125R,&psk125r_c12_modem,"PSK125RC12","12xPSK125R","PSK125RC12","PSK125RC12","PSK","","P125R12", ARQ_IO | KISS_IO },
|
||||
{MODE_16X_PSK125R,&psk125r_c16_modem,"PSK125RC16","16xPSK125R","PSK125RC16","PSK125RC16","PSK","","P125R16", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_2X_PSK250R, &psk250r_c2_modem, "PSK250RC2", "2xPSK250R", "PSK250RC2", "PSK250RC2", "PSK", "P250R2", ARQ_IO | KISS_IO },
|
||||
{MODE_3X_PSK250R, &psk250r_c3_modem, "PSK250RC3", "3xPSK250R", "PSK250RC3", "PSK250RC3", "PSK", "P250R3", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK250R, &psk250r_c5_modem, "PSK250RC5", "5xPSK250R", "PSK250RC5", "PSK250RC5", "PSK", "P250R5", ARQ_IO | KISS_IO },
|
||||
{MODE_6X_PSK250R, &psk250r_c6_modem, "PSK250RC6", "6xPSK250R", "PSK250RC6", "PSK250RC6", "PSK", "P250R6", ARQ_IO | KISS_IO },
|
||||
{MODE_7X_PSK250R, &psk250r_c7_modem, "PSK250RC7", "7xPSK250R", "PSK250RC7", "PSK250RC7", "PSK", "P250R7", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK250R,&psk250r_c2_modem,"PSK250RC2","2xPSK250R","PSK250RC2","PSK250RC2","PSK","","P250R2", ARQ_IO | KISS_IO },
|
||||
{MODE_3X_PSK250R,&psk250r_c3_modem,"PSK250RC3","3xPSK250R","PSK250RC3","PSK250RC3","PSK","","P250R3", ARQ_IO | KISS_IO },
|
||||
{MODE_5X_PSK250R,&psk250r_c5_modem,"PSK250RC5","5xPSK250R","PSK250RC5","PSK250RC5","PSK","","P250R5", ARQ_IO | KISS_IO },
|
||||
{MODE_6X_PSK250R,&psk250r_c6_modem,"PSK250RC6","6xPSK250R","PSK250RC6","PSK250RC6","PSK","","P250R6", ARQ_IO | KISS_IO },
|
||||
{MODE_7X_PSK250R,&psk250r_c7_modem,"PSK250RC7","7xPSK250R","PSK250RC7","PSK250RC7","PSK","","P250R7", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_2X_PSK500R, &psk500r_c2_modem, "PSK500RC2", "2xPSK500R", "PSK500RC2", "PSK500RC2", "PSK", "P500R2", ARQ_IO | KISS_IO },
|
||||
{MODE_3X_PSK500R, &psk500r_c3_modem, "PSK500RC3", "3xPSK500R", "PSK500RC3", "PSK500RC3", "PSK", "P500R3", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK500R, &psk500r_c4_modem, "PSK500RC4", "4xPSK500R", "PSK500RC4", "PSK500RC4", "PSK", "P500R4", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK500R,&psk500r_c2_modem,"PSK500RC2","2xPSK500R","PSK500RC2","PSK500RC2","PSK","","P500R2", ARQ_IO | KISS_IO },
|
||||
{MODE_3X_PSK500R,&psk500r_c3_modem,"PSK500RC3","3xPSK500R","PSK500RC3","PSK500RC3","PSK","","P500R3", ARQ_IO | KISS_IO },
|
||||
{MODE_4X_PSK500R,&psk500r_c4_modem,"PSK500RC4","4xPSK500R","PSK500RC4", "PSK500RC4","PSK","","P500R4", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_2X_PSK800R, &psk800r_c2_modem, "PSK800RC2", "2xPSK800R", "PSK800RC2", "PSK800RC2", "PSK", "P800RC2", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK800R,&psk800r_c2_modem,"PSK800RC2","2xPSK800R","PSK800RC2","PSK800RC2","PSK","","P800RC2", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_2X_PSK1000R, &psk1000r_c2_modem, "PSK1000RC2", "2xPSK1000R", "PSK1000RC2", "PSK1000RC2", "PSK", "P1KRC2", ARQ_IO | KISS_IO },
|
||||
{MODE_2X_PSK1000R,&psk1000r_c2_modem,"PSK1000RC2","2xPSK1000R","PSK1000RC2","PSK1000RC2","PSK","","P1KRC2", ARQ_IO | KISS_IO },
|
||||
|
||||
{MODE_FSQ, &fsq_modem, "FSQ", "FSQ", "FSQ", "FSQ", "FSQ", "FSQ", DISABLED_IO },
|
||||
{MODE_IFKP, &ifkp_modem, "IFKP", "IFKP", "IFKP", "IFKP", "IFKP", "IFKP", DISABLED_IO },
|
||||
{MODE_FSQ,&fsq_modem,"FSQ","FSQ","FSQ","FSQ","FSQ","","FSQ", DISABLED_IO },
|
||||
{MODE_IFKP,&ifkp_modem,"IFKP","IFKP","IFKP","IFKP","IFKP","","IFKP", DISABLED_IO },
|
||||
|
||||
{MODE_SSB, &ssb_modem, "SSB", "SSB", "", "SSB", "SSB", "", DISABLED_IO },
|
||||
{MODE_WWV, &wwv_modem, "WWV", "WWV", "", "", "", "", DISABLED_IO },
|
||||
{MODE_ANALYSIS, &anal_modem, "ANALYSIS", "Freq Analysis", "", "", "", "", DISABLED_IO }
|
||||
{MODE_SSB,&ssb_modem,"SSB","SSB","","SSB","SSB","","", DISABLED_IO },
|
||||
{MODE_WWV,&wwv_modem,"WWV","WWV","","","","","", DISABLED_IO },
|
||||
{MODE_ANALYSIS,&anal_modem,"ANALYSIS","Freq Analysis","","","","","", DISABLED_IO }
|
||||
};
|
||||
|
||||
std::string adif2export(std::string adif)
|
||||
{
|
||||
std::string test = ucasestr(adif);
|
||||
for (int n = 0; n < NUM_MODES; n++) {
|
||||
if (adif == mode_info[n].adif_name)
|
||||
return mode_info[n].export_name;
|
||||
if (test == mode_info[n].adif_name)
|
||||
return mode_info[n].export_mode;
|
||||
}
|
||||
return "DIGI";
|
||||
}
|
||||
|
||||
std::string adif2submode(std::string adif)
|
||||
{
|
||||
std::string test = ucasestr(adif);
|
||||
for (int n = 0; n < NUM_MODES; n++) {
|
||||
if (test == mode_info[n].adif_name)
|
||||
return mode_info[n].export_submode;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& s, const qrg_mode_t& m)
|
||||
{
|
||||
return s << m.rfcarrier << ' '
|
||||
|
|
@ -233,7 +249,7 @@ std::istream& operator>>(std::istream& s, qrg_mode_t& m)
|
|||
while (m.usage[0] == ' ') m.usage.erase(0,1);
|
||||
|
||||
// handle case for reading older type of specification string
|
||||
if (sscanf(sMode.c_str(), "%d", &mnbr)) {
|
||||
if (sscanf(sMode.c_str(), "%d",&mnbr)) {
|
||||
m.mode = mnbr;
|
||||
return s;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ enum ADIF_FIELD_POS {
|
|||
FREQ = 0,
|
||||
CALL,
|
||||
MODE,
|
||||
SUBMODE,
|
||||
NAME,
|
||||
QSO_DATE,
|
||||
QSO_DATE_OFF,
|
||||
|
|
|
|||
|
|
@ -245,7 +245,8 @@ struct mode_info_t {
|
|||
const char *name;
|
||||
const char *pskmail_name;
|
||||
const char *adif_name;
|
||||
const char *export_name;
|
||||
const char *export_mode;
|
||||
const char *export_submode;
|
||||
const char *vid_name;
|
||||
const unsigned int iface_io; // Some modes are not usable for a given interface.
|
||||
};
|
||||
|
|
@ -303,5 +304,6 @@ const char* band_freq(const char* band_name);
|
|||
enum { VIEWER_LABEL_OFF, VIEWER_LABEL_AF, VIEWER_LABEL_RF, VIEWER_LABEL_CH, VIEWER_LABEL_NTYPES };
|
||||
|
||||
extern std::string adif2export(std::string adif);
|
||||
extern std::string adif2submode(std::string adif);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ FIELD fields[] = {
|
|||
{FREQ, 12, "FREQ", &btnSelectFreq}, // QSO frequency in Mhz
|
||||
{CALL, 30, "CALL", &btnSelectCall}, // contacted stations CALLSIGN
|
||||
{MODE, 20, "MODE", &btnSelectMode}, // QSO mode
|
||||
{SUBMODE, 20, "SUBMODE", NULL}, // QSO submode
|
||||
{NAME, 80, "NAME", &btnSelectName}, // contacted operators NAME
|
||||
{QSO_DATE, 8, "QSO_DATE", &btnSelectQSOdateOn}, // QSO data
|
||||
{QSO_DATE_OFF, 8, "QSO_DATE_OFF", &btnSelectQSOdateOff},// QSO data OFF, according to ADIF 2.2.6
|
||||
|
|
@ -427,6 +428,8 @@ int cAdifIO::writeFile (const char *fname, cQsoDb *db)
|
|||
strlen(PACKAGE_NAME), PACKAGE_NAME,
|
||||
strlen(PACKAGE_VERSION), PACKAGE_VERSION);
|
||||
|
||||
string sName;
|
||||
int field_type;
|
||||
for (int i = 0; i < db->nbrRecs(); i++) {
|
||||
rec = db->getRec(i);
|
||||
if (rec->getField(EXPORT)[0] == 'E') {
|
||||
|
|
@ -434,15 +437,31 @@ int cAdifIO::writeFile (const char *fname, cQsoDb *db)
|
|||
while (fields[j].type != NUMFIELDS) {
|
||||
if (strcmp(fields[j].name,"MYXCHG") == 0) { j++; continue; }
|
||||
if (strcmp(fields[j].name,"XCHG1") == 0) { j++; continue; }
|
||||
if (fields[j].btn != NULL)
|
||||
if (fields[j].btn != NULL) {
|
||||
if ((*fields[j].btn)->value()) {
|
||||
sFld = rec->getField(fields[j].type);
|
||||
if (!sFld.empty()) {
|
||||
field_type = fields[j].type;
|
||||
sFld = rec->getField(field_type);
|
||||
sName = fields[j].name;
|
||||
if (field_type == MODE && !sFld.empty()) {
|
||||
fprintf(adiFile, adifmt,
|
||||
fields[j].name,//->c_str(),
|
||||
sFld.length());
|
||||
fprintf(adiFile, "%s", sFld.c_str());
|
||||
"MODE",
|
||||
adif2export(sFld).length());
|
||||
fprintf(adiFile, "%s", adif2export(sFld).c_str());
|
||||
if (!adif2submode(sFld).empty()) {
|
||||
fprintf(adiFile, adifmt,
|
||||
"SUBMODE",
|
||||
adif2submode(sFld).length());
|
||||
fprintf(adiFile, "%s", adif2submode(sFld).c_str());
|
||||
}
|
||||
} else {
|
||||
if (!sFld.empty()) {
|
||||
fprintf(adiFile, adifmt,
|
||||
sName.c_str(),
|
||||
sFld.length());
|
||||
fprintf(adiFile, "%s", sFld.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1135,12 +1135,13 @@ void cb_Export_log() {
|
|||
#endif
|
||||
for( int i = 0; i < qsodb.nbrRecs(); i++ ) {
|
||||
rec = qsodb.getRec (i);
|
||||
snprintf(line,sizeof(line),"%8s %4s %-10s %-10s %-s",
|
||||
snprintf(line,sizeof(line),"%8s %4s %-10s %-10s %-s %-s",
|
||||
rec->getField(QSO_DATE),
|
||||
rec->getField((export_to == LOTW ? TIME_ON : TIME_OFF) ),
|
||||
rec->getField(CALL),
|
||||
szfreq(rec->getField(FREQ)),
|
||||
adif2export(rec->getField(MODE)).c_str()
|
||||
adif2export(rec->getField(MODE)).c_str(),
|
||||
adif2submode(rec->getField(MODE)).c_str()
|
||||
);
|
||||
chkExportBrowser->add(line);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1172,208 +1172,6 @@ void CALLSIGNquery()
|
|||
pthread_mutex_unlock(&qrz_mutex);
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
// thread to support sending log entry to eQSL
|
||||
//======================================================================
|
||||
|
||||
pthread_t* EQSLthread = 0;
|
||||
pthread_mutex_t EQSLmutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
pthread_cond_t EQSLcond = PTHREAD_COND_INITIALIZER;
|
||||
|
||||
static void *EQSL_loop(void *args);
|
||||
static void EQSL_init(void);
|
||||
|
||||
void EQSL_close(void);
|
||||
void EQSL_send();
|
||||
|
||||
static std::string EQSL_url = "";
|
||||
static std::string EQSL_xmlpage = "";
|
||||
|
||||
static bool EQSLEXIT = false;
|
||||
|
||||
static void *EQSL_loop(void *args)
|
||||
{
|
||||
SET_THREAD_ID(EQSL_TID);
|
||||
|
||||
SET_THREAD_CANCEL();
|
||||
|
||||
for (;;) {
|
||||
TEST_THREAD_CANCEL();
|
||||
pthread_mutex_lock(&EQSLmutex);
|
||||
pthread_cond_wait(&EQSLcond, &EQSLmutex);
|
||||
pthread_mutex_unlock(&EQSLmutex);
|
||||
|
||||
if (EQSLEXIT)
|
||||
return NULL;
|
||||
|
||||
size_t p;
|
||||
if (fetch_http(EQSL_url, EQSL_xmlpage, 5.0) == false)
|
||||
LOG_ERROR("%s", "eQSL not available");
|
||||
|
||||
else if ((p = EQSL_xmlpage.find("Error:")) != std::string::npos) {
|
||||
size_t p2 = EQSL_xmlpage.find('\n', p);
|
||||
LOG_ERROR("%s\n%s", EQSL_xmlpage.substr(p, p2 - p - 1).c_str(), EQSL_url.c_str());
|
||||
} else
|
||||
LOG_INFO("eQSL logged %s", EQSL_url.c_str());
|
||||
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void EQSL_close(void)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (!EQSLthread)
|
||||
return;
|
||||
|
||||
CANCEL_THREAD(*EQSLthread);
|
||||
|
||||
pthread_mutex_lock(&qrz_mutex);
|
||||
EQSLEXIT = true;
|
||||
pthread_cond_signal(&qrz_cond);
|
||||
pthread_mutex_unlock(&qrz_mutex);
|
||||
|
||||
pthread_join(*QRZ_thread, NULL);
|
||||
delete QRZ_thread;
|
||||
QRZ_thread = 0;
|
||||
}
|
||||
|
||||
static void EQSL_init(void)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (EQSLthread)
|
||||
return;
|
||||
EQSLthread = new pthread_t;
|
||||
EQSLEXIT = false;
|
||||
if (pthread_create(EQSLthread, NULL, EQSL_loop, NULL) != 0) {
|
||||
LOG_PERROR("pthread_create");
|
||||
return;
|
||||
}
|
||||
MilliSleep(10);
|
||||
}
|
||||
|
||||
void sendEQSL(const char *url)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (!EQSLthread)
|
||||
EQSL_init();
|
||||
|
||||
pthread_mutex_lock(&EQSLmutex);
|
||||
EQSL_url = url;
|
||||
pthread_cond_signal(&EQSLcond);
|
||||
pthread_mutex_unlock(&EQSLmutex);
|
||||
}
|
||||
|
||||
// this function may be called from several places including macro
|
||||
// expansion and execution
|
||||
|
||||
void makeEQSL(const char *message)
|
||||
{
|
||||
char sztemp[100];
|
||||
std::string tempstr;
|
||||
std::string eQSL_url;
|
||||
std::string msg;
|
||||
size_t p = 0;
|
||||
|
||||
msg = message;
|
||||
|
||||
if (msg.empty()) msg = progdefaults.eqsl_default_message;
|
||||
|
||||
// replace message tags {CALL}, {NAME}, {MODE}
|
||||
while ((p = msg.find("{CALL}")) != std::string::npos)
|
||||
msg.replace(p, 6, inpCall->value());
|
||||
while ((p = msg.find("{NAME}")) != std::string::npos)
|
||||
msg.replace(p, 6, inpName->value());
|
||||
while ((p = msg.find("{MODE}")) != std::string::npos)
|
||||
msg.replace(p, 6, mode_info[active_modem->get_mode()].export_name);
|
||||
|
||||
|
||||
// eqsl url header
|
||||
eQSL_url = "http://www.eqsl.cc/qslcard/importADIF.cfm?ADIFdata=upload <adIF_ver:5>2.1.9";
|
||||
snprintf(sztemp, sizeof(sztemp),"<EQSL_USER:%d>%s<EQSL_PSWD:%d>%s",
|
||||
static_cast<int>(progdefaults.eqsl_id.length()),
|
||||
progdefaults.eqsl_id.c_str(),
|
||||
static_cast<int>(progdefaults.eqsl_pwd.length()),
|
||||
progdefaults.eqsl_pwd.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
eQSL_url.append("<PROGRAMID:6>FLDIGI<EOH>");
|
||||
// eqsl nickname
|
||||
if (!progdefaults.eqsl_nick.empty()) {
|
||||
snprintf(sztemp, sizeof(sztemp), "<APP_EQSL_QTH_NICKNAME:%d>%s",
|
||||
static_cast<int>(progdefaults.eqsl_nick.length()),
|
||||
progdefaults.eqsl_nick.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
}
|
||||
|
||||
// eqsl record
|
||||
// band
|
||||
tempstr = band_name(band(wf->rfcarrier()));
|
||||
snprintf(sztemp, sizeof(sztemp), "<BAND:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// call
|
||||
tempstr = inpCall->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<CALL:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// mode
|
||||
tempstr = mode_info[active_modem->get_mode()].export_name;
|
||||
|
||||
snprintf(sztemp, sizeof(sztemp), "<MODE:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// qso date
|
||||
if (progdefaults.eqsl_datetime_off)
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSO_DATE:%d>%s",
|
||||
static_cast<int>(sDate_on.length()),
|
||||
sDate_off.c_str());
|
||||
else
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSO_DATE:%d>%s",
|
||||
static_cast<int>(sDate_on.length()),
|
||||
sDate_on.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// qso time
|
||||
if (progdefaults.eqsl_datetime_off)
|
||||
tempstr = inpTimeOff->value();
|
||||
else
|
||||
tempstr = inpTimeOn->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<TIME_ON:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// rst sent
|
||||
tempstr = inpRstOut->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<RST_SENT:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// message
|
||||
if (!msg.empty()) {
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSLMSG:%d>%s",
|
||||
static_cast<int>(msg.length()),
|
||||
msg.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
}
|
||||
eQSL_url.append("<EOR>");
|
||||
|
||||
tempstr.clear();
|
||||
for (size_t n = 0; n < eQSL_url.length(); n++) {
|
||||
if (eQSL_url[n] == ' ' || eQSL_url[n] == '\n') tempstr.append("%20");
|
||||
else if (eQSL_url[n] == '<') tempstr.append("%3c");
|
||||
else if (eQSL_url[n] == '>') tempstr.append("%3e");
|
||||
else if (eQSL_url[n] > ' ' && eQSL_url[n] <= '}')
|
||||
tempstr += eQSL_url[n];
|
||||
}
|
||||
|
||||
sendEQSL(tempstr.c_str());
|
||||
|
||||
}
|
||||
|
||||
/// With this constructor, no need to declare the array mode_info[] in the calling program.
|
||||
QsoHelper::QsoHelper(int the_mode)
|
||||
|
|
|
|||
|
|
@ -132,8 +132,11 @@ int cTextFile::writeCSVFile (const char *fname, cQsoDb *db) {
|
|||
fprintf (txtFile, ",\"%s\"", pRec->getField(BAND));
|
||||
if (btnSelectFreq->value())
|
||||
fprintf (txtFile, ",\"%s\"", pRec->getField(FREQ));
|
||||
if (btnSelectMode->value())
|
||||
if (btnSelectMode->value()) {
|
||||
fprintf (txtFile, ",\"%s\"", adif2export(pRec->getField(MODE)).c_str());
|
||||
if (!adif2submode(pRec->getField(MODE)).empty())
|
||||
fprintf (txtFile, ",\%s\"", adif2submode(pRec->getField(MODE)).c_str());
|
||||
}
|
||||
if (btnSelectTX_pwr->value())
|
||||
fprintf (txtFile, ",\"%s\"", pRec->getField(TX_PWR));
|
||||
if (btnSelectRSTsent->value())
|
||||
|
|
@ -295,8 +298,11 @@ int cTextFile::writeTXTFile (const char *fname, cQsoDb *db) {
|
|||
fprintf (txtFile, "%-7s", pRec->getField(BAND));
|
||||
if (btnSelectFreq->value())
|
||||
fprintf (txtFile, "%-12s", pRec->getField(FREQ));
|
||||
if (btnSelectMode->value())
|
||||
fprintf (txtFile, "%-8s", adif2export(pRec->getField(MODE)).c_str());
|
||||
if (btnSelectMode->value()) {
|
||||
fprintf (txtFile, "%-12s", adif2export(pRec->getField(MODE)).c_str());
|
||||
if (!adif2submode(pRec->getField(MODE)).empty())
|
||||
fprintf (txtFile, "%-12s", adif2submode(pRec->getField(MODE)).c_str());
|
||||
}
|
||||
if (btnSelectTX_pwr->value())
|
||||
fprintf (txtFile, "%-8s", pRec->getField(TX_PWR));
|
||||
if (btnSelectRSTsent->value())
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@
|
|||
|
||||
#include "dx_cluster.h"
|
||||
|
||||
#include "network.h"
|
||||
|
||||
#include <FL/fl_ask.H>
|
||||
|
||||
using namespace std;
|
||||
|
|
@ -235,6 +237,7 @@ string lotw_rec(cQsoRec &rec)
|
|||
putadif(CALL, rec.getField(CALL), strrec);
|
||||
|
||||
putadif(MODE, adif2export(rec.getField(MODE)).c_str());
|
||||
putadif(SUBMODE, adif2submode(rec.getField(MODE)).c_str());
|
||||
|
||||
temp = rec.getField(FREQ);
|
||||
temp.resize(7);
|
||||
|
|
@ -278,6 +281,7 @@ void submit_ADIF(cQsoRec &rec)
|
|||
putadif(CALL, rec.getField(CALL));
|
||||
putadif(FREQ, rec.getField(FREQ));
|
||||
putadif(MODE, adif2export(rec.getField(MODE)).c_str());
|
||||
putadif(SUBMODE, adif2submode(rec.getField(MODE)).c_str());
|
||||
putadif(RST_SENT, rec.getField(RST_SENT));
|
||||
putadif(RST_RCVD, rec.getField(RST_RCVD));
|
||||
putadif(TX_PWR, rec.getField(TX_PWR));
|
||||
|
|
@ -343,6 +347,7 @@ static void send_IPC_log(cQsoRec &rec)
|
|||
addtomsg("call:", rec.getField(CALL));
|
||||
addtomsg("mhz:", rec.getField(FREQ));
|
||||
addtomsg("mode:", adif2export(rec.getField(MODE)));
|
||||
addtomsg("submode:", adif2submode(rec.getField(MODE)));
|
||||
addtomsg("tx:", rec.getField(RST_SENT));
|
||||
addtomsg("rx:", rec.getField(RST_RCVD));
|
||||
addtomsg("name:", rec.getField(NAME));
|
||||
|
|
@ -413,3 +418,213 @@ void submit_log(void)
|
|||
if (FD_logged_on) FD_add_record();
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
// thread to support sending log entry to eQSL
|
||||
//======================================================================
|
||||
|
||||
pthread_t* EQSLthread = 0;
|
||||
pthread_mutex_t EQSLmutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
pthread_cond_t EQSLcond = PTHREAD_COND_INITIALIZER;
|
||||
|
||||
static void *EQSL_loop(void *args);
|
||||
static void EQSL_init(void);
|
||||
|
||||
void EQSL_close(void);
|
||||
void EQSL_send();
|
||||
|
||||
static std::string EQSL_url = "";
|
||||
static std::string EQSL_xmlpage = "";
|
||||
|
||||
static bool EQSLEXIT = false;
|
||||
|
||||
static void *EQSL_loop(void *args)
|
||||
{
|
||||
SET_THREAD_ID(EQSL_TID);
|
||||
|
||||
SET_THREAD_CANCEL();
|
||||
|
||||
for (;;) {
|
||||
TEST_THREAD_CANCEL();
|
||||
pthread_mutex_lock(&EQSLmutex);
|
||||
pthread_cond_wait(&EQSLcond, &EQSLmutex);
|
||||
pthread_mutex_unlock(&EQSLmutex);
|
||||
|
||||
if (EQSLEXIT)
|
||||
return NULL;
|
||||
|
||||
size_t p;
|
||||
if (fetch_http(EQSL_url, EQSL_xmlpage, 5.0) == false)
|
||||
LOG_ERROR("%s", "eQSL not available");
|
||||
|
||||
else if ((p = EQSL_xmlpage.find("Error:")) != std::string::npos) {
|
||||
size_t p2 = EQSL_xmlpage.find('\n', p);
|
||||
LOG_ERROR("%s\n%s", EQSL_xmlpage.substr(p, p2 - p - 1).c_str(), EQSL_url.c_str());
|
||||
} else
|
||||
LOG_INFO("eQSL logged %s", EQSL_url.c_str());
|
||||
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void EQSL_close(void)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (!EQSLthread)
|
||||
return;
|
||||
|
||||
CANCEL_THREAD(*EQSLthread);
|
||||
|
||||
pthread_mutex_lock(&EQSLmutex);
|
||||
EQSLEXIT = true;
|
||||
pthread_cond_signal(&EQSLcond);
|
||||
pthread_mutex_unlock(&EQSLmutex);
|
||||
|
||||
pthread_join(*EQSLthread, NULL);
|
||||
delete EQSLthread;
|
||||
EQSLthread = 0;
|
||||
}
|
||||
|
||||
static void EQSL_init(void)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (EQSLthread)
|
||||
return;
|
||||
EQSLthread = new pthread_t;
|
||||
EQSLEXIT = false;
|
||||
if (pthread_create(EQSLthread, NULL, EQSL_loop, NULL) != 0) {
|
||||
LOG_PERROR("pthread_create");
|
||||
return;
|
||||
}
|
||||
MilliSleep(10);
|
||||
}
|
||||
|
||||
void sendEQSL(const char *url)
|
||||
{
|
||||
ENSURE_THREAD(FLMAIN_TID);
|
||||
|
||||
if (!EQSLthread)
|
||||
EQSL_init();
|
||||
|
||||
pthread_mutex_lock(&EQSLmutex);
|
||||
EQSL_url = url;
|
||||
pthread_cond_signal(&EQSLcond);
|
||||
pthread_mutex_unlock(&EQSLmutex);
|
||||
}
|
||||
|
||||
// this function may be called from several places including macro
|
||||
// expansion and execution
|
||||
|
||||
void makeEQSL(const char *message)
|
||||
{
|
||||
char sztemp[100];
|
||||
std::string tempstr;
|
||||
std::string eQSL_url;
|
||||
std::string msg;
|
||||
size_t p = 0;
|
||||
|
||||
msg = message;
|
||||
|
||||
if (msg.empty()) msg = progdefaults.eqsl_default_message;
|
||||
|
||||
// replace message tags {CALL}, {NAME}, {MODE}
|
||||
while ((p = msg.find("{CALL}")) != std::string::npos)
|
||||
msg.replace(p, 6, inpCall->value());
|
||||
while ((p = msg.find("{NAME}")) != std::string::npos)
|
||||
msg.replace(p, 6, inpName->value());
|
||||
while ((p = msg.find("{MODE}")) != std::string::npos) {
|
||||
tempstr.assign(mode_info[active_modem->get_mode()].export_mode);
|
||||
tempstr.append("/").append(mode_info[active_modem->get_mode()].export_submode);
|
||||
msg.replace(p, 6, tempstr);
|
||||
}
|
||||
// eqsl url header
|
||||
eQSL_url = "http://www.eqsl.cc/qslcard/importADIF.cfm?ADIFdata=upload <adIF_ver:5>2.1.9";
|
||||
snprintf(sztemp, sizeof(sztemp),"<EQSL_USER:%d>%s<EQSL_PSWD:%d>%s",
|
||||
static_cast<int>(progdefaults.eqsl_id.length()),
|
||||
progdefaults.eqsl_id.c_str(),
|
||||
static_cast<int>(progdefaults.eqsl_pwd.length()),
|
||||
progdefaults.eqsl_pwd.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
eQSL_url.append("<PROGRAMID:6>FLDIGI<EOH>");
|
||||
// eqsl nickname
|
||||
if (!progdefaults.eqsl_nick.empty()) {
|
||||
snprintf(sztemp, sizeof(sztemp), "<APP_EQSL_QTH_NICKNAME:%d>%s",
|
||||
static_cast<int>(progdefaults.eqsl_nick.length()),
|
||||
progdefaults.eqsl_nick.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
}
|
||||
|
||||
// eqsl record
|
||||
// band
|
||||
tempstr = band_name(band(wf->rfcarrier()));
|
||||
snprintf(sztemp, sizeof(sztemp), "<BAND:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// call
|
||||
tempstr = inpCall->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<CALL:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// mode
|
||||
tempstr = mode_info[active_modem->get_mode()].export_mode;
|
||||
|
||||
snprintf(sztemp, sizeof(sztemp), "<MODE:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// submode
|
||||
tempstr = mode_info[active_modem->get_mode()].export_submode;
|
||||
|
||||
snprintf(sztemp, sizeof(sztemp), "<SUBMODE:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// qso date
|
||||
if (progdefaults.eqsl_datetime_off)
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSO_DATE:%d>%s",
|
||||
static_cast<int>(sDate_on.length()),
|
||||
sDate_off.c_str());
|
||||
else
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSO_DATE:%d>%s",
|
||||
static_cast<int>(sDate_on.length()),
|
||||
sDate_on.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// qso time
|
||||
if (progdefaults.eqsl_datetime_off)
|
||||
tempstr = inpTimeOff->value();
|
||||
else
|
||||
tempstr = inpTimeOn->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<TIME_ON:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// rst sent
|
||||
tempstr = inpRstOut->value();
|
||||
snprintf(sztemp, sizeof(sztemp), "<RST_SENT:%d>%s",
|
||||
static_cast<int>(tempstr.length()),
|
||||
tempstr.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
// message
|
||||
if (!msg.empty()) {
|
||||
snprintf(sztemp, sizeof(sztemp), "<QSLMSG:%d>%s",
|
||||
static_cast<int>(msg.length()),
|
||||
msg.c_str());
|
||||
eQSL_url.append(sztemp);
|
||||
}
|
||||
eQSL_url.append("<EOR>");
|
||||
|
||||
tempstr.clear();
|
||||
for (size_t n = 0; n < eQSL_url.length(); n++) {
|
||||
if (eQSL_url[n] == ' ' || eQSL_url[n] == '\n') tempstr.append("%20");
|
||||
else if (eQSL_url[n] == '<') tempstr.append("%3c");
|
||||
else if (eQSL_url[n] == '>') tempstr.append("%3e");
|
||||
else if (eQSL_url[n] > ' ' && eQSL_url[n] <= '}')
|
||||
tempstr += eQSL_url[n];
|
||||
}
|
||||
|
||||
sendEQSL(tempstr.c_str());
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue