Document/GUI/Header Modem/Default Modems

* Update User Manual for recent changes.
  * Estimated Relay transmit time not updating on TX panel modem change.
  * Header Modem using interval timer RX state delay, corrected.
  * Olivia Modem Names to Uppercase.
  * Remove redundant TX_SEGMENTED check.
  * Add code for relay repeat counters, interval timer.
This commit is contained in:
kk5vd 2024-03-03 19:49:04 -06:00 committed by dave-w1hkj
parent 73db3b6b0a
commit 24e183726d
15 changed files with 123 additions and 93 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Before After
Before After

View file

@ -315,18 +315,18 @@ N0BDY DE S0MCAL K
\image latex ReceivePanelPartialCropped.png "Receive Panel (Cropped)" width=3.4in
\image html ReceivePanelPartialCropped.png "Receive Panel (Cropped)"
This image shows a partially completed file. Three blocks were missed
This image shows a partially completed file. Multiple blocks were missed
in the first pass and they will (hopefully) be filled in during a repeated
transmission.
Note that the blocks with errors show up in the Missing line. In this case,
blocks 3, 4 and 5 were received with errors. The Receive Queue panel will
blocks 3,4,5 where received with errors. The Receive Queue panel will
show the percent received. Nothing will appear in the Data panel.
\section autoSave Auto Save Received Files
\image latex auto_save_rx.png "Receive Panel - Auto Save Option" width=1.5in
\image html auto_save_rx.png "Receive Panel - Auto Save Option"
\image latex auto_save_rx.png "Configure Panel - Auto Save Option" width=1.5in
\image html auto_save_rx.png "Configure Panel - Auto Save Option"
When selected, all files that are received 100% are save in FLAMP's
"rx/" directory automatically. The saved file will be place in a sub-directory
@ -474,6 +474,9 @@ Once FLAMP has exited or the files are removed from the receive queue, digipeat
for those files are lost. See: "Save and Restore Relay Data" before removing
any file(s) from the receive panel.
Two counters are provided for the repeated transmission of multiple 'n' copies of either
the header or data sections. Estimated transmit time is displayed to the right of
"Data Rpt" counter.
\image latex ReceiveQueueList.png "Receive Queue List" width=4.89in
\image html ReceiveQueueList.png "Receive Queue List"
@ -511,8 +514,8 @@ validation via a Warning Dialog box.
\subsection ss_save_relay_data Save and Restore Relay Data
\image latex ReplaySaveOption.png "Relay Save On Exit Checkbox" width=1.5in
\image html ReplaySaveOption.png "Relay Save On Exit Checkbox"
\image latex ReplaySaveOption.png "Configure Panel - Relay Save On Exit Checkbox" width=1.5in
\image html ReplaySaveOption.png "Configure Panel - Relay Save On Exit Checkbox"
Selecting this checkbox will cause FLAMP on program exit to save all AMP encoded copies of RX data listed in the receive panel.

View file

@ -224,9 +224,9 @@ void init_cbo_modes()
"8PSK500F|8PSK1000F|8PSK1200F|BPSK31|BPSK63|BPSK63F|BPSK125|" \
"BPSK250|BPSK500|BPSK1000|DOMX22|DOMX44|DOMX88|MFSK16|MFSK22|MFSK31|" \
"MFSK32|MFSK64|MFSK64L|MFSK128|MFSK128L|MT63-500L|MT63-500S|MT63-1KL|" \
"MT63-1KS|MT63-2KL|MT63-2KS|Olivia-4/250|Olivia-4/500|Olivia-8/250|" \
"Olivia-8/500|Olivia-8/1K|Olivia-16/500|Olivia-16/1K|Olivia-32/1K|" \
"Olivia-64/2K|PSK63RC4|PSK63RC5|PSK63RC10|PSK63RC20|PSK63RC32|PSK125R|" \
"MT63-1KS|MT63-2KL|MT63-2KS|OLIVIA-4/250|OLIVIA-4/500|OLIVIA-8/250|" \
"OLIVIA-8/500|OLIVIA-8/1K|OLIVIA-16/500|OLIVIA-16/1K|OLIVIA-32/1K|" \
"OLIVIA-64/2K|PSK63RC4|PSK63RC5|PSK63RC10|PSK63RC20|PSK63RC32|PSK125R|" \
"PSK125RC4|PSK125RC5|PSK125C12|PSK125RC10|PSK125RC12|PSK125RC16|PSK250R|" \
"PSK250C6|PSK250RC2|PSK250RC3|PSK250RC5|PSK250RC6|PSK250RC7|PSK500R|PSK500C2|" \
"PSK500C4|PSK500RC2|PSK500RC3|PSK500RC4|PSK800C2|PSK800RC2|PSK1000C2|" \
@ -263,6 +263,7 @@ void cb_cbo_modes(Fl_ComboBox *a, void *b)
if (progStatus.sync_mode_flamp_fldigi)
send_new_modem(cbo_modes->value());
show_selected_xmt(0);
estimate_relay();
}
/** ********************************************************

View file

@ -235,6 +235,7 @@ Fl_Double_Window* flamp_dialog() {
tabs->callback((Fl_Callback*)cb_tab);
tabs->when(FL_WHEN_CHANGED);
{ Rx_tab = new Fl_Group(0, 48, 515, 476, "Receive");
Rx_tab->hide();
{ txt_rx_filename = new Fl_Output(100, 54, 400, 20, "Output:");
} // Fl_Output* txt_rx_filename
{ txt_rx_datetime = new Fl_Output(100, 78, 295, 20, "Date time:");
@ -351,7 +352,6 @@ Fl_Double_Window* flamp_dialog() {
Rx_tab->end();
} // Fl_Group* Rx_tab
{ Tx_tab = new Fl_Group(0, 48, 505, 476, "Transmit");
Tx_tab->hide();
{ Fl_Input2* o = txt_tx_send_to = new Fl_Input2(70, 59, 430, 20, "Send to:");
txt_tx_send_to->tooltip("_(\"QST (or blank) / Enumerated callsigns\")");
txt_tx_send_to->box(FL_DOWN_BOX);
@ -546,7 +546,6 @@ Fl_Double_Window* flamp_dialog() {
event_tabs->selection_color((Fl_Color)246);
event_tabs->when(FL_WHEN_ENTER_KEY);
{ Timed_Events_tab = new Fl_Group(0, 72, 505, 452, "Timed");
Timed_Events_tab->hide();
{ Fl_Output* o = new Fl_Output(5, 76, 495, 92);
o->type(12);
o->box(FL_BORDER_BOX);
@ -642,6 +641,7 @@ Fl_Double_Window* flamp_dialog() {
Timed_Events_tab->end();
} // Fl_Group* Timed_Events_tab
{ Hamcast_Events_tab = new Fl_Group(0, 72, 505, 452, "Hamcast");
Hamcast_Events_tab->hide();
{ Fl_Group* o = new Fl_Group(4, 94, 496, 151, "Hamcast modem rotation / Queue Transmit Time (on Timed Events)");
o->box(FL_ENGRAVED_BOX);
{ Fl_Check_Button* o = btn_hamcast_mode_cycle = new Fl_Check_Button(16, 106, 70, 15, "Enable modem rotation");

View file

@ -63,9 +63,9 @@ Function {flamp_dialog()} {open
} {
Fl_Window dialog_flamp {
label FLAMP open
xywh {979 122 505 524} type Double visible
xywh {63 129 505 524} type Double visible
} {
Fl_Menu_Bar mnubar {open
Fl_Menu_Bar mnubar {open selected
xywh {0 0 505 24}
} {
Submenu mnu_files {
@ -134,8 +134,8 @@ Function {flamp_dialog()} {open
xywh {0 24 520 500} selection_color 246 when 1
} {
Fl_Group Rx_tab {
label Receive open selected
xywh {0 48 515 476}
label Receive open
xywh {0 48 515 476} hide
code0 {tab_pointers[rx_tab_idx] = Rx_tab;}
} {
Fl_Output txt_rx_filename {
@ -240,7 +240,7 @@ Function {flamp_dialog()} {open
}
Fl_Group Tx_tab {
label Transmit open
xywh {0 48 505 476} hide
xywh {0 48 505 476}
code0 {tab_pointers[tx_tab_idx] = Tx_tab;}
} {
Fl_Input txt_tx_send_to {
@ -366,7 +366,7 @@ Function {flamp_dialog()} {open
} {
Fl_Group Timed_Events_tab {
label Timed open
xywh {0 72 505 452} hide
xywh {0 72 505 452}
} {
Fl_Output {} {
xywh {5 76 495 92} type Multiline box BORDER_BOX
@ -448,7 +448,7 @@ Function {flamp_dialog()} {open
}
Fl_Group Hamcast_Events_tab {
label Hamcast
xywh {0 72 505 452}
xywh {0 72 505 452} hide
} {
Fl_Group {} {
label {Hamcast modem rotation / Queue Transmit Time (on Timed Events)} open

View file

@ -1535,13 +1535,18 @@ int cAmp::tx_relay_vector(std::string callfrom, std::string missing_blocks)
std::string callto_from;
std::string temp_data;
std::string the_data;
int repeat_index = 0;
int header_repeat = 0;
int data_repeat = 0;
header_repeat = progStatus.repeat_relay_header;
data_repeat = progStatus.repeat_relay_data;
if(callfrom.empty()) {
unlock();
return 0;
}
header_string_array.clear();
data_string_array.clear();
@ -1552,36 +1557,40 @@ int cAmp::tx_relay_vector(std::string callfrom, std::string missing_blocks)
blocks = reformat_missing_blocks(missing_blocks);
if(blocks.empty()) {
if(_rx_raw_prog.size()) {
the_data.assign(_rx_raw_prog).append("\n");
data_string_array.push_back(the_data);
for(repeat_index = 0; repeat_index < header_repeat; repeat_index++) {
if(_rx_raw_prog.size()) {
the_data.assign(_rx_raw_prog).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_file.size()) {
the_data.assign(_rx_raw_file).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_id.size()) {
the_data.assign(_rx_raw_id).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_size.size()) {
the_data.assign(_rx_raw_size).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_desc.size()) {
the_data.assign(_rx_raw_desc).append("\n");
data_string_array.push_back(the_data);
}
}
if(_rx_raw_file.size()) {
the_data.assign(_rx_raw_file).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_id.size()) {
the_data.assign(_rx_raw_id).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_size.size()) {
the_data.assign(_rx_raw_size).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_desc.size()) {
the_data.assign(_rx_raw_desc).append("\n");
data_string_array.push_back(the_data);
}
for (idata = rxblocks.begin(), ihead = rxDataHeader.begin();
((idata != rxblocks.end()) || (ihead != rxDataHeader.end()));
idata++, ihead++) {
the_data.assign(ihead->second).append(idata->second).append("\n");
data_string_array.push_back(the_data);
for(repeat_index = 0; repeat_index < data_repeat; repeat_index++) {
for (idata = rxblocks.begin(), ihead = rxDataHeader.begin();
((idata != rxblocks.end()) || (ihead != rxDataHeader.end()));
idata++, ihead++) {
the_data.assign(ihead->second).append(idata->second).append("\n");
data_string_array.push_back(the_data);
}
}
} else {
@ -1616,41 +1625,45 @@ int cAmp::tx_relay_vector(std::string callfrom, std::string missing_blocks)
}
if(block_flags[0]) {
if(_rx_raw_prog.size()) {
the_data.assign(_rx_raw_prog).append("\n");
data_string_array.push_back(the_data);
for(repeat_index = 0; repeat_index < header_repeat; repeat_index++) {
if(_rx_raw_prog.size()) {
the_data.assign(_rx_raw_prog).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_file.size()) {
the_data.assign(_rx_raw_file).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_id.size()) {
the_data.assign(_rx_raw_id).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_size.size()) {
the_data.assign(_rx_raw_size).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_desc.size()) {
the_data.assign(_rx_raw_desc).append("\n");
data_string_array.push_back(the_data);
}
}
if(_rx_raw_file.size()) {
the_data.assign(_rx_raw_file).append("\n");
data_string_array.push_back(the_data);
}
for(repeat_index = 0; repeat_index < data_repeat; repeat_index++) {
for(index = 1; index <= count; index++) {
if(block_flags[index]) {
idata = rxblocks.find(index);
ihead = rxDataHeader.find(index);
if(_rx_raw_id.size()) {
the_data.assign(_rx_raw_id).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_size.size()) {
the_data.assign(_rx_raw_size).append("\n");
data_string_array.push_back(the_data);
}
if(_rx_raw_desc.size()) {
the_data.assign(_rx_raw_desc).append("\n");
data_string_array.push_back(the_data);
}
}
for(index = 1; index <= count; index++) {
if(block_flags[index]) {
idata = rxblocks.find(index);
ihead = rxDataHeader.find(index);
if(idata == rxblocks.end() || ihead == rxDataHeader.end())
continue;
the_data.assign(ihead->second).append(idata->second).append("\n");
data_string_array.push_back(the_data);
if(idata == rxblocks.end() || ihead == rxDataHeader.end())
continue;
the_data.assign(ihead->second).append(idata->second).append("\n");
data_string_array.push_back(the_data);
}
}
}
}

View file

@ -91,11 +91,11 @@ Socket *tcpip = (Socket *)0;
Address *localaddr = (Address *)0;
const char *b64_start = "[b64:start]";
const char *b64_end = "\n[b64:end]";
const char *b64_end = "[b64:end]";
const char *b128_start = "[b128:start]";
const char *b128_end = "\n[b128:end]";
const char *b128_end = "[b128:end]";
const char *b256_start = "[b256:start]";
const char *b256_end = "\n[b256:end]";
const char *b256_end = "[b256:end]";
std::string errtext;

View file

@ -873,8 +873,8 @@ void * transmit_relay_interval(void * ptr)
}
}
}
wait_seconds(thread_ptr->rx_interval_time, 100);
wait_seconds(1, 100);
// Data section
if(progStatus.use_header_modem || progStatus.fldigi_xmt_mode_change) {
@ -1038,7 +1038,10 @@ void * transmit_interval(void * ptr)
if((fills && shift_key_flag) || !shift_key_flag) {
if(count > 0 && !transmit_stop) {
wait_seconds(thread_ptr->rx_interval_time, 100);
if(progStatus.use_txrx_interval)
wait_seconds(thread_ptr->rx_interval_time, 100);
else
wait_seconds(1, 100);
}
if(transmit_stop) {
@ -1066,7 +1069,10 @@ void * transmit_interval(void * ptr)
}
if(repeat_count > 0) {
wait_seconds(thread_ptr->rx_interval_time, 100);
if(progStatus.use_txrx_interval)
wait_seconds(thread_ptr->rx_interval_time, 100);
else
wait_seconds(1, 100);
}
int headerm = progStatus.use_header_modem;
@ -1084,10 +1090,12 @@ void * transmit_interval(void * ptr)
}
if(vector_header_count > 0) {
if(thread_ptr->mode == TX_SEGMENTED)
wait_seconds(thread_ptr->rx_interval_time, 100);
else
wait_seconds(1, 100);
if(thread_ptr->mode == TX_SEGMENTED) {
if(progStatus.use_txrx_interval)
wait_seconds(thread_ptr->rx_interval_time, 100);
else
wait_seconds(1, 100);
}
}
// Data section
@ -1236,8 +1244,13 @@ bool send_vector_to_fldigi(TX_FLDIGI_THREAD *thread, std::string modem, std::str
transfer(send);
if(mode == TX_SEGMENTED) {
if (!wait_for_rx(length, wait_factor)) return false;
wait_seconds(thread->rx_interval_time, 100);
if (!wait_for_rx(length, wait_factor))
return false;
if(progStatus.use_txrx_interval)
wait_seconds(thread->rx_interval_time, 100);
else
wait_seconds(1, 100);
}
send.assign("\n");