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.
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
/** ********************************************************
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||