From 3abcade2a6f8bb377e1910cae2c5fddb8f17e42a Mon Sep 17 00:00:00 2001 From: VK2EFL <42091734+VK2EFL@users.noreply.github.com> Date: Sun, 8 Dec 2019 03:16:23 +1100 Subject: [PATCH 1/5] Custom startup text (#78) * Update k3ng_keyer.ino * Update keyer_features_and_options.h * Update keyer_settings.h * Update k3ng_keyer.ino --- k3ng_keyer/k3ng_keyer.ino | 10 +++++++++- k3ng_keyer/keyer_features_and_options.h | 3 ++- k3ng_keyer/keyer_settings.h | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/k3ng_keyer/k3ng_keyer.ino b/k3ng_keyer/k3ng_keyer.ino index 78ef702..c5acb4e 100644 --- a/k3ng_keyer/k3ng_keyer.ino +++ b/k3ng_keyer/k3ng_keyer.ino @@ -17151,7 +17151,15 @@ void initialize_display(){ if (LCD_COLUMNS < 9){ lcd_center_print_timed("K3NGKeyr",0,4000); } else { - lcd_center_print_timed("K3NG Keyer",0,4000); + #ifdef OPTION_PERSONALIZED_STARTUP_SCREEN + if (LCD_ROWS == 2) { + #ifdef OPTION_DO_NOT_SAY_HI // if we wish to display the custom field on the second line, we can't say 'hi' + lcd_center_print_timed(custom_startup_field, 1, 4000); // display the custom field on the second line of the display, maximum field length is the number of columns + #endif // OPTION_DO_NOT_SAY_HI + } + else if (LCD_ROWS > 2) lcd_center_print_timed(custom_startup_field, 2, 4000); // display the custom field on the third line of the display, maximum field length is the number of columns + #endif // OPTION_PERSONALIZED_STARTUP_SCREEN + if (LCD_ROWS > 3) lcd_center_print_timed("V: " + String(CODE_VERSION), 3, 4000); // display the code version on the fourth line of the display } #endif //FEATURE_DISPLAY diff --git a/k3ng_keyer/keyer_features_and_options.h b/k3ng_keyer/keyer_features_and_options.h index 07a1ede..305e620 100644 --- a/k3ng_keyer/keyer_features_and_options.h +++ b/k3ng_keyer/keyer_features_and_options.h @@ -113,5 +113,6 @@ // #define OPTION_EXCLUDE_MILL_MODE -//#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_settings.h b/k3ng_keyer/keyer_settings.h index 5f5e310..fa28141 100644 --- a/k3ng_keyer/keyer_settings.h +++ b/k3ng_keyer/keyer_settings.h @@ -274,3 +274,5 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field " " // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display From b033da29f0bbb8a6237d1845ae7bad22afa8dbc0 Mon Sep 17 00:00:00 2001 From: git1k2 <48857344+git1k2@users.noreply.github.com> Date: Sat, 7 Dec 2019 17:17:25 +0100 Subject: [PATCH 2/5] Fk 11 support (#80) * Initial Funtronics FK-11 support * Initial Funtronics FK-11 support * Initial Funtronics FK-11 support * More specific location * Add FaBo_212_LCD_PCF8574 library and cleanup * Fix USB_Host_Shield directory --- k3ng_keyer/k3ng_keyer.ino | 5 + k3ng_keyer/keyer_features_and_options_fk_11.h | 118 ++++++++ k3ng_keyer/keyer_hardware.h | 14 + k3ng_keyer/keyer_pin_settings_fk_11.h | 164 +++++++++++ k3ng_keyer/keyer_settings_fk_11.h | 278 ++++++++++++++++++ 5 files changed, 579 insertions(+) create mode 100644 k3ng_keyer/keyer_features_and_options_fk_11.h create mode 100644 k3ng_keyer/keyer_pin_settings_fk_11.h create mode 100644 k3ng_keyer/keyer_settings_fk_11.h diff --git a/k3ng_keyer/k3ng_keyer.ino b/k3ng_keyer/k3ng_keyer.ino index c5acb4e..e8d76c6 100644 --- a/k3ng_keyer/k3ng_keyer.ino +++ b/k3ng_keyer/k3ng_keyer.ino @@ -1173,6 +1173,8 @@ Recent Update History #include "keyer_features_and_options_tinykeyer.h" #elif defined(HARDWARE_FK_10) #include "keyer_features_and_options_fk_10.h" +#elif defined(HARDWARE_FK_11) + #include "keyer_features_and_options_fk_11.h" #elif defined(HARDWARE_MAPLE_MINI)//sp5iou 20180328 #include "keyer_features_and_options_maple_mini.h" #elif defined(HARDWARE_GENERIC_STM32F103C)//sp5iou 20180329 @@ -1233,6 +1235,9 @@ Recent Update History #elif defined(HARDWARE_FK_10) #include "keyer_pin_settings_fk_10.h" #include "keyer_settings_fk_10.h" +#elif defined(HARDWARE_FK_11) + #include "keyer_pin_settings_fk_11.h" + #include "keyer_settings_fk_11.h" #elif defined(HARDWARE_MAPLE_MINI) #include "keyer_pin_settings_maple_mini.h" #include "keyer_settings_maple_mini.h" diff --git a/k3ng_keyer/keyer_features_and_options_fk_11.h b/k3ng_keyer/keyer_features_and_options_fk_11.h new file mode 100644 index 0000000..59a2ddb --- /dev/null +++ b/k3ng_keyer/keyer_features_and_options_fk_11.h @@ -0,0 +1,118 @@ +// compile time features and options - comment or uncomment to add or delete features +// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior + +// Funtronics FK-11 + +#define FEATURE_COMMAND_BUTTONS +#define FEATURE_COMMAND_LINE_INTERFACE // Command Line Interface functionality +#define FEATURE_MEMORIES // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this +#define FEATURE_MEMORY_MACROS +#define FEATURE_WINKEY_EMULATION // disabling Automatic Software Reset is highly recommended (see documentation) +#define FEATURE_BEACON +#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE +// #define FEATURE_POTENTIOMETER // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes +// #define FEATURE_SIDETONE_SWITCH // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h). +#define FEATURE_SERIAL_HELP +#define FEATURE_HELL +// #define FEATURE_PS2_KEYBOARD // Use a PS2 keyboard to send code - Change keyboard layout (non-US) in K3NG_PS2Keyboard.h. Additional options below. +#define FEATURE_USB_KEYBOARD // Use a USB keyboard to send code - Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines) +// #define FEATURE_CW_COMPUTER_KEYBOARD // Have an Arduino Due or Leonardo act as a USB HID (Human Interface Device) keyboard and use the paddle to "type" characters on the computer -- uncomment this line in ino file: #include +#define FEATURE_DEAD_OP_WATCHDOG +#define FEATURE_AUTOSPACE +#define FEATURE_FARNSWORTH +// #define FEATURE_DL2SBA_BANKSWITCH // Switch memory banks feature as described here: http://dl2sba.com/index.php?option=com_content&view=article&id=131:nanokeyer&catid=15:shack&Itemid=27#english +// #define FEATURE_LCD_4BIT // classic LCD disidefplay using 4 I/O lines +// #define FEATURE_LCD_8BIT // classic LCD display using 8 I/O lines +// #define FEATURE_LCD_ADAFRUIT_I2C // Adafruit I2C LCD display using MCP23017 at addr 0x20 +// #define FEATURE_LCD_ADAFRUIT_BACKPACK // Adafruit I2C LCD Backup using MCP23008 (courtesy Josiah Ritchie, KE0BLL) +// #define FEATURE_LCD_YDv1 // YourDuino I2C LCD display with old LCM 1602 V1 ic +// #define FEATURE_LCD1602_N07DH // http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino +// #define FEATURE_LCD_SAINSMART_I2C +#define FEATURE_LCD_FABO_PCF8574 // https://github.com/FaBoPlatform/FaBoLCD-PCF8574-Library +// #define FEATURE_LCD_MATHERTEL_PCF8574 // https://github.com/mathertel/LiquidCrystal_PCF8574 +// #define FEATURE_LCD_HD44780 +#define FEATURE_CW_DECODER +// #define FEATURE_SLEEP // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK) +#define FEATURE_ROTARY_ENCODER // rotary encoder speed control +#define FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING +#define FEATURE_USB_MOUSE // Uncomment three lines in k3ng_keyer.ino (search for note_usb_uncomment_lines) +// #define FEATURE_CAPACITIVE_PADDLE_PINS // remove the bypass capacitors on the paddle_left and paddle_right lines when using capactive paddles +// #define FEATURE_LED_RING // Mayhew Labs Led Ring support +#define FEATURE_ALPHABET_SEND_PRACTICE // enables command mode S command - created by Ryan, KC2ZWM +// #define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U +// #define FEATURE_PTT_INTERLOCK +// #define FEATURE_QLF +// #define FEATURE_EEPROM_E24C1024 +// #define FEATURE_STRAIGHT_KEY +// #define FEATURE_DYNAMIC_DAH_TO_DIT_RATIO +// #define FEATURE_PADDLE_ECHO +// #define FEATURE_STRAIGHT_KEY_ECHO +// #define FEATURE_AMERICAN_MORSE +// #define FEATURE_4x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad +// #define FEATURE_3x4_KEYPAD // code contributed by Jack, W0XR - documentation: https://github.com/k3ng/k3ng_cw_keyer/wiki/380-Feature:-Keypad +// #define FEATURE_SEQUENCER + +#define FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT // Activate the Command Line interface on the secondary serial port +#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE + // simultaneously. This will make Winkey emulation be the default at boot up; + // hold command button down at boot up to activate CLI mode + +// #define OPTION_SUPPRESS_SERIAL_BOOT_MSG +#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING +#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING +// #define OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP // if ASR is not disabled, you may need this to discard errant serial port bytes at startup +// #define OPTION_WINKEY_STRICT_EEPROM_WRITES_MAY_WEAR_OUT_EEPROM // with this activated the unit will write non-volatile settings to EEPROM when set by Winkey commands +// #define OPTION_WINKEY_SEND_WORDSPACE_AT_END_OF_BUFFER +#define OPTION_WINKEY_STRICT_HOST_OPEN // require an admin host open Winkey command before doing any other commands +#define OPTION_WINKEY_2_SUPPORT // comment out to revert to Winkey version 1 emulation +#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT +//#define OPTION_WINKEY_UCXLOG_9600_BAUD // use this only with UCXLog configured for Winkey 9600 baud mode +#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET // (Required for Win-Test to function) +// #define OPTION_WINKEY_FREQUENT_STATUS_REPORT // activate this to make Winkey emulation play better with RUMlog and RUMped +#define OPTION_WINKEY_IGNORE_LOWERCASE // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug) +// #define OPTION_WINKEY_BLINK_PTT_ON_HOST_OPEN +// #define OPTION_WINKEY_SEND_VERSION_ON_HOST_CLOSE +// #define OPTION_REVERSE_BUTTON_ORDER // This is mainly for the DJ0MY NanoKeyer http://nanokeyer.wordpress.com/ +#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES // trim trailing spaces from memory when programming in command mode +#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT // this makes dit paddle memory interruption a little smoother +#define OPTION_MORE_DISPLAY_MSGS // additional optional display messages - comment out to save memory +#define OPTION_WATCHDOG_TIMER // this enables a four second ATmega48/88/168/328 watchdog timer; use for unattended/remote operation only +#define OPTION_MOUSE_MOVEMENT_PADDLE // experimental (just fooling around) - mouse movement will act like a paddle +// #define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.) +// #define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM +// #define OPTION_UNKNOWN_CHARACTER_ERROR_TONE +// #define OPTION_DO_NOT_SAY_HI +// #define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou) +// #define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL) +// #define OPTION_SAVE_MEMORY_NANOKEYER +// #define OPTION_CW_KEYBOARD_CAPSLOCK_BEEP +// #define OPTION_CW_KEYBOARD_ITALIAN +// #define OPTION_CW_KEYBOARD_GERMAN +#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR +// #define OPTION_INVERT_PADDLE_PIN_LOGIC +#define OPTION_ADVANCED_SPEED_DISPLAY //enables "nerd" speed visualization on display: wpm, cpm (char per min), duration of dit and dah in milliseconds and ratio (contributed by Giorgio, IZ2XBZ) +#define OPTION_PROSIGN_SUPPORT // additional prosign support for paddle and straight key echo on display, CLI, and in memory storage +// #define OPTION_RUSSIAN_LANGUAGE_SEND_CLI // Russian language CLI sending support (contributed by Павел Бирюков, UA1AQC) +#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION +// #define OPTION_CMOS_SUPER_KEYER_IAMBIC_B_TIMING_ON_BY_DEFAULT +// #define OPTION_SIDETONE_DIGITAL_OUTPUT_NO_SQUARE_WAVE +// #define FEATURE_SD_CARD_SUPPORT +// #define FEATURE_SO2R_BASE // SO2R Box base protocol extensions +// #define FEATURE_SO2R_SWITCHES // SO2R Box TX and RX switches +// #define FEATURE_SO2R_ANTENNA // SO2R Box antenna selection (not fully implemented) + +#define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase +// #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins + +// #define OPTION_WORDSWORTH_CZECH +// #define OPTION_WORDSWORTH_DEUTSCH +// #define OPTION_WORDSWORTH_NORSK + +#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS + +// #define OPTION_DFROBOT_LCD_COMMAND_BUTTONS + +// #define OPTION_EXCLUDE_MILL_MODE + +//#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS + diff --git a/k3ng_keyer/keyer_hardware.h b/k3ng_keyer/keyer_hardware.h index 0f95c2b..8362b38 100644 --- a/k3ng_keyer/keyer_hardware.h +++ b/k3ng_keyer/keyer_hardware.h @@ -14,6 +14,7 @@ // #define HARDWARE_OPEN_INTERFACE // http://remoteqth.com/open-interface.php edit these files: keyer_pin_settings_open_interface.h, keyer_features_and_options_open_interface.h, keyer_settings_open_interface.h // #define HARDWARE_TINYKEYER // http://www.ok1rr.com/index.php/technical-topics/122-the-tinykeyer edit these files: keyer_pin_settings_tinykeyer.h, keyer_features_and_options_tinykeyer.h, keyer_settings_tinykeyer.h // #define HARDWARE_FK_10 // Funtronics K3NG Keyer FK-10 - See notes below!!! http://www.elekitsorparts.com/product/funtronics-k3ng-keyer-fk-10-99-winkey-emulation/ files: keyer_pin_settings_fk_10.h, keyer_features_and_options_fk_10.h, keyer_settings_fk_10.h +#define HARDWARE_FK_11 // Funtronics K3NG Keyer FK-11 - See notes below! https://www.elekitsorparts.com/?product=funtronics-k3ng-keyer-with-99-winkey-emulation files: keyer_pin_settings_fk_11.h, keyer_features_and_options_fk_11.h, keyer_settings_fk_11.h // #define HARDWARE_MAPLE_MINI // edit these files: keyer_pin_settings_maple_mini.h, keyer_settings_maple_mini.h, keyer_features_and_options_maple_mini.h // #define HARDWARE_GENERIC_STM32F103C // edit these files: keyer_pin_settings_generic_STM32F103C.h, keyer_settings_generic_STM32F103C.h, keyer_features_and_options_generic_STM32F103C.h //sp5iou 20180329 // #define HARDWARE_MORTTY // edit these files: keyer_pin_settings_mortty.h, keyer_settings_mortty.h, keyer_features_and_options_mortty.h @@ -57,7 +58,20 @@ typedef MAX3421e MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.) or Teensy 2.0 and 3.0 #endif + Funtronics FK-11 Programming Notes + Programming the unit is accomplished by selecting "Arduino Mega 2560" as the target processor and uploading to the rear USB port with the + front switch set to the Arduino position. + + Note: in order to get the FK-11 display working correctly you will need to: + - Install FaBo_212_LCD_PCF8574 library + - Set the slave address to 0x27 in FaBo_212_LCD_PCF8574/src/FaBoLCD_PCF8574.h + #define PCF8574_SLAVE_ADDRESS 0x27 + + Note: in order to get the FK-11 USB Host port working correctly you will need to: + - Uncomment three lines in in file: k3ng_keyer.ino below 'note_usb_uncomment_lines'. + - Add line to file k3ng_cw_keyer/libraries/USB_Host_Shield/settings.h, below 'Manual board activation': + #define BOARD_MEGA_ADK */ diff --git a/k3ng_keyer/keyer_pin_settings_fk_11.h b/k3ng_keyer/keyer_pin_settings_fk_11.h new file mode 100644 index 0000000..43d5ca6 --- /dev/null +++ b/k3ng_keyer/keyer_pin_settings_fk_11.h @@ -0,0 +1,164 @@ +// Funtronics FK-11 + +/* Pins - you must review these and configure ! */ +#ifndef keyer_pin_settings_h +#define keyer_pin_settings_h + +#define paddle_left 2 +#define paddle_right 5 +#define tx_key_line_1 39 // (high = key down/tx on) +#define tx_key_line_2 0 +#define tx_key_line_3 0 +#define tx_key_line_4 0 +#define tx_key_line_5 0 +#define tx_key_line_6 0 +#define sidetone_line 3 // connect a speaker for sidetone +#define potentiometer A0 // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k +#define ptt_tx_1 40 // PTT ("push to talk") lines +#define ptt_tx_2 0 // Can be used for keying fox transmitter, T/R switch, or keying slow boatanchors +#define ptt_tx_3 0 // These are optional - set to 0 if unused +#define ptt_tx_4 0 +#define ptt_tx_5 0 +#define ptt_tx_6 0 +#define tx_key_dit 0 // if defined, goes active for dit (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state +#define tx_key_dah 0 // if defined, goes active for dah (any transmitter) - customized with tx_key_dit_and_dah_pins_active_state and tx_key_dit_and_dah_pins_inactive_state + +#define potentiometer_enable_pin 0 // if defined, the potentiometer will be enabled only when this pin is held low; set to 0 to ignore this pin + +#ifdef FEATURE_COMMAND_BUTTONS + #define analog_buttons_pin A2 + #define command_mode_active_led 0 +#endif //FEATURE_COMMAND_BUTTONS + +/* +FEATURE_SIDETONE_SWITCH + Enabling this feature and an external toggle switch adds switch control for playing cw sidetone. + ST Switch status is displayed in the status command. This feature will override the software control of the sidetone (\o). + Arduino pin is assigned by SIDETONE_SWITCH +*/ + +#ifdef FEATURE_SIDETONE_SWITCH + #define SIDETONE_SWITCH 8 +#endif //FEATURE_SIDETONE_SWITCH + + +//lcd pins +#if defined(FEATURE_LCD_4BIT) || defined(FEATURE_LCD_8BIT) + #define lcd_rs A2 + #define lcd_enable 10 // pin 10 is used by Ethernet shield and will conflict with that + #define lcd_d4 6 + #define lcd_d5 7 + #define lcd_d6 8 + #define lcd_d7 9 +#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT) + +#if defined(FEATURE_LCD_8BIT) // addition four data lines for 8 bit LCD control + #define lcd_d0 20 + #define lcd_d1 21 + #define lcd_d2 22 + #define lcd_d3 23 +#endif //FEATURE_LCD_4BIT || defined(FEATURE_LCD_8BIT) + +#ifdef FEATURE_LCD1602_N07DH + #define lcd_rs 8 + #define lcd_enable 9 + #define lcd_d4 4 + #define lcd_d5 5 + #define lcd_d6 6 + #define lcd_d7 7 +#endif //FEATURE_LCD1602_N07DH + +//ps2 keyboard pins +#ifdef FEATURE_PS2_KEYBOARD + #define ps2_keyboard_data A3 + #define ps2_keyboard_clock 3 // this must be on an interrupt capable pin! +#endif //FEATURE_PS2_KEYBOARD + +// rotary encoder pins and options - rotary encoder code from Jim Balls M0CKE +#ifdef FEATURE_ROTARY_ENCODER + #define OPTION_ENCODER_HALF_STEP_MODE // Half-step mode? + #define rotary_pin1 43 // CW Encoder Pin + #define rotary_pin2 42 // CCW Encoder Pin + #define OPTION_ENCODER_ENABLE_PULLUPS // define to enable weak pullups. +#endif //FEATURE_ROTARY_ENCODER + +#ifdef FEATURE_LED_RING + #define led_ring_sdi A10 //2 //Data + #define led_ring_clk A9 //3 //Clock + #define led_ring_le A8 //4 //Latch +#endif //FEATURE_LED_RING + +#ifdef FEATURE_ALPHABET_SEND_PRACTICE + #define correct_answer_led 0 + #define wrong_answer_led 0 +#endif //FEATURE_ALPHABET_SEND_PRACTICE + +#ifdef FEATURE_PTT_INTERLOCK + #define ptt_interlock 0 // this pin disables PTT and TX KEY +#endif //FEATURE_PTT_INTERLOCK + +#ifdef FEATURE_STRAIGHT_KEY + #define pin_straight_key 52 +#endif //FEATURE_STRAIGHT_KEY + +#ifdef FEATURE_CW_DECODER + #define cw_decoder_pin A4//A11 //A5 //A3 + #ifdef OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR + #define cw_decoder_audio_input_pin A4 // this must be an analog pin! + #endif //OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR + #define cw_decoder_indicator 4 +#endif //FEATURE_CW_DECODER + + +#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION) + #define compression_detection_pin 13 +#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION + +#if defined(FEATURE_SLEEP) + #define keyer_awake 0 +#endif + +#if defined(FEATURE_CAPACITIVE_PADDLE_PINS) + #define capactive_paddle_pin_inhibit_pin 0 // if this pin is defined and is set high, the capacitive paddle pins will switch to normal (non-capacitive) sensing mode +#endif + +#ifdef FEATURE_4x4_KEYPAD + #define Row3 33 + #define Row2 32 + #define Row1 31 + #define Row0 30 + #define Col3 37 + #define Col2 36 + #define Col1 35 + #define Col0 34 +#endif + +#ifdef FEATURE_3x4_KEYPAD + #define Row3 33 + #define Row2 32 + #define Row1 31 + #define Row0 30 + #define Col2 36 + #define Col1 35 + #define Col0 34 +#endif + +#ifdef FEATURE_SEQUENCER + #define sequencer_1_pin 0 + #define sequencer_2_pin 0 + #define sequencer_3_pin 0 + #define sequencer_4_pin 0 + #define sequencer_5_pin 0 +#endif //FEATURE_SEQUENCER + +#define ptt_input_pin 0 + +#define tx_inhibit_pin 0 +#define tx_pause_pin 0 + +#else + + #error "Multiple pin_settings.h files included somehow..." + +#endif //keyer_pin_settings_h + diff --git a/k3ng_keyer/keyer_settings_fk_11.h b/k3ng_keyer/keyer_settings_fk_11.h new file mode 100644 index 0000000..fae6613 --- /dev/null +++ b/k3ng_keyer/keyer_settings_fk_11.h @@ -0,0 +1,278 @@ +// Funtronics FK-11 + +// Initial and hardcoded settings +#define initial_speed_wpm 26 // "factory default" keyer speed setting +#define initial_command_mode_speed_wpm 20 // "factory default" command mode speed setting +#define initial_sidetone_freq 600 // "factory default" sidetone frequency setting +#define sidetone_hz_limit_low 299 +#define sidetone_hz_limit_high 2001 +#define hz_high_beep 1500 // frequency in hertz of high beep +#define hz_low_beep 400 // frequency in hertz of low beep +#define initial_dah_to_dit_ratio 300 // 300 = 3 / normal 3:1 ratio +#define initial_ptt_lead_time_tx1 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx1 10 // PTT tail time in mS +#define initial_ptt_lead_time_tx2 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx2 10 // PTT tail time in mS +#define initial_ptt_lead_time_tx3 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx3 10 // PTT tail time in mS +#define initial_ptt_lead_time_tx4 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx4 10 // PTT tail time in mS +#define initial_ptt_lead_time_tx5 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx5 10 // PTT tail time in mS +#define initial_ptt_lead_time_tx6 0 // PTT lead time in mS +#define initial_ptt_tail_time_tx6 10 // PTT tail time in mS +#define initial_qrss_dit_length 1 // QRSS dit length in seconds +#define initial_pot_wpm_low_value 13 // Potentiometer WPM fully CCW +#define initial_pot_wpm_high_value 35 // Potentiometer WPM fully CW +#define wpm_limit_low 5 +#define wpm_limit_high 60 +#define potentiometer_change_threshold 0.9 // don't change the keyer speed until pot wpm has changed more than this +#define send_buffer_size 150 +#define default_length_letterspace 3 +#define default_length_wordspace 7 +#define default_keying_compensation 0 // number of milliseconds to extend all dits and dahs - for QSK on boatanchors +#define default_first_extension_time 0 // number of milliseconds to extend first sent dit or dah +#define default_pot_full_scale_reading 1023 +#define default_weighting 50 // 50 = weighting factor of 1 (normal) +#define default_ptt_hang_time_wordspace_units 0.0 +#define memory_area_end 1023 // the eeprom location where memory space ends +#define winkey_c0_wait_time 1 // the number of milliseconds to wait to send 0xc0 byte after send buffer has been sent +#define winkey_command_timeout_ms 5000 +#define winkey_discard_bytes_startup 3 // this is used if OPTION_WINKEY_DISCARD_BYTES_AT_STARTUP is enabled above +#define winkey_xoff_threshold 20 // the number of chars in the buffer when we begin sending XOFFs +#define winkey_xon_threshold 10 // the number of chars in the buffer below which we deactivate XOFF +#define default_memory_repeat_time 3000 // time in milliseconds +#define LCD_COLUMNS 16 +#define LCD_ROWS 2 +#define lcd_i2c_address_mathertel_PCF8574 0x27 // I2C address of display +#define hell_pixel_microseconds 4025 +#define program_memory_limit_consec_spaces 1 +#define serial_leading_zeros 1 // set to 1 to activate leading zeros in serial numbers (i.e. #1 = 001) +#define serial_cut_numbers 0 // set to 1 to activate cut numbers in serial numbers (i.e. #10 = 1T, #19 = 1N) +#define go_to_sleep_inactivity_time 10 // minutes - FEATURE_SLEEP +#define default_cmos_super_keyer_iambic_b_timing_percent 33 // use with FEATURE_CMOS_SUPER_KEYER_IAMBIC_B_TIMING; should be between 0 to 99 % (0% = true iambic b;100% = iambic a behavior) +#define cw_echo_timing_factor 0.25 +#define winkey_paddle_echo_buffer_decode_timing_factor 0.25 +#define potentiometer_always_on 0 +#define ptt_interlock_check_every_ms 100 +#define ptt_interlock_active_state HIGH +#define unknown_cw_character '*' +#define cli_paddle_echo_on_at_boot 1 +#define cli_straight_key_echo_on_at_boot 1 +#define tx_key_dit_and_dah_pins_active_state HIGH +#define tx_key_dit_and_dah_pins_inactive_state LOW +#define potentiometer_check_interval_ms 150 +#define potentiometer_reading_threshold 1 +#define default_paddle_interruption_quiet_time_element_lengths 0 +#define default_wordsworth_wordspace 6 +#define default_wordsworth_repetition 1 +#define serial_program_memory_buffer_size 500 +#define eeprom_write_time_ms 30000 + +#ifdef FEATURE_COMMAND_BUTTONS + #define analog_buttons_number_of_buttons 5 // includes the command button (command button + 3 memory buttons = 4) + #define analog_buttons_r1 10 + #define analog_buttons_r2 1 +#endif + + +#if defined(FEATURE_COMMAND_BUTTONS) && !defined(FEATURE_PS2_KEYBOARD) && !defined(FEATURE_USB_KEYBOARD) && !defined(FEATURE_COMMAND_LINE_INTERFACE) && !defined(FEATURE_WINKEY_EMULATION) + #define number_of_memories byte(analog_buttons_number_of_buttons-1) +#else + #define number_of_memories byte(12) +#endif + +#ifdef FEATURE_CAPACITIVE_PADDLE_PINS + #define capacitance_threshold 2 +#endif //FEATURE_CAPACITIVE_PADDLE_PINS + +#ifdef FEATURE_LED_RING + #define led_ring_low_limit 10 + #define led_ring_high_limit 50 +#endif //FEATURE_LED_RING + +#ifdef FEATURE_QLF + #define qlf_dit_max 125 + #define qlf_dit_min 75 + #define qlf_dah_max 200 + #define qlf_dah_min 100 + #define qlf_on_by_default 0 +#endif //FEATURE_QLF + + +#ifdef FEATURE_WINKEY_EMULATION + #ifdef OPTION_WINKEY_UCXLOG_9600_BAUD || defined(FEATURE_SO2R_BASE) + #define WINKEY_DEFAULT_BAUD 9600 + #else + #define WINKEY_DEFAULT_BAUD 1200 + #endif //OPTION_WINKEY_UCXLOG_9600_BAUD || FEATURE_SO2R_BASE +// alter these below to map alternate sidetones for Winkey interface protocol emulation +#ifdef OPTION_WINKEY_2_SUPPORT + #define WINKEY_SIDETONE_1 3759 + #define WINKEY_SIDETONE_2 1879 + #define WINKEY_SIDETONE_3 1252 + #define WINKEY_SIDETONE_4 940 + #define WINKEY_SIDETONE_5 752 + #define WINKEY_SIDETONE_6 625 + #define WINKEY_SIDETONE_7 535 + #define WINKEY_SIDETONE_8 469 + #define WINKEY_SIDETONE_9 417 + #define WINKEY_SIDETONE_10 375 +#else //OPTION_WINKEY_2_SUPPORT + #define WINKEY_SIDETONE_1 4000 + #define WINKEY_SIDETONE_2 2000 + #define WINKEY_SIDETONE_3 1333 + #define WINKEY_SIDETONE_4 1000 + #define WINKEY_SIDETONE_5 800 + #define WINKEY_SIDETONE_6 666 + #define WINKEY_SIDETONE_7 571 + #define WINKEY_SIDETONE_8 500 + #define WINKEY_SIDETONE_9 444 + #define WINKEY_SIDETONE_10 400 +#endif //OPTION_WINKEY_2_SUPPORT + +#define WINKEY_1_REPORT_VERSION_NUMBER 10 +#define WINKEY_2_REPORT_VERSION_NUMBER 23 + +// alter these to map to alternate hang time wordspace units +#define WINKEY_HANG_TIME_1_0 1.0 +#define WINKEY_HANG_TIME_1_33 1.33 +#define WINKEY_HANG_TIME_1_66 1.66 +#define WINKEY_HANG_TIME_2_0 2.0 + +#define WINKEY_RETURN_THIS_FOR_ADMIN_GET_CAL 0x16 +#define WINKEY_RETURN_THIS_FOR_ADMIN_PADDLE_A2D 0xEE +#define WINKEY_RETURN_THIS_FOR_ADMIN_SPEED_A2D 0x00 + +#endif //FEATURE_WINKEY_EMULATION + + + +#define PRIMARY_SERIAL_PORT &Serial +#define PRIMARY_SERIAL_PORT_BAUD 115200 // This applies only when the port is in Command Line Interface mode. In Winkey mode it will default to 1200. + +#ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT + #define SECONDARY_SERIAL_PORT &Serial1 + #define SECONDARY_SERIAL_PORT_BAUD 115200 +#endif + + +#define CW_DECODER_SCREEN_COLUMNS 120 // word wrap at this many columns +#define CW_DECODER_SPACE_PRINT_THRESH 4.5 // print space if no tone for this many element lengths +#define CW_DECODER_SPACE_DECODE_THRESH 2.0 // invoke character decode if no tone for this many element lengths +#define CW_DECODER_NOISE_FILTER 20 // ignore elements shorter than this (mS) + +#define STRAIGHT_KEY_ACTIVE_STATE LOW + +#ifdef FEATURE_DYNAMIC_DAH_TO_DIT_RATIO + #define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_WPM 30 + #define DYNAMIC_DAH_TO_DIT_RATIO_LOWER_LIMIT_RATIO 300 // 300 = 3:1 ratio + #define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_WPM 70 + #define DYNAMIC_DAH_TO_DIT_RATIO_UPPER_LIMIT_RATIO 240 // 240 = 2.4:1 ratio +#endif //FEATURE_DYNAMIC_DAH_TO_DIT_RATIO + +#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION) + #define COMPETITION_COMPRESSION_DETECTION_ARRAY_SIZE 16 + #define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_LOWER_LIMIT 1 + #define COMPETITION_COMPRESSION_DETECTION_TIME_INTERCHAR_UPPER_LIMIT 6.0 + #define COMPETITION_COMPRESSION_DETECTION_AVERAGE_ALARM_THRESHOLD 3.0 +#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION + +#if defined(FEATURE_SLEEP) + #define KEYER_AWAKE_PIN_AWAKE_STATE HIGH + #define KEYER_AWAKE_PIN_ASLEEP_STATE LOW +#endif + +#if defined(FEATURE_ETHERNET) + // #define FEATURE_ETHERNET_IP {192,168,1,178} // default IP address ("192.168.1.178") + // #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xED} + #define FEATURE_ETHERNET_IP {192,168,1,179} // default IP address ("192.168.1.179") + #define FEATURE_ETHERNET_MAC {0xDE,0xAD,0xBE,0xEF,0xFE,0xEE} + + #define FEATURE_ETHERNET_GATEWAY {192,168,1,1} // default gateway + #define FEATURE_ETHERNET_SUBNET_MASK {255,255,255,0} // default subnet mask + #define FEATURE_ETHERNET_WEB_LISTENER_PORT 80 + #define FEATURE_UDP_SEND_BUFFER_SIZE 128 + #define FEATURE_UDP_RECEIVE_BUFFER_SIZE 128 +#endif //FEATURE_ETHERNET + +#define WEB_SERVER_CONTROL_TX_KEY_TIME_LIMIT_SECS 10 + +#define FEATURE_INTERNET_LINK_MAX_LINKS 2 +#define FEATURE_INTERNET_LINK_DEFAULT_RCV_UDP_PORT 8888 +#define FEATURE_INTERNET_LINK_BUFFER_TIME_MS 500 + +#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD) + #define KEYPAD_ROWS 4 //KeyPad Rows + #if defined(FEATURE_4x4_KEYPAD) + #define KEYPAD_COLS 4 //keypad Columns + #else + #define KEYPAD_COLS 3 + #endif + #define mem1 0 //Memory numbers for Keypad: Actual memory numbers start with "0" + #define mem2 1 + #define mem3 2 + #define mem4 3 + #define mem5 4 + #define mem6 5 + #define mem7 6 + #define mem8 7 + #define mem9 8 + #define mem10 9 + #define mem11 10 + #define mem12 11 +#endif //#if defined(FEATURE_4x4_KEYPAD)|| defined (FEATURE_3x4_KEYPAD) + +#define initial_sidetone_mode 1 // Sidetone mode, 0=OFF, 1=ON, 2=PADDLE_ONLY + +#define sd_card_spi_ss_line 4 + +#if defined(OPTION_DFROBOT_LCD_COMMAND_BUTTONS) + + // For V1.1 board use these values + #define dfrobot_btnRIGHT_analog 50 + #define dfrobot_btnUP_analog 250 + #define dfrobot_btnDOWN_analog 450 + #define dfrobot_btnLEFT_analog 650 + #define dfrobot_btnSELECT_analog 850 + + // For V1.0 board use these values + // #define dfrobot_btnRIGHT_analog 50 + // #define dfrobot_btnUP_analog 195 + // #define dfrobot_btnDOWN_analog 380 + // #define dfrobot_btnLEFT_analog 555 + // #define dfrobot_btnSELECT_analog 790 + + // button to memory mappings (0 = command button, 1 = memory 1, 2 = memory 2, etc.) + #define dfrobot_btnRIGHT 2 + #define dfrobot_btnUP 1 + #define dfrobot_btnDOWN 3 + #define dfrobot_btnLEFT 4 + #define dfrobot_btnSELECT 0 + #define dfrobot_btnNONE 255 // do not change + +#endif + +#define sequencer_pins_active_state HIGH +#define sequencer_pins_inactive_state LOW +#define ptt_line_active_state HIGH +#define ptt_line_inactive_state LOW +#define tx_key_line_active_state HIGH +#define tx_key_line_inactive_state LOW +#define ptt_input_pin_active_state LOW +#define ptt_input_pin_inactive_state HIGH +#define tx_inhibit_pin_active_state LOW +#define tx_inhibit_pin_inactive_state HIGH +#define tx_pause_pin_active_state LOW +#define tx_pause_pin_inactive_state HIGH + +#if defined(ARDUINO_MAPLE_MINI) + #define button_value_factor 4095 //sp5iou contributed +#else + #define button_value_factor 1023 +#endif + +#define farnsworth_timing_calibration 1.15 + +#define sidetone_volume_low_limit 10 +#define sidetone_volume_high_limit 500 From 389e3cec821c1d9a45cba7d9cc8aa322f41e251c Mon Sep 17 00:00:00 2001 From: VK2EFL <42091734+VK2EFL@users.noreply.github.com> Date: Sun, 8 Dec 2019 03:20:08 +1100 Subject: [PATCH 3/5] Additional display info (#82) * Update k3ng_keyer.ino * Update k3ng_keyer.ino Added support for 'correct answer' LED and 'wrong answer' LED in the progressive code practice module (accessed from Command Mode). --- k3ng_keyer/k3ng_keyer.ino | 310 +++++++++++++++++--------------------- 1 file changed, 142 insertions(+), 168 deletions(-) diff --git a/k3ng_keyer/k3ng_keyer.ino b/k3ng_keyer/k3ng_keyer.ino index e8d76c6..825a454 100644 --- a/k3ng_keyer/k3ng_keyer.ino +++ b/k3ng_keyer/k3ng_keyer.ino @@ -6816,8 +6816,7 @@ long get_cw_input_from_user(unsigned int exit_time_milliseconds) { //------------------------------------------------------------------------------------------------------- #ifdef FEATURE_COMMAND_BUTTONS -void command_mode() -{ +void command_mode() { keyer_machine_mode = KEYER_COMMAND_MODE; @@ -6828,7 +6827,6 @@ void command_mode() #ifdef OPTION_WATCHDOG_TIMER wdt_disable(); #endif //OPTION_WATCHDOG_TIMER - byte looping; byte button_that_was_pressed = 0; @@ -6930,10 +6928,7 @@ void command_mode() } #endif - } //while (looping) - - - + } //while (looping) // end new code #ifdef DEBUG_COMMAND_MODE @@ -6974,10 +6969,22 @@ void command_mode() } else { lcd_center_print_timed("Single Paddle", 0, default_display_msg_delay); } - #endif + #endif send_dit(); break; - case 1: // E - announce spEed + case 1: // E - announce spEed + #ifdef FEATURE_DISPLAY + #if defined(OPTION_ADVANCED_SPEED_DISPLAY) + lcd_center_print_timed("Speed", 0, default_display_msg_delay); + lcd_center_print_timed(String(configuration.wpm) + " wpm - " + (configuration.wpm*5) + " cpm ", 1, default_display_msg_delay); + if (LCD_ROWS > 2) { + lcd_center_print_timed(String(1200/configuration.wpm) + ":" + (((1200/configuration.wpm)*configuration.dah_to_dit_ratio)/100) + "ms 1:" + (float(configuration.dah_to_dit_ratio)/100.00), 2, default_display_msg_delay); + } + #else // OPTION_ADVANCED_SPEED_DISPLAY_DISPLAY + lcd_center_print_timed("Speed " + String(configuration.wpm) + " wpm", 0, default_display_msg_delay); + #endif // OPTION_ADVANCED_SPEED_DISPLAY_DISPLAY + #endif // FEATURE_DISPLAY + delay(250); sprintf(c, "%d", configuration.wpm); send_char(c[0],KEYER_NORMAL); @@ -6990,7 +6997,7 @@ void command_mode() configuration.dah_buffer_off = 1; config_dirty = 1; #ifdef FEATURE_DISPLAY - if (LCD_COLUMNS < 9){ + if (LCD_COLUMNS < 9) { lcd_center_print_timed("Ultimatc", 0, default_display_msg_delay); } else { lcd_center_print_timed("Ultimatic", 0, default_display_msg_delay); @@ -7089,7 +7096,6 @@ void command_mode() command_speed_mode(COMMAND_SPEED_MODE_COMMAND_MODE_WPM); break; - #ifdef FEATURE_MEMORIES case 1221: command_program_memory(); break; // P - program a memory #endif //FEATURE_MEMORIES Acknowledgement: LA3ZA fixed! @@ -7120,7 +7126,7 @@ void command_mode() case 222: // O - cycle through sidetone modes on, paddle only and off - enhanced by Marc-Andre, VE2EVN if (configuration.sidetone_mode == SIDETONE_PADDLE_ONLY) { #ifdef FEATURE_DISPLAY - if (LCD_COLUMNS < 9){ + if (LCD_COLUMNS < 9) { lcd_center_print_timed("ST Off", 0, default_display_msg_delay); } else { lcd_center_print_timed("Sidetone Off", 0, default_display_msg_delay); @@ -7136,7 +7142,7 @@ void command_mode() if (LCD_COLUMNS < 9){ lcd_center_print_timed("ST Pdl O", 0, default_display_msg_delay); } - if (LCD_COLUMNS > 19){ + if (LCD_COLUMNS > 19) { lcd_center_print_timed("Sidetone Paddle Only", 0, default_display_msg_delay); } else { lcd_center_print_timed("Sidetone", 0, default_display_msg_delay); @@ -7152,7 +7158,7 @@ void command_mode() beep(); } else { #ifdef FEATURE_DISPLAY - if (LCD_COLUMNS < 9){ + if (LCD_COLUMNS < 9) { lcd_center_print_timed("ST On", 0, default_display_msg_delay); } else { lcd_center_print_timed("Sidetone On", 0, default_display_msg_delay); @@ -7167,9 +7173,7 @@ void command_mode() config_dirty = 1; break; - - case 121: command_set_serial_number(); break; // R - Set serial number - + case 121: command_set_serial_number(); break; // R - Set serial number case 2: command_tuning_mode(); break; // T - tuning mode #ifdef FEATURE_POTENTIOMETER @@ -7177,7 +7181,7 @@ void command_mode() if (configuration.pot_activated) { configuration.pot_activated = 0; #ifdef FEATURE_DISPLAY - if (LCD_COLUMNS > 14){ + if (LCD_COLUMNS > 14) { lcd_center_print_timed("Pot Deactivated", 0, default_display_msg_delay); } else { lcd_center_print_timed("Pot Off", 0, default_display_msg_delay); @@ -7249,7 +7253,6 @@ void command_mode() send_char(55,KEYER_NORMAL);send_char(51,KEYER_NORMAL);send_char(32,KEYER_NORMAL);send_char(69,KEYER_NORMAL);send_char(69,KEYER_NORMAL); break; - #ifdef FEATURE_ALPHABET_SEND_PRACTICE // enhanced by Fred, VK2EFL case 111: // S - Alphabet Send Practice #ifdef FEATURE_DISPLAY @@ -7266,8 +7269,7 @@ void command_mode() command_alphabet_send_practice(); stay_in_command_mode = 0; break; - #endif //FEATURE_ALPHABET_SEND_PRACTICE - + #endif //FEATURE_ALPHABET_SEND_PRACTICE #ifdef FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE case 112: // U - 5 Character Echo Practice @@ -7276,8 +7278,15 @@ void command_mode() break; #endif //FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_PRACTICE - case 112211: // ? - status - + case 112211: // ? - status + #ifdef FEATURE_DISPLAY + lcd_center_print_timed("Status", 0, default_display_msg_delay); + lcd_center_print_timed("speed, mode, weight", 1, default_display_msg_delay); + if(LCD_ROWS > 2) { + lcd_center_print_timed("dit/dah ratio", 2, default_display_msg_delay); / if + } + #endif // FEATURE_DISPLAY + delay(250); sprintf(c, "%d", configuration.wpm); send_char(c[0],KEYER_NORMAL); @@ -7304,7 +7313,6 @@ void command_mode() send_char(' ',KEYER_NORMAL); send_char(' ',KEYER_NORMAL); - sprintf(c, "%d", configuration.weighting); send_char(c[0],KEYER_NORMAL); send_char(c[1],KEYER_NORMAL); @@ -7316,11 +7324,8 @@ void command_mode() send_char(c[1],KEYER_NORMAL); send_char(c[2],KEYER_NORMAL); send_char(' ',KEYER_NORMAL); - break; - - case 9: // button was hit Serial.print("Button - "); Serial.println(button_that_was_pressed); @@ -7381,8 +7386,7 @@ void command_mode() //------------------------------------------------------------------------------------------------------- #if defined(FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE) && defined(FEATURE_COMMAND_BUTTONS) -void command_progressive_5_char_echo_practice(){ - +void command_progressive_5_char_echo_practice() { byte loop1 = 1; byte loop2 = 0; @@ -7404,11 +7408,9 @@ void command_progressive_5_char_echo_practice(){ if ((configuration.keyer_mode != IAMBIC_A) && (configuration.keyer_mode != IAMBIC_B)) { configuration.keyer_mode = IAMBIC_B; // we got to be in iambic mode (life is too short to make this work in bug mode) } - randomSeed(millis()); - #ifdef FEATURE_DISPLAY // enhanced by Fred, VK2EFL - + #ifdef FEATURE_DISPLAY // enhanced by Fred, VK2EFL lcd_clear(); if (LCD_COLUMNS > 17){ lcd_center_print_timed("Receive / Transmit", 0, default_display_msg_delay); @@ -7430,9 +7432,7 @@ void command_progressive_5_char_echo_practice(){ } } service_display(); - #else - send_char('E',0); send_char('C',0); send_char('H',0); @@ -7442,14 +7442,9 @@ void command_progressive_5_char_echo_practice(){ send_char(' ',0); beep(); beep(); - #endif - - - while (loop1){ - - + while (loop1) { // if (practice_mode_called == ECHO_MIXED){ // practice_mode = random(ECHO_2_CHAR_WORDS,ECHO_QSO_WORDS+1); // } else { @@ -7500,18 +7495,15 @@ void command_progressive_5_char_echo_practice(){ // break; // } //switch (practice_mode) - loop2 = 1; - - while (loop2){ - + while (loop2) { user_send_loop = 1; user_sent_cw = ""; cw_char = 0; x = 0; // send the CW to the user - while ((x < (cw_to_send_to_user.length())) && (x < progressive_step_counter)){ + while ((x < (cw_to_send_to_user.length())) && (x < progressive_step_counter)) { send_char(cw_to_send_to_user[x],KEYER_NORMAL); // test // port_to_use->print(cw_to_send_to_user[x]); @@ -7523,7 +7515,6 @@ void command_progressive_5_char_echo_practice(){ while (user_send_loop) { // get their paddle input - #ifdef FEATURE_DISPLAY service_display(); #endif @@ -7576,57 +7567,81 @@ void command_progressive_5_char_echo_practice(){ //port_to_use->println(); } - // does the user want to exit? while (analogbuttonread(0)) { user_send_loop = 0; loop1 = 0; loop2 = 0; + if (correct_answer_led) digitalWrite(correct_answer_led, LOW); // clear the LEDs as we exit + if (wrong_answer_led) digitalWrite(wrong_answer_led, LOW); } + } //while (user_send_loop) - } //while (user_send_loop) - - if (loop1 && loop2){ - if (progressive_step_counter < 255){ // we're in progressive mode - if (user_sent_cw.substring(0,progressive_step_counter) == cw_to_send_to_user.substring(0,progressive_step_counter)){ - send_char(' ',0); - send_char(' ',0); - progressive_step_counter++; - if (progressive_step_counter == 6){ + if (loop1 && loop2) { + if (progressive_step_counter < 255) { // we're in progressive mode + if (user_sent_cw.substring(0,progressive_step_counter) == cw_to_send_to_user.substring(0,progressive_step_counter)) { // we get here if the character entered is correct + if (progressive_step_counter < 6) { // if the step counter is less than 6 then we have not finished the 5 character string + if (correct_answer_led) digitalWrite(correct_answer_led, HIGH); // set the correct answer LED high + if (wrong_answer_led) digitalWrite(wrong_answer_led, LOW); // clear the wrong answer LED + beep(); // and beep + #ifdef FEATURE_DISPLAY + if (LCD_COLUMNS > 17) lcd_center_print_timed("Success! " + String(progressive_step_counter) + " correct", 0, default_display_msg_delay); + else lcd_center_print_timed("Success!", 0, default_display_msg_delay); + #endif // FEATURE_DISPLAY + send_char(' ',0); + send_char(' ',0); + progressive_step_counter++; + } // end if (progressive_step_counter < 6) + if (progressive_step_counter == 6) { // we get here if the five character string is correct loop2 = 0; - beep(); + if (correct_answer_led) digitalWrite(correct_answer_led, HIGH); // set the correct answer LED high + #ifdef FEATURE_DISPLAY + lcd_center_print_timed("Success!", 0, default_display_msg_delay); + if (LCD_COLUMNS > 17) lcd_center_print_timed("5 characters correct", 1, default_display_msg_delay); + if (LCD_COLUMNS < 17) lcd_center_print_timed("5 char correct", 1, default_display_msg_delay); + #endif // FEATURE_DISPLAY + unsigned int NEWtone = 400; // the initial tone freuency for the tone sequence + unsigned int TONEduration = 50; // define the duration of each tone element in the tone sequence to drive a speaker + for (int k=0; k<6; k++) { // a loop to generate some increasing tones + tone(sidetone_line,NEWtone); // generate a tone on the speaker pin + delay(TONEduration); // hold the tone for the specified delay period + noTone(sidetone_line); // turn off the tone + NEWtone = NEWtone*1.25; // calculate a new value for the tone frequency + } // end for send_char(' ',0); send_char(' ',0); - } - } else { + if (correct_answer_led) digitalWrite(correct_answer_led, LOW); // clear the correct answer LED + } // end if (progressive_step_counter == 6) + } else { // we get here if the character entered is wrong + if (wrong_answer_led) digitalWrite(wrong_answer_led, HIGH); // set the wrong answer LED high + if (correct_answer_led) digitalWrite(correct_answer_led, LOW); // clear the correct answer LED boop(); send_char(' ',0); send_char(' ',0); } - } else { - if (user_sent_cw == cw_to_send_to_user){ + } else { // I don't think we ever get here, unless the progressive_step_counter is more than 255, but it is reset as Loop1 starts + if (user_sent_cw == cw_to_send_to_user) { // correct answer beep(); send_char(' ',0); - send_char(' ',0); + send_char(' ',0); loop2 = 0; - } else { + } else { // wrong answer boop(); send_char(' ',0); send_char(' ',0); } - } //if (progressive_step_counter < 255) - } //if (loop1 && loop2) - } //loop2 - } //loop1 + } // if (progressive_step_counter < 255) + } // if (loop1 && loop2) + } //loop2 + } //loop1 - speed_mode = speed_mode_before; configuration.keyer_mode = keyer_mode_before; paddle_echo_buffer = 0; - } #endif //defined(FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE) && defined(FEATURE_COMMAND_BUTTONS) + //------------------------------------------------------------------------------------------------------- #if defined(FEATURE_COMMAND_BUTTONS) @@ -7656,7 +7671,6 @@ void command_set_serial_number() { //config_dirty = 1; beep(); } - } #endif @@ -12523,7 +12537,6 @@ void service_paddle_echo() debug_serial_port->println(); #endif //DEBUG_CW_COMPUTER_KEYBOARD #endif //defined(FEATURE_CW_COMPUTER_KEYBOARD) - #ifdef FEATURE_DISPLAY if (lcd_paddle_echo){ @@ -12574,11 +12587,7 @@ void service_paddle_echo() } display_scroll_print_char(ascii_temp); #endif //OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS - #endif //OPTION_PROSIGN_SUPPORT - - - } #endif //FEATURE_DISPLAY @@ -12586,8 +12595,6 @@ void service_paddle_echo() #if defined(OPTION_PROSIGN_SUPPORT) byte_temp = convert_cw_number_to_ascii(paddle_echo_buffer); if (cli_paddle_echo){ - - if ((byte_temp > PROSIGN_START) && (byte_temp < PROSIGN_END)){ primary_serial_port->print(prosign_temp[0]); primary_serial_port->print(prosign_temp[1]); @@ -12596,7 +12603,6 @@ void service_paddle_echo() secondary_serial_port->print(prosign_temp[1]); #endif //FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT } else { - if (configuration.cli_mode == CLI_MILL_MODE_KEYBOARD_RECEIVE){ primary_serial_port->println(); primary_serial_port->println(); @@ -12702,6 +12708,7 @@ void serial_set_memory_repeat(PRIMARY_SERIAL_CLS * port_to_use) { } #endif + //--------------------------------------------------------------------- #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) && defined(FEATURE_MEMORIES) @@ -12715,9 +12722,7 @@ void repeat_play_memory(PRIMARY_SERIAL_CLS * port_to_use) { if (memory_number > -1) { repeat_memory = memory_number - 1; } - } - #endif //--------------------------------------------------------------------- @@ -12731,15 +12736,13 @@ void serial_play_memory(byte memory_number) { add_to_send_buffer(memory_number); repeat_memory = 255; } - } #endif //--------------------------------------------------------------------- #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -int serial_get_number_input(byte places,int lower_limit, int upper_limit,PRIMARY_SERIAL_CLS * port_to_use,int raise_error_message) -{ +int serial_get_number_input(byte places,int lower_limit, int upper_limit,PRIMARY_SERIAL_CLS * port_to_use,int raise_error_message) { byte incoming_serial_byte = 0; byte looping = 1; byte error = 0; @@ -12827,9 +12830,9 @@ void serial_change_wordspace(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_switch_tx(PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_switch_tx(PRIMARY_SERIAL_CLS * port_to_use) { int set_tx_to = serial_get_number_input(1,0,7,port_to_use,RAISE_ERROR_MSG); if (set_tx_to > 0) { switch (set_tx_to){ @@ -12863,11 +12866,11 @@ void serial_set_dit_to_dah_ratio(PRIMARY_SERIAL_CLS * port_to_use) port_to_use->write("\r\nDah to dit ratio set to "); port_to_use->println((float(configuration.dah_to_dit_ratio)/100)); config_dirty = 1; - } #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) void serial_set_serial_number(PRIMARY_SERIAL_CLS * port_to_use) { @@ -12881,6 +12884,7 @@ void serial_set_serial_number(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) && defined(FEATURE_POTENTIOMETER) void serial_set_pot_low_high(PRIMARY_SERIAL_CLS * port_to_use) { @@ -12902,9 +12906,9 @@ void serial_set_pot_low_high(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_set_sidetone_freq(PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_set_sidetone_freq(PRIMARY_SERIAL_CLS * port_to_use) { int set_sidetone_hz = serial_get_number_input(4,(sidetone_hz_limit_low-1),(sidetone_hz_limit_high+1), port_to_use, RAISE_ERROR_MSG); if ((set_sidetone_hz > sidetone_hz_limit_low) && (set_sidetone_hz < sidetone_hz_limit_high)) { port_to_use->write("\r\nSetting sidetone to "); @@ -12912,14 +12916,18 @@ void serial_set_sidetone_freq(PRIMARY_SERIAL_CLS * port_to_use) port_to_use->println(F(" hz")); configuration.hz_sidetone = set_sidetone_hz; config_dirty = 1; + #ifdef FEATURE_DISPLAY + if (LCD_COLUMNS < 9) lcd_center_print_timed(String(configuration.hz_sidetone) + " Hz", 0, default_display_msg_delay); + else lcd_center_print_timed("Sidetone " + String(configuration.hz_sidetone) + " Hz", 0, default_display_msg_delay); + #endif // FEATURE_DISPLAY } } #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_wpm_set(PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_wpm_set(PRIMARY_SERIAL_CLS * port_to_use) { int set_wpm = serial_get_number_input(3,0,1000, port_to_use, RAISE_ERROR_MSG); if (set_wpm > 0) { speed_set(set_wpm); @@ -12931,9 +12939,9 @@ void serial_wpm_set(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) && defined(FEATURE_FARNSWORTH) -void serial_set_farnsworth(PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_set_farnsworth(PRIMARY_SERIAL_CLS * port_to_use) { int set_farnsworth_wpm = serial_get_number_input(3,-1,1000, port_to_use, RAISE_ERROR_MSG); if ((set_farnsworth_wpm > 0) || (set_farnsworth_wpm == 0)) { configuration.wpm_farnsworth = set_farnsworth_wpm; @@ -12945,9 +12953,9 @@ void serial_set_farnsworth(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_set_weighting(PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_set_weighting(PRIMARY_SERIAL_CLS * port_to_use) { int set_weighting = serial_get_number_input(2,9,91,port_to_use, DONT_RAISE_ERROR_MSG); if (set_weighting < 1) { set_weighting = 50; @@ -12959,9 +12967,9 @@ void serial_set_weighting(PRIMARY_SERIAL_CLS * port_to_use) #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_tune_command (PRIMARY_SERIAL_CLS * port_to_use) -{ +void serial_tune_command (PRIMARY_SERIAL_CLS * port_to_use) { byte incoming; delay(100); @@ -12981,10 +12989,11 @@ void serial_tune_command (PRIMARY_SERIAL_CLS * port_to_use) incoming = port_to_use->read(); } tx_and_sidetone_key(0); - } #endif + //--------------------------------------------------------------------- + #ifdef FEATURE_TRAINING_COMMAND_LINE_INTERFACE String generate_callsign(byte callsign_mode) { @@ -13079,17 +13088,14 @@ String generate_callsign(byte callsign_mode) { // // VT100 emulation in Linux: screen /dev/ttyACM1 115200 term vt100 - // #define CONTEST_PRACTICE_IDLE 0 // #define CONTEST_PRACTICE_CQ_SENT 1 // #define CONTEST_PRACTICE_REPORT_SENT 2 - - + // #define FIELD_CALLSIGN 0 // #define FIELD_NR 1 // #define FIELD_SECTION 2 - // byte overall_state = CONTEST_PRACTICE_IDLE; // byte loop1 = 1; // byte user_input_buffer[10]; @@ -13127,8 +13133,6 @@ String generate_callsign(byte callsign_mode) { // term.println(F("-------- ---- -------\n\n")); // while (loop1){ - - // // get user keyboard input // if (port_to_use->available()){ // user_input_buffer[user_input_buffer_characters] = toupper(port_to_use->read()); @@ -13148,7 +13152,6 @@ String generate_callsign(byte callsign_mode) { // port_to_use->write(49); // port_to_use->write(68); // break; - // default: // if (!(((user_input_buffer[user_input_buffer_characters-1] == 27) && (user_input_buffer[user_input_buffer_characters] == 79) && (user_input_buffer_characters>0)) || @@ -13162,7 +13165,6 @@ String generate_callsign(byte callsign_mode) { // }//(port_to_use->available()) - // // process user keyboard input // if ((process_user_input_buffer) && ((escape_flag_time == 0) || ((millis()-escape_flag_time) > 100))){ @@ -13256,10 +13258,8 @@ String generate_callsign(byte callsign_mode) { // term.println(section); // term.position(15,0); // term.print(F(" ")); -// term.position(15,0); - +// term.position(15,0); // } - // } //(user_input_buffer[0] == '\\') // } //(user_input_buffer_characters > 0) // process_user_input_buffer = 0; @@ -13301,24 +13301,19 @@ String generate_callsign(byte callsign_mode) { // transition_time = millis(); // } //send_buffer_bytes == 0 // break; //CONTEST_PRACTICE_CQ_SENT - - // } //switch(overall_state) - - // } //while (loop1) // configuration.hz_sidetone = previous_sidetone; // configuration.wpm = previous_wpm; // send_buffer_bytes = 0; - // } // #endif //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){ - +void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use) { byte menu_loop = 1; byte menu_loop2 = 1; @@ -13346,7 +13341,7 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){ menu_loop2 = 1; - while (menu_loop2){ + while (menu_loop2) { if (port_to_use->available()){ incoming_char = port_to_use->read(); @@ -13356,7 +13351,6 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){ } } - incoming_char = toUpperCase(incoming_char); switch(incoming_char){ @@ -13371,27 +13365,23 @@ void serial_cw_practice(PRIMARY_SERIAL_CLS * port_to_use){ } //while(menu_loop) - port_to_use->println(F("Exiting Training module...")); + port_to_use->println(F("Exited Training module...")); check_serial_override = 0; key_tx = previous_key_tx_state; - paddle_echo_buffer = 0; - + paddle_echo_buffer = 0; } #endif - - - //--------------------------------------------------------------------- + #if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_receive_transmit_echo_menu(PRIMARY_SERIAL_CLS * port_to_use){ - +void serial_receive_transmit_echo_menu(PRIMARY_SERIAL_CLS * port_to_use) { byte menu_loop = 1; byte menu_loop2 = 1; char incoming_char = ' '; - while(menu_loop){ + while(menu_loop) { while (port_to_use->available() > 0) { // clear out the buffer if anything is there port_to_use->read(); @@ -13413,20 +13403,18 @@ void serial_receive_transmit_echo_menu(PRIMARY_SERIAL_CLS * port_to_use){ menu_loop2 = 1; - while (menu_loop2){ - + while (menu_loop2) { if (port_to_use->available()){ incoming_char = port_to_use->read(); - if ((incoming_char != 10) && (incoming_char != 13)){ + if ((incoming_char != 10) && (incoming_char != 13)) { menu_loop2 = 0; } } } incoming_char = toUpperCase(incoming_char); - - switch(incoming_char){ + switch(incoming_char) { case 'X': menu_loop = 0; break; case 'I': receive_transmit_echo_practice(port_to_use,CALLSIGN_INTERNATIONAL); break; case 'U': receive_transmit_echo_practice(port_to_use,CALLSIGN_US); break; @@ -13444,17 +13432,13 @@ void serial_receive_transmit_echo_menu(PRIMARY_SERIAL_CLS * port_to_use){ } //while(menu_loop) port_to_use->println(F("Exiting receive / transmit echo practice...")); - } #endif //--------------------------------------------------------------------- #if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practice_mode_called){ - - - +void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practice_mode_called) { byte loop1 = 1; byte loop2 = 0; @@ -13509,9 +13493,7 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi incoming_char = port_to_use->read(); } - while (loop1){ - - + while (loop1) { if (practice_mode_called == ECHO_MIXED){ practice_mode = random(ECHO_2_CHAR_WORDS,ECHO_QSO_WORDS+1); } else { @@ -13555,13 +13537,11 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi strcpy_P(word_buffer, (char*)pgm_read_word(&(qso_table[random(0,qso_size)]))); cw_to_send_to_user = word_buffer; break; - } //switch (practice_mode) - + } // switch (practice_mode) loop2 = 1; while (loop2){ - user_send_loop = 1; user_sent_cw = ""; cw_char = 0; @@ -13580,7 +13560,6 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi while (user_send_loop) { // get their paddle input - #ifdef FEATURE_DISPLAY service_display(); #endif @@ -13642,7 +13621,6 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi } - // does the user want to exit? while(port_to_use->available() > 0) { incoming_char = port_to_use->read(); @@ -13658,8 +13636,7 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi } #endif - - } //while (user_send_loop) + } // while (user_send_loop) if (loop1 && loop2){ @@ -13668,7 +13645,7 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi send_char(' ',0); send_char(' ',0); progressive_step_counter++; - if (progressive_step_counter == 6){ + if (progressive_step_counter == 6) { loop2 = 0; beep(); send_char(' ',0); @@ -13692,29 +13669,25 @@ void receive_transmit_echo_practice(PRIMARY_SERIAL_CLS * port_to_use,byte practi } } } - } //loop2 } //loop1 speed_mode = speed_mode_before; configuration.keyer_mode = keyer_mode_before; paddle_echo_buffer = 0; - } #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 serial_receive_practice_menu(PRIMARY_SERIAL_CLS * port_to_use,byte practice_mode){ - +void serial_receive_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(); } @@ -13776,10 +13749,10 @@ void serial_receive_practice_menu(PRIMARY_SERIAL_CLS * port_to_use,byte practice case 'N': serial_practice_non_interactive(port_to_use,PRACTICE_NAMES); break; case 'M': serial_practice_non_interactive(port_to_use,PRACTICE_MIXED); break; case 'Q': serial_practice_non_interactive(port_to_use,PRACTICE_QSO_WORDS); break; - } //switch(incoming_char) + } // switch(incoming_char) } - } //while(menu_loop) + } // while(menu_loop) port_to_use->println(F("Exiting callsign training...")); @@ -13789,7 +13762,7 @@ void serial_receive_practice_menu(PRIMARY_SERIAL_CLS * port_to_use,byte practice //--------------------------------------------------------------------- #if defined(FEATURE_SERIAL) && defined(FEATURE_TRAINING_COMMAND_LINE_INTERFACE) && defined(FEATURE_COMMAND_LINE_INTERFACE) -void serial_set_wordspace_parameters(PRIMARY_SERIAL_CLS * port_to_use,byte mode_select){ +void serial_set_wordspace_parameters(PRIMARY_SERIAL_CLS * port_to_use,byte mode_select) { byte menu_loop = 1; byte menu_loop2 = 1; @@ -13903,16 +13876,13 @@ void serial_random_menu(PRIMARY_SERIAL_CLS * port_to_use){ } //while(menu_loop) port_to_use->println(F("Exiting Random code module...")); - - } #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 random_practice(PRIMARY_SERIAL_CLS * port_to_use,byte random_mode,byte group_size) -{ +void random_practice(PRIMARY_SERIAL_CLS * port_to_use,byte random_mode,byte group_size) { byte loop1 = 1; byte x = 0; @@ -15362,9 +15332,9 @@ void display_serial_number_character(char snumchar){ #endif //--------------------------------------------------------------------- + #ifdef FEATURE_MEMORIES -byte play_memory(byte memory_number) -{ +byte play_memory(byte memory_number) { unsigned int jump_back_to_y = 9999; byte jump_back_to_memory_number = 255; @@ -15509,9 +15479,7 @@ byte play_memory(byte memory_number) winkey_port_write(eeprom_byte_read,0); #endif // OPTION_PROSIGN_SUPPORT - - - } + } #ifdef FEATURE_COMMAND_LINE_INTERFACE_ON_SECONDARY_PORT #if defined(OPTION_PROSIGN_SUPPORT) if ((eeprom_temp > PROSIGN_START) && (eeprom_temp < PROSIGN_END)){ @@ -15565,7 +15533,6 @@ byte play_memory(byte memory_number) #endif // FEATURE_DISPLAY } - if (prosign_flag) { send_char(eeprom_byte_read,OMIT_LETTERSPACE); prosign_flag = 0; @@ -15672,7 +15639,7 @@ byte play_memory(byte memory_number) if (delay_result) { // if a paddle or button0 was hit during the delay, exit return 0; } - break; // case D + break; // case D case 'E': // E - play serial number, then increment send_serial_number(0,1,0); @@ -15701,9 +15668,16 @@ byte play_memory(byte memory_number) } if ((input_error != 1) && (int_from_macro > sidetone_hz_limit_low) && (int_from_macro < sidetone_hz_limit_high)) { configuration.hz_sidetone = int_from_macro; + #ifdef FEATURE_DISPLAY + if (LCD_COLUMNS < 9) lcd_center_print_timed(String(configuration.hz_sidetone) + " Hz", 0, default_display_msg_delay); + else lcd_center_print_timed("Sidetone " + String(configuration.hz_sidetone) + " Hz", 0, default_display_msg_delay); + #endif // FEATURE_DISPLAY + } + break; + if ((input_error != 1) && (int_from_macro > sidetone_hz_limit_low) && (int_from_macro < sidetone_hz_limit_high)) { + configuration.hz_sidetone = int_from_macro; } break; - case 'H': // H - Switch to Hell char_send_mode = HELL; From 267f0cd0e21bb47af09045cec87bb8cd5e43b99c Mon Sep 17 00:00:00 2001 From: Anthony Good Date: Sat, 7 Dec 2019 11:30:46 -0500 Subject: [PATCH 4/5] 2019.12.07.01 Updated version number for multiple merged pull requests https://github.com/k3ng/k3ng_cw_keyer/pull/78 - Custom startup text - Thanks, Fred, VK2EFL https://github.com/k3ng/k3ng_cw_keyer/pull/80 - FK-11 Support - Thanks, Ben git1k2 https://github.com/k3ng/k3ng_cw_keyer/pull/82 - Additional display info - Thanks, Fred, VK2EFL Fixed errant text at line 7293 from merge of pull request 82 --- k3ng_keyer/k3ng_keyer.ino | 16 ++++++++++++---- k3ng_keyer/keyer_hardware.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/k3ng_keyer/k3ng_keyer.ino b/k3ng_keyer/k3ng_keyer.ino index 825a454..ee14dbb 100644 --- a/k3ng_keyer/k3ng_keyer.ino +++ b/k3ng_keyer/k3ng_keyer.ino @@ -1123,6 +1123,14 @@ Recent Update History 2019.11.13.01 Various code compilation warning cleanups. (Thanks, Paul, K1XM) + 2019.12.07.01 + Updated version number for multiple merged pull requests + https://github.com/k3ng/k3ng_cw_keyer/pull/78 - Custom startup text - Thanks, Fred, VK2EFL + https://github.com/k3ng/k3ng_cw_keyer/pull/80 - FK-11 Support - Thanks, Ben git1k2 + https://github.com/k3ng/k3ng_cw_keyer/pull/82 - Additional display info - Thanks, Fred, VK2EFL + Fixed errant text at line 7293 from merge of pull request 82 + + This code is currently maintained for and compiled with Arduino 1.8.x. Your mileage may vary with other versions. ATTENTION: LIBRARY FILES MUST BE PUT IN LIBRARIES DIRECTORIES AND NOT THE INO SKETCH DIRECTORY !!!! @@ -1137,7 +1145,7 @@ Recent Update History */ -#define CODE_VERSION "2019.11.13.01" +#define CODE_VERSION "2019.12.07.01" #define eeprom_magic_number 35 // you can change this number to have the unit re-initialize EEPROM #include @@ -7282,9 +7290,9 @@ void command_mode() { #ifdef FEATURE_DISPLAY lcd_center_print_timed("Status", 0, default_display_msg_delay); lcd_center_print_timed("speed, mode, weight", 1, default_display_msg_delay); - if(LCD_ROWS > 2) { - lcd_center_print_timed("dit/dah ratio", 2, default_display_msg_delay); / if - } + if(LCD_ROWS > 2){ + lcd_center_print_timed("dit/dah ratio", 2, default_display_msg_delay); + } #endif // FEATURE_DISPLAY delay(250); diff --git a/k3ng_keyer/keyer_hardware.h b/k3ng_keyer/keyer_hardware.h index 8362b38..c2bd1c2 100644 --- a/k3ng_keyer/keyer_hardware.h +++ b/k3ng_keyer/keyer_hardware.h @@ -14,7 +14,7 @@ // #define HARDWARE_OPEN_INTERFACE // http://remoteqth.com/open-interface.php edit these files: keyer_pin_settings_open_interface.h, keyer_features_and_options_open_interface.h, keyer_settings_open_interface.h // #define HARDWARE_TINYKEYER // http://www.ok1rr.com/index.php/technical-topics/122-the-tinykeyer edit these files: keyer_pin_settings_tinykeyer.h, keyer_features_and_options_tinykeyer.h, keyer_settings_tinykeyer.h // #define HARDWARE_FK_10 // Funtronics K3NG Keyer FK-10 - See notes below!!! http://www.elekitsorparts.com/product/funtronics-k3ng-keyer-fk-10-99-winkey-emulation/ files: keyer_pin_settings_fk_10.h, keyer_features_and_options_fk_10.h, keyer_settings_fk_10.h -#define HARDWARE_FK_11 // Funtronics K3NG Keyer FK-11 - See notes below! https://www.elekitsorparts.com/?product=funtronics-k3ng-keyer-with-99-winkey-emulation files: keyer_pin_settings_fk_11.h, keyer_features_and_options_fk_11.h, keyer_settings_fk_11.h +// #define HARDWARE_FK_11 // Funtronics K3NG Keyer FK-11 - See notes below! https://www.elekitsorparts.com/?product=funtronics-k3ng-keyer-with-99-winkey-emulation files: keyer_pin_settings_fk_11.h, keyer_features_and_options_fk_11.h, keyer_settings_fk_11.h // #define HARDWARE_MAPLE_MINI // edit these files: keyer_pin_settings_maple_mini.h, keyer_settings_maple_mini.h, keyer_features_and_options_maple_mini.h // #define HARDWARE_GENERIC_STM32F103C // edit these files: keyer_pin_settings_generic_STM32F103C.h, keyer_settings_generic_STM32F103C.h, keyer_features_and_options_generic_STM32F103C.h //sp5iou 20180329 // #define HARDWARE_MORTTY // edit these files: keyer_pin_settings_mortty.h, keyer_settings_mortty.h, keyer_features_and_options_mortty.h From f4960218704b3479760575d95c6e4cbf9eab7f05 Mon Sep 17 00:00:00 2001 From: Anthony Good Date: Sat, 7 Dec 2019 11:52:10 -0500 Subject: [PATCH 5/5] 2019.12.07.02 Added OPTION_PERSONALIZED_STARTUP_SCREEN and custom_startup_field to feature and settings files of all hardware profiles (from pull request 78) --- k3ng_keyer/k3ng_keyer.ino | 13 ++++++++----- k3ng_keyer/keyer_features_and_options_fk_10.h | 1 + k3ng_keyer/keyer_features_and_options_fk_11.h | 1 + .../keyer_features_and_options_generic_STM32F103C.h | 1 + k3ng_keyer/keyer_features_and_options_iz3gme.h | 1 + k3ng_keyer/keyer_features_and_options_k5bcq.h | 1 + k3ng_keyer/keyer_features_and_options_maple_mini.h | 1 + k3ng_keyer/keyer_features_and_options_megakeyer.h | 1 + k3ng_keyer/keyer_features_and_options_mortty.h | 1 + .../keyer_features_and_options_mortty_regular.h | 1 + ..._and_options_mortty_regular_with_potentiometer.h | 1 + k3ng_keyer/keyer_features_and_options_mortty_so2r.h | 1 + ...res_and_options_mortty_so2r_with_potentiometer.h | 1 + .../keyer_features_and_options_nanokeyer_rev_b.h | 1 + .../keyer_features_and_options_nanokeyer_rev_d.h | 1 + .../keyer_features_and_options_open_interface.h | 5 +++-- .../keyer_features_and_options_opencwkeyer_mk2.h | 1 + k3ng_keyer/keyer_features_and_options_test.h | 1 + .../keyer_features_and_options_test_everything.h | 1 + k3ng_keyer/keyer_features_and_options_tinykeyer.h | 1 + k3ng_keyer/keyer_features_and_options_yaacwk.h | 2 ++ .../keyer_features_and_options_yccc_so2r_mini.h | 1 + k3ng_keyer/keyer_settings.h | 2 +- k3ng_keyer/keyer_settings_fk_10.h | 3 +++ k3ng_keyer/keyer_settings_fk_11.h | 3 +++ k3ng_keyer/keyer_settings_generic_STM32F103C.h | 3 +++ k3ng_keyer/keyer_settings_iz3gme.h | 3 +++ k3ng_keyer/keyer_settings_k5bcq.h | 3 +++ k3ng_keyer/keyer_settings_maple_mini.h | 3 +++ k3ng_keyer/keyer_settings_megakeyer.h | 3 +++ k3ng_keyer/keyer_settings_mortty.h | 1 + k3ng_keyer/keyer_settings_mortty_regular.h | 2 ++ ...yer_settings_mortty_regular_with_potentiometer.h | 2 ++ k3ng_keyer/keyer_settings_mortty_so2r.h | 2 ++ .../keyer_settings_mortty_so2r_with_potentiometer.h | 1 + k3ng_keyer/keyer_settings_nanokeyer_rev_b.h | 2 ++ k3ng_keyer/keyer_settings_nanokeyer_rev_d.h | 3 +++ k3ng_keyer/keyer_settings_open_interface.h | 3 +++ k3ng_keyer/keyer_settings_opencwkeyer_mk2.h | 3 +++ k3ng_keyer/keyer_settings_test.h | 3 +++ k3ng_keyer/keyer_settings_test_everything.h | 4 +++- k3ng_keyer/keyer_settings_tinykeyer.h | 3 +++ k3ng_keyer/keyer_settings_yaacwk.h | 3 +++ k3ng_keyer/keyer_settings_yccc_so2r_mini.h | 1 + 44 files changed, 86 insertions(+), 9 deletions(-) diff --git a/k3ng_keyer/k3ng_keyer.ino b/k3ng_keyer/k3ng_keyer.ino index ee14dbb..7914d39 100644 --- a/k3ng_keyer/k3ng_keyer.ino +++ b/k3ng_keyer/k3ng_keyer.ino @@ -1130,6 +1130,9 @@ Recent Update History https://github.com/k3ng/k3ng_cw_keyer/pull/82 - Additional display info - Thanks, Fred, VK2EFL Fixed errant text at line 7293 from merge of pull request 82 + 2019.12.07.02 + Added OPTION_PERSONALIZED_STARTUP_SCREEN and custom_startup_field to feature and settings files of all hardware profiles (from pull request 78) + This code is currently maintained for and compiled with Arduino 1.8.x. Your mileage may vary with other versions. @@ -1145,7 +1148,7 @@ Recent Update History */ -#define CODE_VERSION "2019.12.07.01" +#define CODE_VERSION "2019.12.07.02" #define eeprom_magic_number 35 // you can change this number to have the unit re-initialize EEPROM #include @@ -17138,13 +17141,13 @@ void initialize_display(){ if (LCD_COLUMNS < 9){ lcd_center_print_timed("K3NGKeyr",0,4000); } else { + lcd_center_print_timed("K3NG Keyer",0,4000); #ifdef OPTION_PERSONALIZED_STARTUP_SCREEN if (LCD_ROWS == 2) { - #ifdef OPTION_DO_NOT_SAY_HI // if we wish to display the custom field on the second line, we can't say 'hi' - lcd_center_print_timed(custom_startup_field, 1, 4000); // display the custom field on the second line of the display, maximum field length is the number of columns + #ifdef OPTION_DO_NOT_SAY_HI // if we wish to display the custom field on the second line, we can't say 'hi' + lcd_center_print_timed(custom_startup_field, 1, 4000); // display the custom field on the second line of the display, maximum field length is the number of columns #endif // OPTION_DO_NOT_SAY_HI - } - else if (LCD_ROWS > 2) lcd_center_print_timed(custom_startup_field, 2, 4000); // display the custom field on the third line of the display, maximum field length is the number of columns + } else if (LCD_ROWS > 2) lcd_center_print_timed(custom_startup_field, 2, 4000); // display the custom field on the third line of the display, maximum field length is the number of columns #endif // OPTION_PERSONALIZED_STARTUP_SCREEN if (LCD_ROWS > 3) lcd_center_print_timed("V: " + String(CODE_VERSION), 3, 4000); // display the code version on the fourth line of the display } diff --git a/k3ng_keyer/keyer_features_and_options_fk_10.h b/k3ng_keyer/keyer_features_and_options_fk_10.h index cae6585..5b8a7b9 100644 --- a/k3ng_keyer/keyer_features_and_options_fk_10.h +++ b/k3ng_keyer/keyer_features_and_options_fk_10.h @@ -128,4 +128,5 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_fk_11.h b/k3ng_keyer/keyer_features_and_options_fk_11.h index 59a2ddb..60c7492 100644 --- a/k3ng_keyer/keyer_features_and_options_fk_11.h +++ b/k3ng_keyer/keyer_features_and_options_fk_11.h @@ -115,4 +115,5 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_generic_STM32F103C.h b/k3ng_keyer/keyer_features_and_options_generic_STM32F103C.h index 28a373f..521ebf8 100755 --- a/k3ng_keyer/keyer_features_and_options_generic_STM32F103C.h +++ b/k3ng_keyer/keyer_features_and_options_generic_STM32F103C.h @@ -115,3 +115,4 @@ Generic STM32F103C "Blue Pill" // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_iz3gme.h b/k3ng_keyer/keyer_features_and_options_iz3gme.h index 191939d..d414b03 100644 --- a/k3ng_keyer/keyer_features_and_options_iz3gme.h +++ b/k3ng_keyer/keyer_features_and_options_iz3gme.h @@ -111,4 +111,5 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_k5bcq.h b/k3ng_keyer/keyer_features_and_options_k5bcq.h index 43bb6b1..6a6e242 100644 --- a/k3ng_keyer/keyer_features_and_options_k5bcq.h +++ b/k3ng_keyer/keyer_features_and_options_k5bcq.h @@ -109,3 +109,4 @@ // #define OPTION_EXCLUDE_MILL_MODE #define OPTION_DISABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_maple_mini.h b/k3ng_keyer/keyer_features_and_options_maple_mini.h index f48782a..9aeedd6 100644 --- a/k3ng_keyer/keyer_features_and_options_maple_mini.h +++ b/k3ng_keyer/keyer_features_and_options_maple_mini.h @@ -123,3 +123,4 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_megakeyer.h b/k3ng_keyer/keyer_features_and_options_megakeyer.h index 37243ef..ed333d0 100644 --- a/k3ng_keyer/keyer_features_and_options_megakeyer.h +++ b/k3ng_keyer/keyer_features_and_options_megakeyer.h @@ -115,4 +115,5 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_mortty.h b/k3ng_keyer/keyer_features_and_options_mortty.h index dcf4524..b684d3f 100755 --- a/k3ng_keyer/keyer_features_and_options_mortty.h +++ b/k3ng_keyer/keyer_features_and_options_mortty.h @@ -103,3 +103,4 @@ #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_mortty_regular.h b/k3ng_keyer/keyer_features_and_options_mortty_regular.h index 0d65e1e..7761f27 100755 --- a/k3ng_keyer/keyer_features_and_options_mortty_regular.h +++ b/k3ng_keyer/keyer_features_and_options_mortty_regular.h @@ -99,4 +99,5 @@ // #define OPTION_WORDSWORTH_NORSK #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_mortty_regular_with_potentiometer.h b/k3ng_keyer/keyer_features_and_options_mortty_regular_with_potentiometer.h index 15f8717..acfada1 100755 --- a/k3ng_keyer/keyer_features_and_options_mortty_regular_with_potentiometer.h +++ b/k3ng_keyer/keyer_features_and_options_mortty_regular_with_potentiometer.h @@ -99,4 +99,5 @@ // #define OPTION_WORDSWORTH_NORSK #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_mortty_so2r.h b/k3ng_keyer/keyer_features_and_options_mortty_so2r.h index 0d65e1e..7761f27 100755 --- a/k3ng_keyer/keyer_features_and_options_mortty_so2r.h +++ b/k3ng_keyer/keyer_features_and_options_mortty_so2r.h @@ -99,4 +99,5 @@ // #define OPTION_WORDSWORTH_NORSK #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_mortty_so2r_with_potentiometer.h b/k3ng_keyer/keyer_features_and_options_mortty_so2r_with_potentiometer.h index 15f8717..acfada1 100755 --- a/k3ng_keyer/keyer_features_and_options_mortty_so2r_with_potentiometer.h +++ b/k3ng_keyer/keyer_features_and_options_mortty_so2r_with_potentiometer.h @@ -99,4 +99,5 @@ // #define OPTION_WORDSWORTH_NORSK #define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_b.h b/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_b.h index a6ad8d2..83577c3 100644 --- a/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_b.h +++ b/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_b.h @@ -93,3 +93,4 @@ #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_d.h b/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_d.h index e5576bd..c221a4a 100755 --- a/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_d.h +++ b/k3ng_keyer/keyer_features_and_options_nanokeyer_rev_d.h @@ -91,5 +91,6 @@ #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_open_interface.h b/k3ng_keyer/keyer_features_and_options_open_interface.h index 4d1150c..c03ed29 100644 --- a/k3ng_keyer/keyer_features_and_options_open_interface.h +++ b/k3ng_keyer/keyer_features_and_options_open_interface.h @@ -71,7 +71,7 @@ //#define OPTION_NON_ENGLISH_EXTENSIONS // add support for additional CW characters (i.e. À, Å, Þ, etc.) //#define OPTION_DISPLAY_NON_ENGLISH_EXTENSIONS // LCD display suport for non-English (NO/DK/DE) characters - Courtesy of OZ1JHM //#define OPTION_UNKNOWN_CHARACTER_ERROR_TONE -//#define OPTION_DO_NOT_SAY_HI +// #define OPTION_DO_NOT_SAY_HI //#define OPTION_PS2_NON_ENGLISH_CHAR_LCD_DISPLAY_SUPPORT // makes some non-English characters from the PS2 keyboard display correctly in the LCD display (donated by Marcin sp5iou) //#define OPTION_PS2_KEYBOARD_RESET // reset the PS2 keyboard upon startup with 0xFF (contributed by Bill, W9BEL) //#define OPTION_SAVE_MEMORY_NANOKEYER @@ -96,5 +96,6 @@ // #define OPTION_EXCLUDE_MILL_MODE -//#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_opencwkeyer_mk2.h b/k3ng_keyer/keyer_features_and_options_opencwkeyer_mk2.h index 9ade812..89871eb 100644 --- a/k3ng_keyer/keyer_features_and_options_opencwkeyer_mk2.h +++ b/k3ng_keyer/keyer_features_and_options_opencwkeyer_mk2.h @@ -111,4 +111,5 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_test.h b/k3ng_keyer/keyer_features_and_options_test.h index 4a85026..4add85c 100644 --- a/k3ng_keyer/keyer_features_and_options_test.h +++ b/k3ng_keyer/keyer_features_and_options_test.h @@ -143,6 +143,7 @@ #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI #endif diff --git a/k3ng_keyer/keyer_features_and_options_test_everything.h b/k3ng_keyer/keyer_features_and_options_test_everything.h index fec0e50..d597718 100644 --- a/k3ng_keyer/keyer_features_and_options_test_everything.h +++ b/k3ng_keyer/keyer_features_and_options_test_everything.h @@ -124,3 +124,4 @@ // #define OPTION_EXCLUDE_MILL_MODE #define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_tinykeyer.h b/k3ng_keyer/keyer_features_and_options_tinykeyer.h index 3ec0652..dc3cf0c 100755 --- a/k3ng_keyer/keyer_features_and_options_tinykeyer.h +++ b/k3ng_keyer/keyer_features_and_options_tinykeyer.h @@ -75,3 +75,4 @@ #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_features_and_options_yaacwk.h b/k3ng_keyer/keyer_features_and_options_yaacwk.h index ad8500d..0c82c0f 100644 --- a/k3ng_keyer/keyer_features_and_options_yaacwk.h +++ b/k3ng_keyer/keyer_features_and_options_yaacwk.h @@ -107,3 +107,5 @@ // #define OPTION_DIRECT_PADDLE_PIN_READS_MEGA // only works with Mega and pins 2 and 5 - minor performance increase // #define OPTION_DIRECT_PADDLE_PIN_READS_UNO // Unos or Nanos pins 2 and 5 - do not enable on a nanoKeyer, it uses different pins +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI + diff --git a/k3ng_keyer/keyer_features_and_options_yccc_so2r_mini.h b/k3ng_keyer/keyer_features_and_options_yccc_so2r_mini.h index f44e86c..35bd2f7 100644 --- a/k3ng_keyer/keyer_features_and_options_yccc_so2r_mini.h +++ b/k3ng_keyer/keyer_features_and_options_yccc_so2r_mini.h @@ -119,3 +119,4 @@ // #define OPTION_EXCLUDE_MILL_MODE //#define OPTION_ENABLE_SERIAL_PORT_CHECKING_WHILE_SENDING_CW_MAY_CAUSE_PROBLEMS +// #define OPTION_PERSONALIZED_STARTUP_SCREEN // displays a user defined string of characters on the second or fourth row of the screen during startup. 1602 display requires OPTION_DO_NOT_SAY_HI diff --git a/k3ng_keyer/keyer_settings.h b/k3ng_keyer/keyer_settings.h index fa28141..5ef9133 100644 --- a/k3ng_keyer/keyer_settings.h +++ b/k3ng_keyer/keyer_settings.h @@ -275,4 +275,4 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 -#define custom_startup_field " " // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display diff --git a/k3ng_keyer/keyer_settings_fk_10.h b/k3ng_keyer/keyer_settings_fk_10.h index 9722230..b19112e 100644 --- a/k3ng_keyer/keyer_settings_fk_10.h +++ b/k3ng_keyer/keyer_settings_fk_10.h @@ -294,3 +294,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_fk_11.h b/k3ng_keyer/keyer_settings_fk_11.h index fae6613..39f1c44 100644 --- a/k3ng_keyer/keyer_settings_fk_11.h +++ b/k3ng_keyer/keyer_settings_fk_11.h @@ -276,3 +276,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_generic_STM32F103C.h b/k3ng_keyer/keyer_settings_generic_STM32F103C.h index c42d7ec..d522b48 100755 --- a/k3ng_keyer/keyer_settings_generic_STM32F103C.h +++ b/k3ng_keyer/keyer_settings_generic_STM32F103C.h @@ -281,3 +281,6 @@ GENERIC STM32F103C #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_iz3gme.h b/k3ng_keyer/keyer_settings_iz3gme.h index 59a1d2b..9eeb681 100644 --- a/k3ng_keyer/keyer_settings_iz3gme.h +++ b/k3ng_keyer/keyer_settings_iz3gme.h @@ -274,3 +274,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_k5bcq.h b/k3ng_keyer/keyer_settings_k5bcq.h index e00359b..7269320 100644 --- a/k3ng_keyer/keyer_settings_k5bcq.h +++ b/k3ng_keyer/keyer_settings_k5bcq.h @@ -273,3 +273,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_maple_mini.h b/k3ng_keyer/keyer_settings_maple_mini.h index 4cc602a..33cbfea 100644 --- a/k3ng_keyer/keyer_settings_maple_mini.h +++ b/k3ng_keyer/keyer_settings_maple_mini.h @@ -286,3 +286,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_megakeyer.h b/k3ng_keyer/keyer_settings_megakeyer.h index d3606d0..f189710 100644 --- a/k3ng_keyer/keyer_settings_megakeyer.h +++ b/k3ng_keyer/keyer_settings_megakeyer.h @@ -279,3 +279,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_mortty.h b/k3ng_keyer/keyer_settings_mortty.h index 884a49f..424a64c 100755 --- a/k3ng_keyer/keyer_settings_mortty.h +++ b/k3ng_keyer/keyer_settings_mortty.h @@ -276,4 +276,5 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display diff --git a/k3ng_keyer/keyer_settings_mortty_regular.h b/k3ng_keyer/keyer_settings_mortty_regular.h index b098ac4..5d73da8 100644 --- a/k3ng_keyer/keyer_settings_mortty_regular.h +++ b/k3ng_keyer/keyer_settings_mortty_regular.h @@ -277,4 +277,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_mortty_regular_with_potentiometer.h b/k3ng_keyer/keyer_settings_mortty_regular_with_potentiometer.h index b098ac4..5d73da8 100644 --- a/k3ng_keyer/keyer_settings_mortty_regular_with_potentiometer.h +++ b/k3ng_keyer/keyer_settings_mortty_regular_with_potentiometer.h @@ -277,4 +277,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_mortty_so2r.h b/k3ng_keyer/keyer_settings_mortty_so2r.h index b098ac4..5d73da8 100644 --- a/k3ng_keyer/keyer_settings_mortty_so2r.h +++ b/k3ng_keyer/keyer_settings_mortty_so2r.h @@ -277,4 +277,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_mortty_so2r_with_potentiometer.h b/k3ng_keyer/keyer_settings_mortty_so2r_with_potentiometer.h index b098ac4..3ab8354 100644 --- a/k3ng_keyer/keyer_settings_mortty_so2r_with_potentiometer.h +++ b/k3ng_keyer/keyer_settings_mortty_so2r_with_potentiometer.h @@ -277,4 +277,5 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display diff --git a/k3ng_keyer/keyer_settings_nanokeyer_rev_b.h b/k3ng_keyer/keyer_settings_nanokeyer_rev_b.h index 55195c6..31f5b9e 100644 --- a/k3ng_keyer/keyer_settings_nanokeyer_rev_b.h +++ b/k3ng_keyer/keyer_settings_nanokeyer_rev_b.h @@ -264,3 +264,5 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display diff --git a/k3ng_keyer/keyer_settings_nanokeyer_rev_d.h b/k3ng_keyer/keyer_settings_nanokeyer_rev_d.h index fa975d3..e956823 100755 --- a/k3ng_keyer/keyer_settings_nanokeyer_rev_d.h +++ b/k3ng_keyer/keyer_settings_nanokeyer_rev_d.h @@ -264,3 +264,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_open_interface.h b/k3ng_keyer/keyer_settings_open_interface.h index 3d8962d..e616342 100644 --- a/k3ng_keyer/keyer_settings_open_interface.h +++ b/k3ng_keyer/keyer_settings_open_interface.h @@ -267,3 +267,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_opencwkeyer_mk2.h b/k3ng_keyer/keyer_settings_opencwkeyer_mk2.h index 3f67f29..d51ca29 100644 --- a/k3ng_keyer/keyer_settings_opencwkeyer_mk2.h +++ b/k3ng_keyer/keyer_settings_opencwkeyer_mk2.h @@ -274,3 +274,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_test.h b/k3ng_keyer/keyer_settings_test.h index cf71a76..d2978f4 100644 --- a/k3ng_keyer/keyer_settings_test.h +++ b/k3ng_keyer/keyer_settings_test.h @@ -586,6 +586,9 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + + #endif //TEST_SETTINGS_2 // ######## ######## ###### ######## diff --git a/k3ng_keyer/keyer_settings_test_everything.h b/k3ng_keyer/keyer_settings_test_everything.h index dabbb5b..6d19a56 100644 --- a/k3ng_keyer/keyer_settings_test_everything.h +++ b/k3ng_keyer/keyer_settings_test_everything.h @@ -325,4 +325,6 @@ #endif #endif #endif -#endif \ No newline at end of file +#endif + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display diff --git a/k3ng_keyer/keyer_settings_tinykeyer.h b/k3ng_keyer/keyer_settings_tinykeyer.h index af0788d..bf64156 100755 --- a/k3ng_keyer/keyer_settings_tinykeyer.h +++ b/k3ng_keyer/keyer_settings_tinykeyer.h @@ -265,3 +265,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_yaacwk.h b/k3ng_keyer/keyer_settings_yaacwk.h index 1dbdefc..0bbca0d 100644 --- a/k3ng_keyer/keyer_settings_yaacwk.h +++ b/k3ng_keyer/keyer_settings_yaacwk.h @@ -273,3 +273,6 @@ #define sidetone_volume_low_limit 10 #define sidetone_volume_high_limit 500 + +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display + diff --git a/k3ng_keyer/keyer_settings_yccc_so2r_mini.h b/k3ng_keyer/keyer_settings_yccc_so2r_mini.h index e3487dc..609997c 100644 --- a/k3ng_keyer/keyer_settings_yccc_so2r_mini.h +++ b/k3ng_keyer/keyer_settings_yccc_so2r_mini.h @@ -309,4 +309,5 @@ #endif #endif +#define custom_startup_field "your custom text here" // an example could be callsign and name, eg. "AB1XYZ Bob", (or "Worlds best operator" which requires a 20 column display), string length shouldo be no more than the number of columns on the display