kopia lustrzana https://github.com/k3ng/k3ng_cw_keyer
2017.05.06.01
Lots of new functionality in FEATURE_TRAINING_COMMAND_LINE_INTERFACE keyer_training_text_norsk.h content contributed by Martin, OK1RR Norwegian language support for Wordsworth training: OPTION_WORDSWORTH_NORSKpull/25/merge
rodzic
d9f021c17d
commit
69f2e4004d
|
@ -697,6 +697,11 @@ Recent Update History
|
|||
keyer_training_text_czech.h contributed by Martin, OK1RR
|
||||
Czech language support for Wordsworth training: OPTION_WORDSWORTH_CZECH
|
||||
|
||||
2017.05.06.01
|
||||
Lots of new functionality in FEATURE_TRAINING_COMMAND_LINE_INTERFACE
|
||||
keyer_training_text_norsk.h content contributed by Martin, OK1RR
|
||||
Norwegian language support for Wordsworth training: OPTION_WORDSWORTH_NORSK
|
||||
|
||||
This code is currently maintained for and compiled with Arduino 1.8.1. Your mileage may vary with other versions.
|
||||
|
||||
ATTENTION: LIBRARY FILES MUST BE PUT IN LIBRARIES DIRECTORIES AND NOT THE INO SKETCH DIRECTORY !!!!
|
||||
|
@ -704,7 +709,7 @@ Recent Update History
|
|||
FOR EXAMPLE:
|
||||
|
||||
K3NG_PS2Keyboard.h, K3NG_PS2Keyboard.cpp -----> \Arduino\Sketchbook\libraries\K3NG_PS2Keyboard\
|
||||
Goertz.h, Gooertz.cpp ------------------------> \Arduino\Sketchbook\libraries\Goertz\
|
||||
Goertz.h, Goertz.cpp ------------------------> \Arduino\Sketchbook\libraries\Goertz\
|
||||
BasicTerm.h, BasicTerm.cpp -------------------> \Arduino\Sketchbook\libraries\BasicTerm\
|
||||
|
||||
|
||||
|
@ -712,8 +717,8 @@ Recent Update History
|
|||
|
||||
*/
|
||||
|
||||
#define CODE_VERSION "2017.05.05.01"
|
||||
#define eeprom_magic_number 25
|
||||
#define CODE_VERSION "2017.05.06.01"
|
||||
#define eeprom_magic_number 26
|
||||
|
||||
#include <stdio.h>
|
||||
#include "keyer_hardware.h"
|
||||
|
@ -880,6 +885,7 @@ struct config_t { //48 bytes
|
|||
uint8_t link_receive_enabled;
|
||||
uint8_t paddle_interruption_quiet_time_element_lengths;
|
||||
uint8_t wordsworth_wordspace;
|
||||
uint8_t wordsworth_repetition;
|
||||
} configuration;
|
||||
|
||||
byte sending_mode = UNDEFINED_SENDING;
|
||||
|
@ -1328,9 +1334,13 @@ unsigned long millis_rollover = 0;
|
|||
#include "keyer_training_text_czech.h"
|
||||
#elif defined(OPTION_WORDSWORTH_DEUTCSH)
|
||||
#include "keyer_training_text_deutsch.h"
|
||||
#elif defined(OPTION_WORDSWORTH_NORSK)
|
||||
#include "keyer_training_text_norsk.h"
|
||||
#else
|
||||
#include "keyer_training_text_english.h"
|
||||
#endif
|
||||
|
||||
#include "keyer_callsign_prefixes.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -10410,42 +10420,81 @@ void serial_tune_command (PRIMARY_SERIAL_CLS * port_to_use)
|
|||
//---------------------------------------------------------------------
|
||||
#ifdef FEATURE_TRAINING_COMMAND_LINE_INTERFACE
|
||||
|
||||
String generate_callsign() {
|
||||
String generate_callsign(byte callsign_mode) {
|
||||
|
||||
String callsign(10);
|
||||
static String callsign(10);
|
||||
char nextchar;
|
||||
long random_number = 0;
|
||||
char word_buffer[10];
|
||||
|
||||
switch (random(1,5)) {
|
||||
case 1: callsign = "K"; break;
|
||||
case 2: callsign = "W"; break;
|
||||
case 3: callsign = "N"; break;
|
||||
case 4: callsign = "A"; break;
|
||||
}
|
||||
if (callsign == "A") { // if the first letter is A, we definitely need a second letter before the number
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
} else {
|
||||
random_number = random(0,1); // randomly add a second letter for K, W, N prefixes
|
||||
if (random_number) {
|
||||
callsign = "";
|
||||
|
||||
if (callsign_mode == CALLSIGN_INTERNATIONAL){
|
||||
if (random(1,101) < 96) {
|
||||
// start with a letter 96% of the time
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
if (random(1,101) < 20) { // randomly add second prefix letter 20% of the time
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
}
|
||||
} else {
|
||||
// start with a number
|
||||
nextchar = random(49,58); // generate the number
|
||||
callsign = callsign + nextchar;
|
||||
nextchar = random(65,91); // must add a letter next
|
||||
callsign = callsign + nextchar;
|
||||
}
|
||||
} //CALLSIGN_INTERNATIONAL
|
||||
|
||||
if (callsign_mode == CALLSIGN_US){
|
||||
switch (random(1,5)) {
|
||||
case 1: callsign = "K"; break;
|
||||
case 2: callsign = "W"; break;
|
||||
case 3: callsign = "N"; break;
|
||||
case 4: callsign = "A"; break;
|
||||
}
|
||||
if (callsign == "A") { // if the first letter is A, we definitely need a second letter before the number
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
} else {
|
||||
// randomly add a second letter for K, W, N prefixes
|
||||
if (random(1,101) < 51) {
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
}
|
||||
}
|
||||
} //CALLSIGN_US
|
||||
|
||||
if (callsign_mode == CALLSIGN_CANADA){
|
||||
strcpy_P(word_buffer, (char*)pgm_read_word(&(canadian_prefix_table[random(0,canadian_prefix_size)])));
|
||||
callsign = word_buffer;
|
||||
}
|
||||
nextchar = random(48,58); // generate the number
|
||||
callsign = callsign + nextchar;
|
||||
|
||||
if (callsign_mode == CALLSIGN_EUROPEAN){
|
||||
|
||||
strcpy_P(word_buffer, (char*)pgm_read_word(&(eu_prefix_table[random(0,eu_prefix_size)])));
|
||||
callsign = word_buffer;
|
||||
}
|
||||
|
||||
if (callsign_mode != CALLSIGN_CANADA){
|
||||
nextchar = random(48,58); // generate the number
|
||||
callsign = callsign + nextchar;
|
||||
}
|
||||
|
||||
|
||||
nextchar = random(65,91); // generate first letter after number
|
||||
callsign = callsign + nextchar;
|
||||
if (random(1,5) < 4) { // randomly put a second character after the number
|
||||
if ((random(1,101) < 40) || (callsign_mode == CALLSIGN_CANADA)) { // randomly put a second character after the number
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
if (random_number < 3) { // randomly put a third character after the number
|
||||
if ((random(1,101) < 96) || (callsign_mode == CALLSIGN_CANADA)) { // randomly put a third character after the number
|
||||
nextchar = random(65,91);
|
||||
callsign = callsign + nextchar;
|
||||
}
|
||||
}
|
||||
if (random(1,16) == 1) { // randomly put a slash something on the end like /QRP or /#
|
||||
if (random(1,4) == 1) {
|
||||
|
||||
if (random(1,101) < 10) { // randomly put a slash something on the end like /QRP or /#
|
||||
if (random(1,101) < 25) {
|
||||
callsign = callsign + "/QRP";
|
||||
} else {
|
||||
nextchar = random(48,58);
|
||||
|
@ -10709,6 +10758,9 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
char incoming_char = ' ';
|
||||
|
||||
check_serial_override = 1;
|
||||
|
||||
byte previous_key_tx_state = key_tx;
|
||||
key_tx = 0;
|
||||
|
||||
while(menu_loop){
|
||||
|
||||
|
@ -10717,7 +10769,8 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
}
|
||||
|
||||
port_to_use->println(F("\r\n\nCW Training Menu\n"));
|
||||
port_to_use->println(F("U - US Callsigns"));
|
||||
port_to_use->println(F("C - Callsigns"));
|
||||
port_to_use->println(F("I - Callsigns - Interactive Practice"));
|
||||
port_to_use->println(F("W - Wordsworth"));
|
||||
//port_to_use->println("2 - PA QSO Party"); // Don't think this is working right / wasn't finished - Goody 2017-05-01
|
||||
port_to_use->println(F("\nX - Exit\n"));
|
||||
|
@ -10737,19 +10790,75 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
|
||||
switch(incoming_char){
|
||||
case 'X': menu_loop = 0; break;
|
||||
case 'U': us_callsign_practice(port_to_use); break;
|
||||
case 'C': serial_callsign_practice_menu(port_to_use,PRACTICE_NON_INTERACTIVE); break;
|
||||
case 'I': serial_callsign_practice_menu(port_to_use,PRACTICE_INTERACTIVE); break;
|
||||
case 'W': serial_wordsworth_menu(port_to_use); break;
|
||||
//case '2': paqso_practice(port_to_use); break;
|
||||
|
||||
|
||||
} //switch(incoming_char)
|
||||
|
||||
|
||||
|
||||
} //while(menu_loop)
|
||||
|
||||
port_to_use->println(F("Exiting Training module..."));
|
||||
check_serial_override = 0;
|
||||
key_tx = previous_key_tx_state;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
#if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
void serial_callsign_practice_menu(PRIMARY_SERIAL_CLS * port_to_use,byte practice_mode){
|
||||
|
||||
|
||||
byte menu_loop = 1;
|
||||
byte menu_loop2 = 1;
|
||||
char incoming_char = ' ';
|
||||
|
||||
while(menu_loop){
|
||||
|
||||
while (port_to_use->available() > 0) { // clear out the buffer if anything is there
|
||||
port_to_use->read();
|
||||
}
|
||||
|
||||
port_to_use->println(F("\r\n\nCallsign Practice Menu\n"));
|
||||
port_to_use->println(F("I - International Callsigns"));
|
||||
port_to_use->println(F("U - US Callsigns"));
|
||||
port_to_use->println(F("E - European Callsigns"));
|
||||
port_to_use->println(F("C - Canadian Callsigns"));
|
||||
port_to_use->println(F("\nX - Exit\n"));
|
||||
|
||||
menu_loop2 = 1;
|
||||
|
||||
while (menu_loop2){
|
||||
|
||||
if (port_to_use->available()){
|
||||
incoming_char = port_to_use->read();
|
||||
menu_loop2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
incoming_char = toUpperCase(incoming_char);
|
||||
|
||||
if (practice_mode == PRACTICE_INTERACTIVE){
|
||||
switch(incoming_char){
|
||||
case 'X': menu_loop = 0; break;
|
||||
case 'I': callsign_practice_interactive(port_to_use,CALLSIGN_INTERNATIONAL); break;
|
||||
case 'U': callsign_practice_interactive(port_to_use,CALLSIGN_US); break;
|
||||
case 'E': callsign_practice_interactive(port_to_use,CALLSIGN_EUROPEAN); break;
|
||||
case 'C': callsign_practice_interactive(port_to_use,CALLSIGN_CANADA); break;
|
||||
} //switch(incoming_char)
|
||||
} else {
|
||||
switch(incoming_char){
|
||||
case 'X': menu_loop = 0; break;
|
||||
case 'I': callsign_practice_non_interactive(port_to_use,CALLSIGN_INTERNATIONAL); break;
|
||||
case 'U': callsign_practice_non_interactive(port_to_use,CALLSIGN_US); break;
|
||||
case 'E': callsign_practice_non_interactive(port_to_use,CALLSIGN_EUROPEAN); break;
|
||||
case 'C': callsign_practice_non_interactive(port_to_use,CALLSIGN_CANADA); break;
|
||||
} //switch(incoming_char)
|
||||
}
|
||||
} //while(menu_loop)
|
||||
|
||||
port_to_use->println(F("Exiting callsign training..."));
|
||||
|
||||
}
|
||||
#endif
|
||||
|
@ -10757,7 +10866,7 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
//---------------------------------------------------------------------
|
||||
|
||||
#if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
void serial_enter_wpm_wordspace(PRIMARY_SERIAL_CLS * port_to_use,byte wpm_or_wordspace){
|
||||
void serial_set_wordspace_parameters(PRIMARY_SERIAL_CLS * port_to_use,byte mode_select){
|
||||
|
||||
byte menu_loop = 1;
|
||||
byte menu_loop2 = 1;
|
||||
|
@ -10771,12 +10880,13 @@ void serial_enter_wpm_wordspace(PRIMARY_SERIAL_CLS * port_to_use,byte wpm_or_wor
|
|||
port_to_use->read();
|
||||
}
|
||||
|
||||
if (wpm_or_wordspace){
|
||||
port_to_use->print(F("\r\nEnter Wordspace >"));
|
||||
} else {
|
||||
port_to_use->print(F("\r\nEnter WPM >"));
|
||||
switch(mode_select){
|
||||
case WORDSWORTH_WORDSPACE: port_to_use->print(F("\r\nEnter Wordspace >")); break;
|
||||
case WORDSWORTH_WPM: port_to_use->print(F("\r\nEnter WPM >")); break;
|
||||
case WORDSWORTH_REPETITION: port_to_use->print(F("\r\nEnter Repetition >")); break;
|
||||
}
|
||||
|
||||
|
||||
menu_loop2 = 1;
|
||||
temp_value = 0;
|
||||
|
||||
|
@ -10798,31 +10908,31 @@ void serial_enter_wpm_wordspace(PRIMARY_SERIAL_CLS * port_to_use,byte wpm_or_wor
|
|||
if (temp_value == 0){
|
||||
menu_loop = 0; // just blow out if nothing was entered
|
||||
} else {
|
||||
if ((temp_value > 0) && (temp_value < 101) && (wpm_or_wordspace == 0)){
|
||||
if ((temp_value > 0) && (temp_value < 101) && (mode_select == WORDSWORTH_WPM)){
|
||||
configuration.wpm = temp_value;
|
||||
config_dirty = 1;
|
||||
menu_loop = 0;
|
||||
} else {
|
||||
if ((temp_value > 1) && (temp_value < 13) && (wpm_or_wordspace == 1)){
|
||||
if ((temp_value > 1) && (temp_value < 13) && (mode_select == WORDSWORTH_WORDSPACE)){
|
||||
configuration.wordsworth_wordspace = temp_value;
|
||||
config_dirty = 1;
|
||||
menu_loop = 0;
|
||||
} else {
|
||||
port_to_use->println(F("\r\nOMG that's an invalid value. Try again, OM..."));
|
||||
if ((temp_value > 0) && (temp_value < 11) && (mode_select == WORDSWORTH_REPETITION)){
|
||||
configuration.wordsworth_repetition = temp_value;
|
||||
config_dirty = 1;
|
||||
menu_loop = 0;
|
||||
} else {
|
||||
port_to_use->println(F("\r\nOMG that's an invalid value. Try again, OM..."));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} //while(menu_loop)
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
#endif //defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
|
@ -10846,15 +10956,18 @@ void serial_wordsworth_menu(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
port_to_use->println(F("N - Names"));
|
||||
port_to_use->println(F("Q - QSO Words"));
|
||||
port_to_use->println(F("M - Mixed\n"));
|
||||
port_to_use->println(F("S - Set wordspace"));
|
||||
port_to_use->println(F("O - Set Wordspace"));
|
||||
port_to_use->println(F("W - Set WPM"));
|
||||
port_to_use->println(F("R - Set Repetition"));
|
||||
port_to_use->println(F("\nX - Exit\n"));
|
||||
port_to_use->print(F("WPM:"));
|
||||
port_to_use->print(configuration.wpm);
|
||||
port_to_use->print(F(" Wordspace:"));
|
||||
port_to_use->print(configuration.wordsworth_wordspace);
|
||||
port_to_use->print(F(" Effective WPM:"));
|
||||
port_to_use->println(configuration.wpm * (effective_wpm_factor[configuration.wordsworth_wordspace-1]/100.0),0);
|
||||
port_to_use->print(configuration.wpm * (effective_wpm_factor[configuration.wordsworth_wordspace-1]/100.0),0);
|
||||
port_to_use->print(F(" Repetition:"));
|
||||
port_to_use->println(configuration.wordsworth_repetition);
|
||||
|
||||
menu_loop2 = 1;
|
||||
|
||||
|
@ -10875,13 +10988,10 @@ void serial_wordsworth_menu(PRIMARY_SERIAL_CLS * port_to_use){
|
|||
case 'N': wordsworth_practice(port_to_use,WORDSWORTH_NAMES); break;
|
||||
case 'M': wordsworth_practice(port_to_use,WORDSWORTH_MIXED); break;
|
||||
case 'Q': wordsworth_practice(port_to_use,WORDSWORTH_QSO_WORDS); break;
|
||||
case 'W': serial_enter_wpm_wordspace(port_to_use,0); break;
|
||||
case 'S': serial_enter_wpm_wordspace(port_to_use,1); break;
|
||||
case 'X': menu_loop = 0; break;
|
||||
//case '1': us_callsign_practice(port_to_use); break;
|
||||
//case '2': serial_wordsworth_menu(port_to_use); break;
|
||||
|
||||
|
||||
case 'W': serial_set_wordspace_parameters(port_to_use,WORDSWORTH_WPM); break;
|
||||
case 'O': serial_set_wordspace_parameters(port_to_use,WORDSWORTH_WORDSPACE); break;
|
||||
case 'R': serial_set_wordspace_parameters(port_to_use,WORDSWORTH_REPETITION); break;
|
||||
case 'X': menu_loop = 0; break;
|
||||
} //switch(incoming_char)
|
||||
|
||||
|
||||
|
@ -10903,20 +11013,19 @@ void wordsworth_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practice_type)
|
|||
|
||||
byte loop1 = 1;
|
||||
byte loop2;
|
||||
byte loop3;
|
||||
unsigned int word_index;
|
||||
char word_buffer[10];
|
||||
byte x;
|
||||
byte not_printed;
|
||||
byte practice_type_called = practice_type;
|
||||
byte repetitions;
|
||||
|
||||
|
||||
|
||||
byte previous_key_tx_state = key_tx;
|
||||
key_tx = 0;
|
||||
|
||||
randomSeed(millis());
|
||||
|
||||
//
|
||||
|
||||
port_to_use->println(F("Wordsworth practice...\n"));
|
||||
|
||||
while (port_to_use->available() > 0) { // clear out the buffer if anything is there
|
||||
|
@ -10956,55 +11065,66 @@ void wordsworth_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practice_type)
|
|||
break;
|
||||
}
|
||||
|
||||
// debug_serial_port->print("wordsworth_practice: word_index:");
|
||||
// debug_serial_port->println(word_index);
|
||||
|
||||
#if defined(DEBUG_WORDSWORTH)
|
||||
debug_serial_port->print("wordsworth_practice: word_index:");
|
||||
debug_serial_port->println(word_index);
|
||||
debug_serial_port->print("wordsworth_practice: word_buffer:");
|
||||
debug_serial_port->println(word_buffer);
|
||||
#endif
|
||||
|
||||
loop3 = 1;
|
||||
repetitions = 0;
|
||||
|
||||
// debug_serial_port->print("wordsworth_practice: word_buffer:");
|
||||
// debug_serial_port->println(word_buffer);
|
||||
while ((loop3) && (repetitions < configuration.wordsworth_repetition)){ // word sending loop
|
||||
|
||||
x = 0;
|
||||
loop2 = 1;
|
||||
loop2 = 1;
|
||||
x = 0;
|
||||
|
||||
while (loop2){
|
||||
//zzzzz
|
||||
while (loop2){ //character sending loop
|
||||
|
||||
// debug_serial_port->print("wordsworth_practice: send_char:");
|
||||
// debug_serial_port->println(word_buffer[x]);
|
||||
#if defined(DEBUG_WORDSWORTH)
|
||||
debug_serial_port->print("wordsworth_practice: send_char:");
|
||||
debug_serial_port->println(word_buffer[x]);
|
||||
#endif
|
||||
|
||||
word_buffer[x] = toUpperCase(word_buffer[x]);
|
||||
send_char(word_buffer[x],KEYER_NORMAL);
|
||||
x++;
|
||||
not_printed = 1;
|
||||
word_buffer[x] = toUpperCase(word_buffer[x]);
|
||||
send_char(word_buffer[x],KEYER_NORMAL);
|
||||
x++;
|
||||
not_printed = 1;
|
||||
|
||||
if ((word_buffer[x] == 0) || (x > 9)){ // are we at the end of the word?
|
||||
loop2 = 0;
|
||||
for (int y = 0;y < (configuration.wordsworth_wordspace-1);y++){ // send extra word spaces
|
||||
send_char(' ',KEYER_NORMAL);
|
||||
if (((y > ((configuration.wordsworth_wordspace-1)/2)) || (configuration.wordsworth_wordspace < 4)) && (not_printed)){
|
||||
port_to_use->println(word_buffer);
|
||||
not_printed = 0;
|
||||
}
|
||||
if (port_to_use->available()){
|
||||
port_to_use->read();
|
||||
y = 99;
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
if ((word_buffer[x] == 0) || (x > 9)){ // are we at the end of the word?
|
||||
loop2 = 0;
|
||||
for (int y = 0;y < (configuration.wordsworth_wordspace-1);y++){ // send extra word spaces
|
||||
send_char(' ',KEYER_NORMAL);
|
||||
if (((y > ((configuration.wordsworth_wordspace-1)/2)) || (configuration.wordsworth_wordspace < 4)) && (not_printed)){
|
||||
port_to_use->println(word_buffer);
|
||||
not_printed = 0;
|
||||
}
|
||||
if (port_to_use->available()){
|
||||
port_to_use->read();
|
||||
y = 99;
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
loop3 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (port_to_use->available()){
|
||||
port_to_use->read();
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
}
|
||||
}
|
||||
if (port_to_use->available()){
|
||||
port_to_use->read();
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
loop3 = 0;
|
||||
}
|
||||
} //loop2
|
||||
|
||||
repetitions++;
|
||||
|
||||
} //loop3
|
||||
|
||||
} //loop1
|
||||
|
||||
key_tx = previous_key_tx_state;
|
||||
|
||||
|
||||
}
|
||||
#endif //defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
|
@ -11012,7 +11132,7 @@ void wordsworth_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practice_type)
|
|||
//---------------------------------------------------------------------
|
||||
|
||||
#if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
void us_callsign_practice(PRIMARY_SERIAL_CLS * port_to_use)
|
||||
void callsign_practice_interactive(PRIMARY_SERIAL_CLS * port_to_use,byte callsign_mode)
|
||||
{
|
||||
|
||||
byte loop1 = 1;
|
||||
|
@ -11023,17 +11143,14 @@ void us_callsign_practice(PRIMARY_SERIAL_CLS * port_to_use)
|
|||
char incoming_char = ' ';
|
||||
String user_entered_callsign = "";
|
||||
|
||||
byte previous_key_tx_state = key_tx;
|
||||
key_tx = 0;
|
||||
//randomSeed(analogRead(0));
|
||||
randomSeed(millis());
|
||||
port_to_use->println(F("Callsign receive practice; type in callsign and hit ENTER."));
|
||||
port_to_use->println(F("Interactive callsign receive practice\r\n\r\nCopy callsign, type it in, and hit ENTER."));
|
||||
port_to_use->println(F("If you are using the Arduino serial monitor, select \"Carriage Return\" line ending."));
|
||||
port_to_use->println(F("Enter a blackslash \\ to exit."));
|
||||
port_to_use->println(F("Enter a blackslash \\ to exit.\r\n"));
|
||||
while (port_to_use->available() > 0) { // clear out the buffer if anything is there
|
||||
incoming_char = port_to_use->read();
|
||||
}
|
||||
port_to_use->print(F("Press enter to start..."));
|
||||
port_to_use->print(F("Press enter to start...\r\n"));
|
||||
while (port_to_use->available() == 0) {
|
||||
}
|
||||
while (port_to_use->available() > 0) { // clear out the buffer if anything is there
|
||||
|
@ -11042,17 +11159,14 @@ void us_callsign_practice(PRIMARY_SERIAL_CLS * port_to_use)
|
|||
|
||||
while (loop1){
|
||||
|
||||
callsign = generate_callsign();
|
||||
callsign = generate_callsign(callsign_mode);
|
||||
loop2 = 1;
|
||||
|
||||
while (loop2){
|
||||
|
||||
// for (byte x = 0; x < (callsign.length()); x++) {
|
||||
// send_char(callsign[x],KEYER_NORMAL);
|
||||
// }
|
||||
|
||||
|
||||
//port_to_use->println(callsign);
|
||||
#if defined(DEBUG_CALLSIGN_PRACTICE_SHOW_CALLSIGN)
|
||||
port_to_use->println(callsign);
|
||||
#endif
|
||||
|
||||
serialwaitloop = 1;
|
||||
user_entered_callsign = "";
|
||||
|
@ -11063,11 +11177,10 @@ void us_callsign_practice(PRIMARY_SERIAL_CLS * port_to_use)
|
|||
send_char(callsign[x],KEYER_NORMAL);
|
||||
x++;
|
||||
}
|
||||
//zzzzzz
|
||||
while(port_to_use->available() > 0) {
|
||||
|
||||
//if (port_to_use->available() > 0) {
|
||||
while(port_to_use->available() > 0) {
|
||||
incoming_char = port_to_use->read();
|
||||
incoming_char = toUpperCase(incoming_char);
|
||||
port_to_use->print(incoming_char);
|
||||
if (incoming_char == 13) {
|
||||
serialwaitloop = 0;
|
||||
|
@ -11113,6 +11226,71 @@ void us_callsign_practice(PRIMARY_SERIAL_CLS * port_to_use)
|
|||
} //loop2
|
||||
} //loop1
|
||||
|
||||
|
||||
}
|
||||
#endif //defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE)
|
||||
void callsign_practice_non_interactive(PRIMARY_SERIAL_CLS * port_to_use,byte callsign_mode)
|
||||
{
|
||||
|
||||
byte loop1 = 1;
|
||||
byte loop2;
|
||||
byte x;
|
||||
String callsign(10);
|
||||
char incoming_char = ' ';
|
||||
|
||||
byte previous_key_tx_state = key_tx;
|
||||
key_tx = 0;
|
||||
randomSeed(millis());
|
||||
port_to_use->println(F("Callsign receive practice\r\n"));
|
||||
|
||||
while (port_to_use->available() > 0) { // clear out the buffer if anything is there
|
||||
incoming_char = port_to_use->read();
|
||||
}
|
||||
|
||||
//zzzzzz
|
||||
|
||||
while (loop1){
|
||||
|
||||
callsign = generate_callsign(callsign_mode) + " ";
|
||||
loop2 = 1;
|
||||
x = 0;
|
||||
|
||||
while ((loop2) && (x < (callsign.length()))) {
|
||||
|
||||
send_char(callsign[x],KEYER_NORMAL);
|
||||
x++;
|
||||
|
||||
if (port_to_use->available()){
|
||||
port_to_use->read();
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
x = 99;
|
||||
}
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
while ((paddle_pin_read(paddle_left) == LOW) || (paddle_pin_read(paddle_right) == LOW) || (analogbuttonread(0))) {
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
x = 99;
|
||||
}
|
||||
#else
|
||||
while ((paddle_pin_read(paddle_left) == LOW) || (paddle_pin_read(paddle_right) == LOW)) {
|
||||
loop1 = 0;
|
||||
loop2 = 0;
|
||||
x = 99;
|
||||
}
|
||||
#endif //FEATURE_COMMAND_BUTTONS
|
||||
|
||||
} //loop2
|
||||
|
||||
port_to_use->println(callsign);
|
||||
|
||||
} //loop1
|
||||
|
||||
key_tx = previous_key_tx_state;
|
||||
|
||||
}
|
||||
|
@ -13151,6 +13329,7 @@ void initialize_keyer_state(){
|
|||
configuration.length_wordspace = default_length_wordspace;
|
||||
configuration.weighting = default_weighting;
|
||||
configuration.wordsworth_wordspace = default_wordsworth_wordspace;
|
||||
configuration.wordsworth_repetition = default_wordsworth_repetition;
|
||||
configuration.wpm_farnsworth = initial_speed_wpm;
|
||||
|
||||
switch_to_tx_silent(1);
|
||||
|
|
|
@ -162,4 +162,16 @@
|
|||
#define WORDSWORTH_QSO_WORDS 6
|
||||
#define WORDSWORTH_MIXED 99
|
||||
|
||||
#define WORDSWORTH_WORDSPACE 1
|
||||
#define WORDSWORTH_WPM 2
|
||||
#define WORDSWORTH_REPETITION 3
|
||||
|
||||
#define CALLSIGN_INTERNATIONAL 0
|
||||
#define CALLSIGN_US 1
|
||||
#define CALLSIGN_EUROPEAN 2
|
||||
#define CALLSIGN_CANADA 3
|
||||
|
||||
#define PRACTICE_NON_INTERACTIVE 0
|
||||
#define PRACTICE_INTERACTIVE 1
|
||||
|
||||
#endif //keyer_h
|
|
@ -0,0 +1,414 @@
|
|||
|
||||
|
||||
const char canadian_prefix_1[] PROGMEM = "VE1";
|
||||
const char canadian_prefix_2[] PROGMEM = "VE2";
|
||||
const char canadian_prefix_3[] PROGMEM = "VE3";
|
||||
const char canadian_prefix_4[] PROGMEM = "VE4";
|
||||
const char canadian_prefix_5[] PROGMEM = "VE5";
|
||||
const char canadian_prefix_6[] PROGMEM = "VE6";
|
||||
const char canadian_prefix_7[] PROGMEM = "VE7";
|
||||
const char canadian_prefix_8[] PROGMEM = "VE8";
|
||||
const char canadian_prefix_9[] PROGMEM = "VE9";
|
||||
const char canadian_prefix_10[] PROGMEM = "VY0";
|
||||
const char canadian_prefix_11[] PROGMEM = "VY1";
|
||||
const char canadian_prefix_12[] PROGMEM = "VY2";
|
||||
const char canadian_prefix_13[] PROGMEM = "VO1";
|
||||
const char canadian_prefix_14[] PROGMEM = "VO2";
|
||||
const byte canadian_prefix_size = 14;
|
||||
const char* const canadian_prefix_table[] PROGMEM =
|
||||
{canadian_prefix_1,canadian_prefix_2,canadian_prefix_3,canadian_prefix_4,canadian_prefix_5,canadian_prefix_6,canadian_prefix_7,canadian_prefix_8,canadian_prefix_9,canadian_prefix_10,
|
||||
canadian_prefix_11,canadian_prefix_12,canadian_prefix_13,canadian_prefix_14};
|
||||
|
||||
// European callsign prefix table
|
||||
//
|
||||
// Note 2017-05-06: This is weird. If I put "LB" in the array, avrdude trips up with a timeout error when uploading to a Mega.
|
||||
// That's why LB isn't in this table
|
||||
|
||||
const char eu_prefix_1[] PROGMEM = "3A";
|
||||
const char eu_prefix_2[] PROGMEM = "4O";
|
||||
const char eu_prefix_3[] PROGMEM = "4U";
|
||||
const char eu_prefix_4[] PROGMEM = "9A";
|
||||
const char eu_prefix_5[] PROGMEM = "9H";
|
||||
const char eu_prefix_6[] PROGMEM = "C3";
|
||||
const char eu_prefix_7[] PROGMEM = "CT";
|
||||
const char eu_prefix_8[] PROGMEM = "CU";
|
||||
const char eu_prefix_9[] PROGMEM = "DA";
|
||||
const char eu_prefix_10[] PROGMEM = "DB";
|
||||
const char eu_prefix_11[] PROGMEM = "DC";
|
||||
const char eu_prefix_12[] PROGMEM = "DD";
|
||||
const char eu_prefix_13[] PROGMEM = "DE";
|
||||
const char eu_prefix_14[] PROGMEM = "DF";
|
||||
const char eu_prefix_15[] PROGMEM = "DG";
|
||||
const char eu_prefix_16[] PROGMEM = "DH";
|
||||
const char eu_prefix_17[] PROGMEM = "DI";
|
||||
const char eu_prefix_18[] PROGMEM = "DJ";
|
||||
const char eu_prefix_19[] PROGMEM = "DK";
|
||||
const char eu_prefix_20[] PROGMEM = "DL";
|
||||
const char eu_prefix_21[] PROGMEM = "EI";
|
||||
const char eu_prefix_22[] PROGMEM = "ER";
|
||||
const char eu_prefix_23[] PROGMEM = "ES";
|
||||
const char eu_prefix_24[] PROGMEM = "EU";
|
||||
const char eu_prefix_25[] PROGMEM = "EV";
|
||||
const char eu_prefix_26[] PROGMEM = "EW";
|
||||
const char eu_prefix_27[] PROGMEM = "F";
|
||||
const char eu_prefix_28[] PROGMEM = "G";
|
||||
const char eu_prefix_29[] PROGMEM = "GX";
|
||||
const char eu_prefix_30[] PROGMEM = "GD";
|
||||
const char eu_prefix_31[] PROGMEM = "GT";
|
||||
const char eu_prefix_32[] PROGMEM = "GI";
|
||||
const char eu_prefix_33[] PROGMEM = "GN";
|
||||
const char eu_prefix_34[] PROGMEM = "GJ";
|
||||
const char eu_prefix_35[] PROGMEM = "GH";
|
||||
const char eu_prefix_36[] PROGMEM = "GM";
|
||||
const char eu_prefix_37[] PROGMEM = "GS";
|
||||
const char eu_prefix_38[] PROGMEM = "GU";
|
||||
const char eu_prefix_39[] PROGMEM = "GP";
|
||||
const char eu_prefix_40[] PROGMEM = "GW";
|
||||
const char eu_prefix_41[] PROGMEM = "GC";
|
||||
const char eu_prefix_42[] PROGMEM = "HB";
|
||||
const char eu_prefix_43[] PROGMEM = "HV";
|
||||
const char eu_prefix_44[] PROGMEM = "I";
|
||||
const char eu_prefix_45[] PROGMEM = "IS";
|
||||
const char eu_prefix_46[] PROGMEM = "IM";
|
||||
const char eu_prefix_47[] PROGMEM = "JW";
|
||||
const char eu_prefix_48[] PROGMEM = "JX";
|
||||
const char eu_prefix_49[] PROGMEM = "LX";
|
||||
const char eu_prefix_50[] PROGMEM = "LY";
|
||||
const char eu_prefix_51[] PROGMEM = "LZ";
|
||||
const char eu_prefix_52[] PROGMEM = "OY";
|
||||
const char eu_prefix_53[] PROGMEM = "OZ";
|
||||
const char eu_prefix_54[] PROGMEM = "S5";
|
||||
const char eu_prefix_55[] PROGMEM = "YU";
|
||||
const char eu_prefix_56[] PROGMEM = "T7";
|
||||
const char eu_prefix_57[] PROGMEM = "T9";
|
||||
const char eu_prefix_58[] PROGMEM = "TF";
|
||||
const char eu_prefix_59[] PROGMEM = "TK";
|
||||
const char eu_prefix_60[] PROGMEM = "EM";
|
||||
const char eu_prefix_61[] PROGMEM = "EO";
|
||||
const char eu_prefix_62[] PROGMEM = "YL";
|
||||
const char eu_prefix_63[] PROGMEM = "YO";
|
||||
const char eu_prefix_64[] PROGMEM = "YT";
|
||||
const char eu_prefix_65[] PROGMEM = "YU";
|
||||
const char eu_prefix_66[] PROGMEM = "YP";
|
||||
const char eu_prefix_67[] PROGMEM = "YQ";
|
||||
const char eu_prefix_68[] PROGMEM = "YR";
|
||||
const char eu_prefix_69[] PROGMEM = "Z3";
|
||||
const char eu_prefix_70[] PROGMEM = "ZA";
|
||||
const char eu_prefix_71[] PROGMEM = "YZ";
|
||||
const char eu_prefix_72[] PROGMEM = "SA";
|
||||
const char eu_prefix_73[] PROGMEM = "SB";
|
||||
const char eu_prefix_74[] PROGMEM = "SC";
|
||||
const char eu_prefix_75[] PROGMEM = "SD";
|
||||
const char eu_prefix_76[] PROGMEM = "SE";
|
||||
const char eu_prefix_77[] PROGMEM = "SF";
|
||||
const char eu_prefix_78[] PROGMEM = "SG";
|
||||
const char eu_prefix_79[] PROGMEM = "SH";
|
||||
const char eu_prefix_80[] PROGMEM = "SI";
|
||||
const char eu_prefix_81[] PROGMEM = "SJ";
|
||||
const char eu_prefix_82[] PROGMEM = "SK";
|
||||
const char eu_prefix_83[] PROGMEM = "SL";
|
||||
const char eu_prefix_84[] PROGMEM = "SM";
|
||||
const char eu_prefix_85[] PROGMEM = "SN";
|
||||
const char eu_prefix_86[] PROGMEM = "SO";
|
||||
const char eu_prefix_87[] PROGMEM = "SP";
|
||||
const char eu_prefix_88[] PROGMEM = "SQ";
|
||||
const char eu_prefix_89[] PROGMEM = "SR";
|
||||
const char eu_prefix_90[] PROGMEM = "SS";
|
||||
const char eu_prefix_91[] PROGMEM = "ST";
|
||||
const char eu_prefix_92[] PROGMEM = "SU";
|
||||
const char eu_prefix_93[] PROGMEM = "SV";
|
||||
const char eu_prefix_94[] PROGMEM = "SW";
|
||||
const char eu_prefix_95[] PROGMEM = "SX";
|
||||
const char eu_prefix_96[] PROGMEM = "SY";
|
||||
const char eu_prefix_97[] PROGMEM = "SZ";
|
||||
const char eu_prefix_98[] PROGMEM = "OE";
|
||||
const char eu_prefix_99[] PROGMEM = "OF";
|
||||
const char eu_prefix_100[] PROGMEM = "OG";
|
||||
const char eu_prefix_101[] PROGMEM = "OH";
|
||||
const char eu_prefix_102[] PROGMEM = "OI";
|
||||
const char eu_prefix_103[] PROGMEM = "OJ";
|
||||
const char eu_prefix_104[] PROGMEM = "OK";
|
||||
const char eu_prefix_105[] PROGMEM = "OL";
|
||||
const char eu_prefix_106[] PROGMEM = "OM";
|
||||
const char eu_prefix_107[] PROGMEM = "ON";
|
||||
const char eu_prefix_108[] PROGMEM = "OO";
|
||||
const char eu_prefix_109[] PROGMEM = "OP";
|
||||
const char eu_prefix_110[] PROGMEM = "OQ";
|
||||
const char eu_prefix_111[] PROGMEM = "OR";
|
||||
const char eu_prefix_112[] PROGMEM = "OS";
|
||||
const char eu_prefix_113[] PROGMEM = "OT";
|
||||
const char eu_prefix_114[] PROGMEM = "PA";
|
||||
const char eu_prefix_115[] PROGMEM = "PB";
|
||||
const char eu_prefix_116[] PROGMEM = "PC";
|
||||
const char eu_prefix_117[] PROGMEM = "PD";
|
||||
const char eu_prefix_118[] PROGMEM = "PE";
|
||||
const char eu_prefix_119[] PROGMEM = "PF";
|
||||
const char eu_prefix_120[] PROGMEM = "PG";
|
||||
const char eu_prefix_121[] PROGMEM = "PH";
|
||||
const char eu_prefix_122[] PROGMEM = "PI";
|
||||
const char eu_prefix_123[] PROGMEM = "UA";
|
||||
const char eu_prefix_124[] PROGMEM = "UB";
|
||||
const char eu_prefix_125[] PROGMEM = "UC";
|
||||
const char eu_prefix_126[] PROGMEM = "UD";
|
||||
const char eu_prefix_127[] PROGMEM = "UE";
|
||||
const char eu_prefix_128[] PROGMEM = "UF";
|
||||
const char eu_prefix_129[] PROGMEM = "UG";
|
||||
const char eu_prefix_130[] PROGMEM = "UH";
|
||||
const char eu_prefix_131[] PROGMEM = "UI";
|
||||
const char eu_prefix_132[] PROGMEM = "RA";
|
||||
const char eu_prefix_133[] PROGMEM = "RB";
|
||||
const char eu_prefix_134[] PROGMEM = "RC";
|
||||
const char eu_prefix_135[] PROGMEM = "RD";
|
||||
const char eu_prefix_136[] PROGMEM = "RE";
|
||||
const char eu_prefix_137[] PROGMEM = "RF";
|
||||
const char eu_prefix_138[] PROGMEM = "RG";
|
||||
const char eu_prefix_139[] PROGMEM = "RH";
|
||||
const char eu_prefix_140[] PROGMEM = "RI";
|
||||
const char eu_prefix_141[] PROGMEM = "RJ";
|
||||
const char eu_prefix_142[] PROGMEM = "RK";
|
||||
const char eu_prefix_143[] PROGMEM = "RL";
|
||||
const char eu_prefix_144[] PROGMEM = "RM";
|
||||
const char eu_prefix_145[] PROGMEM = "RN";
|
||||
const char eu_prefix_146[] PROGMEM = "RO";
|
||||
const char eu_prefix_147[] PROGMEM = "RP";
|
||||
const char eu_prefix_148[] PROGMEM = "RQ";
|
||||
const char eu_prefix_149[] PROGMEM = "RR";
|
||||
const char eu_prefix_150[] PROGMEM = "RS";
|
||||
const char eu_prefix_151[] PROGMEM = "RT";
|
||||
const char eu_prefix_152[] PROGMEM = "RU";
|
||||
const char eu_prefix_153[] PROGMEM = "RV";
|
||||
const char eu_prefix_154[] PROGMEM = "RW";
|
||||
const char eu_prefix_155[] PROGMEM = "RX";
|
||||
const char eu_prefix_156[] PROGMEM = "RY";
|
||||
const char eu_prefix_157[] PROGMEM = "RZ";
|
||||
const char eu_prefix_158[] PROGMEM = "UR";
|
||||
const char eu_prefix_159[] PROGMEM = "US";
|
||||
const char eu_prefix_160[] PROGMEM = "UT";
|
||||
const char eu_prefix_161[] PROGMEM = "UU";
|
||||
const char eu_prefix_162[] PROGMEM = "UV";
|
||||
const char eu_prefix_163[] PROGMEM = "UW";
|
||||
const char eu_prefix_164[] PROGMEM = "UX";
|
||||
const char eu_prefix_165[] PROGMEM = "UY";
|
||||
const char eu_prefix_166[] PROGMEM = "UZ";
|
||||
const char eu_prefix_167[] PROGMEM = "EA";
|
||||
const char eu_prefix_168[] PROGMEM = "EB";
|
||||
const char eu_prefix_169[] PROGMEM = "EC";
|
||||
const char eu_prefix_170[] PROGMEM = "ED";
|
||||
const char eu_prefix_171[] PROGMEM = "EE";
|
||||
const char eu_prefix_172[] PROGMEM = "EF";
|
||||
const char eu_prefix_173[] PROGMEM = "EG";
|
||||
const char eu_prefix_174[] PROGMEM = "EH";
|
||||
const char eu_prefix_175[] PROGMEM = "EJ";
|
||||
const char eu_prefix_176[] PROGMEM = "HA";
|
||||
const char eu_prefix_177[] PROGMEM = "HG";
|
||||
const char eu_prefix_178[] PROGMEM = "LA";
|
||||
const char eu_prefix_179[] PROGMEM = "LC";
|
||||
const char eu_prefix_180[] PROGMEM = "LD";
|
||||
const char eu_prefix_181[] PROGMEM = "LE";
|
||||
const char eu_prefix_182[] PROGMEM = "LF";
|
||||
const char eu_prefix_183[] PROGMEM = "LG";
|
||||
const char eu_prefix_184[] PROGMEM = "LH";
|
||||
const char eu_prefix_185[] PROGMEM = "LI";
|
||||
const char eu_prefix_186[] PROGMEM = "LJ";
|
||||
const char eu_prefix_187[] PROGMEM = "LK";
|
||||
const char eu_prefix_188[] PROGMEM = "LL";
|
||||
const char eu_prefix_189[] PROGMEM = "LM";
|
||||
const char eu_prefix_190[] PROGMEM = "LN";
|
||||
/*const char eu_prefix_191[] PROGMEM = "LB"; see note above about "LB"*/
|
||||
const byte eu_prefix_size = 190;
|
||||
const char* const eu_prefix_table[] PROGMEM = {
|
||||
eu_prefix_1,
|
||||
eu_prefix_2,
|
||||
eu_prefix_3,
|
||||
eu_prefix_4,
|
||||
eu_prefix_5,
|
||||
eu_prefix_6,
|
||||
eu_prefix_7,
|
||||
eu_prefix_8,
|
||||
eu_prefix_9,
|
||||
eu_prefix_10,
|
||||
eu_prefix_11,
|
||||
eu_prefix_12,
|
||||
eu_prefix_13,
|
||||
eu_prefix_14,
|
||||
eu_prefix_15,
|
||||
eu_prefix_16,
|
||||
eu_prefix_17,
|
||||
eu_prefix_18,
|
||||
eu_prefix_19,
|
||||
eu_prefix_20,
|
||||
eu_prefix_21,
|
||||
eu_prefix_22,
|
||||
eu_prefix_23,
|
||||
eu_prefix_24,
|
||||
eu_prefix_25,
|
||||
eu_prefix_26,
|
||||
eu_prefix_27,
|
||||
eu_prefix_28,
|
||||
eu_prefix_29,
|
||||
eu_prefix_30,
|
||||
eu_prefix_31,
|
||||
eu_prefix_32,
|
||||
eu_prefix_33,
|
||||
eu_prefix_34,
|
||||
eu_prefix_35,
|
||||
eu_prefix_36,
|
||||
eu_prefix_37,
|
||||
eu_prefix_38,
|
||||
eu_prefix_39,
|
||||
eu_prefix_40,
|
||||
eu_prefix_41,
|
||||
eu_prefix_42,
|
||||
eu_prefix_43,
|
||||
eu_prefix_44,
|
||||
eu_prefix_45,
|
||||
eu_prefix_46,
|
||||
eu_prefix_47,
|
||||
eu_prefix_48,
|
||||
eu_prefix_49,
|
||||
eu_prefix_50,
|
||||
eu_prefix_51,
|
||||
eu_prefix_52,
|
||||
eu_prefix_53,
|
||||
eu_prefix_54,
|
||||
eu_prefix_55,
|
||||
eu_prefix_56,
|
||||
eu_prefix_57,
|
||||
eu_prefix_58,
|
||||
eu_prefix_59,
|
||||
eu_prefix_60,
|
||||
eu_prefix_61,
|
||||
eu_prefix_62,
|
||||
eu_prefix_63,
|
||||
eu_prefix_64,
|
||||
eu_prefix_65,
|
||||
eu_prefix_66,
|
||||
eu_prefix_67,
|
||||
eu_prefix_68,
|
||||
eu_prefix_69,
|
||||
eu_prefix_70,
|
||||
eu_prefix_71,
|
||||
eu_prefix_72,
|
||||
eu_prefix_73,
|
||||
eu_prefix_74,
|
||||
eu_prefix_75,
|
||||
eu_prefix_76,
|
||||
eu_prefix_77,
|
||||
eu_prefix_78,
|
||||
eu_prefix_79,
|
||||
eu_prefix_80,
|
||||
eu_prefix_81,
|
||||
eu_prefix_82,
|
||||
eu_prefix_83,
|
||||
eu_prefix_84,
|
||||
eu_prefix_85,
|
||||
eu_prefix_86,
|
||||
eu_prefix_87,
|
||||
eu_prefix_88,
|
||||
eu_prefix_89,
|
||||
eu_prefix_90,
|
||||
eu_prefix_91,
|
||||
eu_prefix_92,
|
||||
eu_prefix_93,
|
||||
eu_prefix_94,
|
||||
eu_prefix_95,
|
||||
eu_prefix_96,
|
||||
eu_prefix_97,
|
||||
eu_prefix_98,
|
||||
eu_prefix_99,
|
||||
eu_prefix_100,
|
||||
eu_prefix_101,
|
||||
eu_prefix_102,
|
||||
eu_prefix_103,
|
||||
eu_prefix_104,
|
||||
eu_prefix_105,
|
||||
eu_prefix_106,
|
||||
eu_prefix_107,
|
||||
eu_prefix_108,
|
||||
eu_prefix_109,
|
||||
eu_prefix_110,
|
||||
eu_prefix_111,
|
||||
eu_prefix_112,
|
||||
eu_prefix_113,
|
||||
eu_prefix_114,
|
||||
eu_prefix_115,
|
||||
eu_prefix_116,
|
||||
eu_prefix_117,
|
||||
eu_prefix_118,
|
||||
eu_prefix_119,
|
||||
eu_prefix_120,
|
||||
eu_prefix_121,
|
||||
eu_prefix_122,
|
||||
eu_prefix_123,
|
||||
eu_prefix_124,
|
||||
eu_prefix_125,
|
||||
eu_prefix_126,
|
||||
eu_prefix_127,
|
||||
eu_prefix_128,
|
||||
eu_prefix_129,
|
||||
eu_prefix_130,
|
||||
eu_prefix_131,
|
||||
eu_prefix_132,
|
||||
eu_prefix_133,
|
||||
eu_prefix_134,
|
||||
eu_prefix_135,
|
||||
eu_prefix_136,
|
||||
eu_prefix_137,
|
||||
eu_prefix_138,
|
||||
eu_prefix_139,
|
||||
eu_prefix_140,
|
||||
eu_prefix_141,
|
||||
eu_prefix_142,
|
||||
eu_prefix_143,
|
||||
eu_prefix_144,
|
||||
eu_prefix_145,
|
||||
eu_prefix_146,
|
||||
eu_prefix_147,
|
||||
eu_prefix_148,
|
||||
eu_prefix_149,
|
||||
eu_prefix_150,
|
||||
eu_prefix_151,
|
||||
eu_prefix_152,
|
||||
eu_prefix_153,
|
||||
eu_prefix_154,
|
||||
eu_prefix_155,
|
||||
eu_prefix_156,
|
||||
eu_prefix_157,
|
||||
eu_prefix_158,
|
||||
eu_prefix_159,
|
||||
eu_prefix_160,
|
||||
eu_prefix_161,
|
||||
eu_prefix_162,
|
||||
eu_prefix_163,
|
||||
eu_prefix_164,
|
||||
eu_prefix_165,
|
||||
eu_prefix_166,
|
||||
eu_prefix_167,
|
||||
eu_prefix_168,
|
||||
eu_prefix_169,
|
||||
eu_prefix_170,
|
||||
eu_prefix_171,
|
||||
eu_prefix_172,
|
||||
eu_prefix_173,
|
||||
eu_prefix_174,
|
||||
eu_prefix_175,
|
||||
eu_prefix_176,
|
||||
eu_prefix_177,
|
||||
eu_prefix_178,
|
||||
eu_prefix_179,
|
||||
eu_prefix_180,
|
||||
eu_prefix_181,
|
||||
eu_prefix_182,
|
||||
eu_prefix_183,
|
||||
eu_prefix_184,
|
||||
eu_prefix_185,
|
||||
eu_prefix_186,
|
||||
eu_prefix_187,
|
||||
eu_prefix_188,
|
||||
eu_prefix_189,
|
||||
eu_prefix_190/*,
|
||||
eu_prefix_191*/
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -43,5 +43,7 @@
|
|||
// #define DEBUG_FORCE_RESET
|
||||
// #define DEBUG_WINKEY_DISABLE_LEAD_IN_TIME_SETTING
|
||||
// #define DEBUG_KEYPAD_SERIAL
|
||||
// #define DEBUG_CALLSIGN_PRACTICE_SHOW_CALLSIGN
|
||||
// #define DEBUG_WORDSWORTH
|
||||
|
||||
// #define OPTION_WINKEY_IGNORE_FIRST_STATUS_REQUEST
|
||||
|
|
|
@ -93,4 +93,5 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
||||
|
|
|
@ -110,3 +110,4 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
|
|
@ -78,3 +78,4 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
|
|
@ -76,3 +76,4 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
|
|
@ -80,4 +80,5 @@
|
|||
//#define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT
|
||||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
|
@ -106,6 +106,7 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
||||
// #define FEATURE_COMPETITION_COMPRESSION_DETECTION //(Experimental)
|
||||
|
||||
|
|
|
@ -60,3 +60,4 @@
|
|||
|
||||
// #define OPTION_WORDSWORTH_CZECH
|
||||
// #define OPTION_WORDSWORTH_DEUTSCH
|
||||
// #define OPTION_WORDSWORTH_NORSK
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
#define analog_buttons_r1 10
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 0
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 4
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#define potentiometer_check_interval_ms 150
|
||||
#define default_paddle_interruption_quiet_time_element_lengths 7
|
||||
#define default_wordsworth_wordspace 6
|
||||
#define default_wordsworth_repetition 1
|
||||
|
||||
#ifdef FEATURE_COMMAND_BUTTONS
|
||||
#define analog_buttons_number_of_buttons 1
|
||||
|
|
|
@ -0,0 +1,248 @@
|
|||
// keyer_training_text_norsk.h
|
||||
// Norwegian word list contributed by Karl, LA3FY
|
||||
// English word list originally from gen_cw_words.pl - a program that generates words in a random order,
|
||||
// intended to be used during morse code practice.
|
||||
// Original gen_cw_words.pl code Copyright (C) 2015,2017 Andy Stewart (KB1OIQ)
|
||||
// https://sourceforge.net/projects/kb1oiq-k1ig-wordsworth/
|
||||
|
||||
// two letter word array
|
||||
const char s2_1[] PROGMEM = "og";
|
||||
const char s2_2[] PROGMEM = "på";
|
||||
const char s2_3[] PROGMEM = "gå";
|
||||
const char s2_4[] PROGMEM = "er";
|
||||
const char s2_5[] PROGMEM = "en";
|
||||
const char s2_6[] PROGMEM = "av";
|
||||
const char s2_7[] PROGMEM = "at";
|
||||
const char s2_8[] PROGMEM = "de";
|
||||
const char s2_9[] PROGMEM = "et";
|
||||
const char s2_10[] PROGMEM = "så";
|
||||
const char s2_11[] PROGMEM = "vi";
|
||||
const char s2_12[] PROGMEM = "du";
|
||||
const char s2_13[] PROGMEM = "da";
|
||||
const char s2_14[] PROGMEM = "ut";
|
||||
const char s2_15[] PROGMEM = "sa";
|
||||
const char s2_16[] PROGMEM = "nå";
|
||||
const char s2_17[] PROGMEM = "ny";
|
||||
const char s2_18[] PROGMEM = "ha";
|
||||
const char s2_19[] PROGMEM = "år";
|
||||
const char s2_20[] PROGMEM = "få";
|
||||
const char s2_21[] PROGMEM = "to";
|
||||
const char s2_22[] PROGMEM = "se";
|
||||
const byte s2_size = 22;
|
||||
const char* const s2_table[] PROGMEM =
|
||||
{s2_1,s2_2,s2_3,s2_4,s2_5,s2_6,s2_7,s2_8,s2_9,s2_10,
|
||||
s2_11,s2_12,s2_13,s2_14,s2_15,s2_16,s2_17,s2_18,s2_19,s2_20,
|
||||
s2_21,s2_22};
|
||||
|
||||
// three letter word array
|
||||
const char s3_1[] PROGMEM = "det";
|
||||
const char s3_2[] PROGMEM = "som";
|
||||
const char s3_3[] PROGMEM = "han";
|
||||
const char s3_4[] PROGMEM = "for";
|
||||
const char s3_5[] PROGMEM = "med";
|
||||
const char s3_6[] PROGMEM = "var";
|
||||
const char s3_7[] PROGMEM = "den";
|
||||
const char s3_8[] PROGMEM = "har";
|
||||
const char s3_9[] PROGMEM = "jeg";
|
||||
const char s3_10[] PROGMEM = "men";
|
||||
const char s3_11[] PROGMEM = "seg";
|
||||
const char s3_12[] PROGMEM = "hun";
|
||||
const char s3_13[] PROGMEM = "vår";
|
||||
const char s3_14[] PROGMEM = "fra";
|
||||
const char s3_15[] PROGMEM = "kan";
|
||||
const char s3_16[] PROGMEM = "ble";
|
||||
const char s3_17[] PROGMEM = "vil";
|
||||
const char s3_18[] PROGMEM = "ham";
|
||||
const char s3_19[] PROGMEM = "ved";
|
||||
const char s3_20[] PROGMEM = "noe";
|
||||
const char s3_21[] PROGMEM = "meg";
|
||||
const char s3_22[] PROGMEM = "mot";
|
||||
const char s3_23[] PROGMEM = "opp";
|
||||
const char s3_24[] PROGMEM = "der";
|
||||
const char s3_25[] PROGMEM = "når";
|
||||
const char s3_26[] PROGMEM = "inn";
|
||||
const char s3_27[] PROGMEM = "dem";
|
||||
const char s3_28[] PROGMEM = "sin";
|
||||
const char s3_29[] PROGMEM = "kom";
|
||||
const char s3_30[] PROGMEM = "enn";
|
||||
const char s3_31[] PROGMEM = "bli";
|
||||
const char s3_32[] PROGMEM = "før";
|
||||
const char s3_33[] PROGMEM = "går";
|
||||
const char s3_34[] PROGMEM = "her";
|
||||
const char s3_35[] PROGMEM = "mer";
|
||||
const char s3_36[] PROGMEM = "hva";
|
||||
const char s3_37[] PROGMEM = "alt";
|
||||
const char s3_38[] PROGMEM = "oss";
|
||||
const byte s3_size = 38;
|
||||
const char* const s3_table[] PROGMEM =
|
||||
{s3_1,s3_2,s3_3,s3_4,s3_5,s3_6,s3_7,s3_8,s3_9,s3_10,
|
||||
s3_11,s3_12,s3_13,s3_14,s3_15,s3_16,s3_17,s3_18,s3_19,s3_20,
|
||||
s3_21,s3_22,s3_23,s3_24,s3_25,s3_26,s3_27,s3_28,s3_29,s3_30,
|
||||
s3_31,s3_32,s3_33,s3_34,s3_35,s3_36,s3_37,s3_38};
|
||||
|
||||
// four letter word array
|
||||
const char s4_1[] PROGMEM = "ikke";
|
||||
const char s4_2[] PROGMEM = "over";
|
||||
const char s4_3[] PROGMEM = "også";
|
||||
const char s4_4[] PROGMEM = "bare";
|
||||
const char s4_5[] PROGMEM = "være";
|
||||
const char s4_6[] PROGMEM = "blir";
|
||||
const char s4_7[] PROGMEM = "alle";
|
||||
const char s4_8[] PROGMEM = "noen";
|
||||
const char s4_9[] PROGMEM = "selv";
|
||||
const char s4_10[] PROGMEM = "sier";
|
||||
const char s4_11[] PROGMEM = "hans";
|
||||
const char s4_12[] PROGMEM = "gikk";
|
||||
const char s4_13[] PROGMEM = "fikk";
|
||||
const char s4_14[] PROGMEM = "dash";
|
||||
const char s4_15[] PROGMEM = "hvor";
|
||||
const char s4_16[] PROGMEM = "hele";
|
||||
const byte s4_size = 16;
|
||||
const char* const s4_table[] PROGMEM =
|
||||
{s4_1,s4_2,s4_3,s4_4,s4_5,s4_6,s4_7,s4_8,s4_9,s4_10,
|
||||
s4_11,s4_12,s4_13,s4_14,s4_15,s4_16};
|
||||
|
||||
// common names
|
||||
|
||||
const char name_1[] PROGMEM = "Jan";
|
||||
const char name_2[] PROGMEM = "Per";
|
||||
const char name_3[] PROGMEM = "Bjørn";
|
||||
const char name_4[] PROGMEM = "Ole";
|
||||
const char name_5[] PROGMEM = "Kjell";
|
||||
const char name_6[] PROGMEM = "Lars";
|
||||
const char name_7[] PROGMEM = "Arne";
|
||||
const char name_8[] PROGMEM = "Knut";
|
||||
const char name_9[] PROGMEM = "Svein";
|
||||
const char name_10[] PROGMEM = "Hans";
|
||||
const char name_11[] PROGMEM = "Odd";
|
||||
const char name_12[] PROGMEM = "Tor";
|
||||
const char name_13[] PROGMEM = "Geir";
|
||||
const char name_14[] PROGMEM = "Terje";
|
||||
const char name_15[] PROGMEM = "Thomas";
|
||||
const char name_16[] PROGMEM = "Morten";
|
||||
const char name_17[] PROGMEM = "John";
|
||||
const char name_18[] PROGMEM = "Erik";
|
||||
const char name_19[] PROGMEM = "Anders";
|
||||
const char name_20[] PROGMEM = "Rune";
|
||||
const char name_21[] PROGMEM = "Martin";
|
||||
const char name_22[] PROGMEM = "Andreas";
|
||||
const char name_23[] PROGMEM = "Trond";
|
||||
const char name_24[] PROGMEM = "Tore";
|
||||
const char name_25[] PROGMEM = "Harald";
|
||||
const char name_26[] PROGMEM = "Olav";
|
||||
const char name_27[] PROGMEM = "Gunnar";
|
||||
const char name_28[] PROGMEM = "Jon";
|
||||
const char name_29[] PROGMEM = "Rolf";
|
||||
const char name_30[] PROGMEM = "Leif";
|
||||
const char name_31[] PROGMEM = "Tom";
|
||||
const char name_32[] PROGMEM = "Stian";
|
||||
const char name_33[] PROGMEM = "Kristian";
|
||||
const char name_34[] PROGMEM = "Nils";
|
||||
const char name_35[] PROGMEM = "Øyvind";
|
||||
const char name_36[] PROGMEM = "Helge";
|
||||
const char name_37[] PROGMEM = "Espen";
|
||||
const char name_38[] PROGMEM = "Einar";
|
||||
const char name_39[] PROGMEM = "Marius";
|
||||
const char name_40[] PROGMEM = "Kåre";
|
||||
const char name_41[] PROGMEM = "Daniel";
|
||||
const char name_42[] PROGMEM = "Magnus";
|
||||
const char name_43[] PROGMEM = "Fredrik";
|
||||
const char name_44[] PROGMEM = "Christian";
|
||||
const char name_45[] PROGMEM = "Steinar";
|
||||
const char name_46[] PROGMEM = "Eirik";
|
||||
const char name_47[] PROGMEM = "Håkon";
|
||||
const char name_48[] PROGMEM = "Øystein";
|
||||
const char name_49[] PROGMEM = "Henrik";
|
||||
const char name_50[] PROGMEM = "Karl";
|
||||
const byte name_size = 50;
|
||||
const char* const name_table[] PROGMEM =
|
||||
{name_1,name_2,name_3,name_4,name_5,name_6,name_7,name_8,name_9,name_10,
|
||||
name_11,name_12,name_13,name_14,name_15,name_16,name_17,name_18,name_19,name_20,
|
||||
name_21,name_22,name_23,name_24,name_25,name_26,name_27,name_28,name_29,name_30,
|
||||
name_31,name_32,name_33,name_34,name_35,name_36,name_37,name_38,name_39,name_40,
|
||||
name_41,name_42,name_43,name_44,name_45,name_46,name_47,name_48,name_49,name_50};
|
||||
|
||||
|
||||
// CW QSO word array
|
||||
const char qso_1[] PROGMEM = "QRL?";
|
||||
const char qso_2[] PROGMEM = "QRM";
|
||||
const char qso_3[] PROGMEM = "QRN";
|
||||
const char qso_4[] PROGMEM = "QRS";
|
||||
const char qso_5[] PROGMEM = "QRT";
|
||||
const char qso_6[] PROGMEM = "QRZ";
|
||||
const char qso_7[] PROGMEM = "QSL";
|
||||
const char qso_8[] PROGMEM = "QSO";
|
||||
const char qso_9[] PROGMEM = "QSY";
|
||||
const char qso_10[] PROGMEM = "QTH";
|
||||
const char qso_11[] PROGMEM = "QRX";
|
||||
const char qso_12[] PROGMEM = "ABT";
|
||||
const char qso_13[] PROGMEM = "AGE";
|
||||
const char qso_14[] PROGMEM = "ANT";
|
||||
const char qso_15[] PROGMEM = "BEAM";
|
||||
const char qso_16[] PROGMEM = "BK";
|
||||
const char qso_17[] PROGMEM = "QRP";
|
||||
const char qso_18[] PROGMEM = "AGN";
|
||||
const char qso_19[] PROGMEM = "C";
|
||||
const char qso_20[] PROGMEM = "CL";
|
||||
const char qso_21[] PROGMEM = "CPY";
|
||||
const char qso_22[] PROGMEM = "CQ";
|
||||
const char qso_23[] PROGMEM = "CUL";
|
||||
const char qso_24[] PROGMEM = "DE";
|
||||
const char qso_25[] PROGMEM = "DX";
|
||||
const char qso_26[] PROGMEM = "ES";
|
||||
const char qso_27[] PROGMEM = "EL";
|
||||
const char qso_28[] PROGMEM = "FB";
|
||||
const char qso_29[] PROGMEM = "HI";
|
||||
const char qso_30[] PROGMEM = "HW?";
|
||||
const char qso_31[] PROGMEM = "HR";
|
||||
const char qso_32[] PROGMEM = "K";
|
||||
const char qso_33[] PROGMEM = "=";
|
||||
const char qso_34[] PROGMEM = "<";
|
||||
const char qso_35[] PROGMEM = "%";
|
||||
const char qso_36[] PROGMEM = ">";
|
||||
const char qso_37[] PROGMEM = "LID";
|
||||
const char qso_38[] PROGMEM = "LOOP";
|
||||
const char qso_39[] PROGMEM = "NAME";
|
||||
const char qso_40[] PROGMEM = "OM";
|
||||
const char qso_41[] PROGMEM = "OP";
|
||||
const char qso_42[] PROGMEM = "PKT";
|
||||
const char qso_43[] PROGMEM = "PSE";
|
||||
const char qso_44[] PROGMEM = "R";
|
||||
const char qso_45[] PROGMEM = "RPT";
|
||||
const char qso_46[] PROGMEM = "RST";
|
||||
const char qso_47[] PROGMEM = "RIG";
|
||||
const char qso_48[] PROGMEM = "TEMP";
|
||||
const char qso_49[] PROGMEM = "TEST";
|
||||
const char qso_50[] PROGMEM = "TU";
|
||||
const char qso_51[] PROGMEM = "TKS";
|
||||
const char qso_52[] PROGMEM = "TNX";
|
||||
const char qso_53[] PROGMEM = "VERT";
|
||||
const char qso_54[] PROGMEM = "WATT";
|
||||
const char qso_55[] PROGMEM = "WX";
|
||||
const char qso_56[] PROGMEM = "YAGI";
|
||||
const char qso_57[] PROGMEM = "YRS";
|
||||
const char qso_58[] PROGMEM = "73";
|
||||
const char qso_59[] PROGMEM = "88";
|
||||
const char qso_60[] PROGMEM = "?";
|
||||
const char qso_61[] PROGMEM = "/";
|
||||
const char qso_62[] PROGMEM = "VY";
|
||||
const char qso_63[] PROGMEM = "YL";
|
||||
const char qso_64[] PROGMEM = "XYL";
|
||||
const char qso_65[] PROGMEM = "MY";
|
||||
const char qso_66[] PROGMEM = "UR";
|
||||
const char qso_67[] PROGMEM = "IS";
|
||||
const char qso_68[] PROGMEM = "QSB";
|
||||
const char qso_69[] PROGMEM = "QRQ";
|
||||
const char qso_70[] PROGMEM = "HVE";
|
||||
const char qso_71[] PROGMEM = "HPE";
|
||||
const char qso_72[] PROGMEM = "BEST";
|
||||
const byte qso_size = 72;
|
||||
const char* const qso_table[] PROGMEM =
|
||||
{qso_1,qso_2,qso_3,qso_4,qso_5,qso_6,qso_7,qso_8,qso_9,qso_10,qso_11,qso_12,qso_13,qso_14,qso_15,qso_16,qso_17,qso_18,qso_19,qso_20,
|
||||
qso_21,qso_22,qso_23,qso_24,qso_25,qso_26,qso_27,qso_28,qso_29,qso_30,qso_31,qso_32,qso_33,qso_34,qso_35,qso_36,qso_37,qso_38,qso_39,qso_40,
|
||||
qso_41,qso_42,qso_43,qso_44,qso_45,qso_46,qso_47,qso_48,qso_49,qso_50,qso_51,qso_52,qso_53,qso_54,qso_55,qso_56,qso_57,qso_58,qso_59,qso_60,
|
||||
qso_61,qso_62,qso_63,qso_64,qso_65,qso_66,qso_67,qso_68,qso_69,qso_70,qso_71,qso_72};
|
||||
|
||||
|
||||
|
||||
|
Ładowanie…
Reference in New Issue