vail-adapter

Firmware for USB morse code key adapter
git clone https://git.woozle.org/neale/vail-adapter.git

WrathPak  ·  2025-06-14

config.h

  1#ifndef CONFIG_H
  2#define CONFIG_H
  3
  4// --- SELECT YOUR HARDWARE CONFIGURATION ---
  5// Uncomment only one of the following lines based on your build:
  6// #define V1_PCB 
  7// #define V1_2_PCB 
  8// #define V2_ADVANCED_PCB  
  9// #define NO_PCB_GITHUB_SPECS
 10
 11// --- PIN DEFINITIONS BASED ON SELECTION ---
 12
 13#ifdef V1_PCB
 14  #define DIT_PIN 1
 15  #define DAH_PIN 0
 16  #define KEY_PIN 3
 17  #define QT_DIT_PIN A6
 18  #define QT_DAH_PIN A7
 19  #define QT_KEY_PIN A8
 20  #define PIEZO_PIN 9
 21  #define LED_ON true
 22  #define LED_OFF (!LED_ON)
 23  #define BOARD_NAME "V1 PCB"
 24  // Radio pins not defined, so HAS_RADIO_OUTPUT will not be defined
 25#endif
 26
 27#ifdef V1_2_PCB
 28  #define DIT_PIN 2
 29  #define DAH_PIN 1
 30  #define KEY_PIN 0
 31  #define QT_DIT_PIN A6
 32  #define QT_DAH_PIN A7
 33  #define QT_KEY_PIN A8
 34  #define PIEZO_PIN 10
 35  #define LED_ON true
 36  #define LED_OFF (!LED_ON)
 37  #define BOARD_NAME "V1_2 PCB"
 38  // Radio pins not defined, so HAS_RADIO_OUTPUT will not be defined
 39#endif
 40
 41#ifdef V2_ADVANCED_PCB
 42  #define DIT_PIN 1
 43  #define DAH_PIN 0
 44  #define KEY_PIN 9
 45  #define QT_DIT_PIN A7
 46  #define QT_DAH_PIN A6
 47  #define QT_KEY_PIN A8
 48  #define PIEZO_PIN 10
 49  #define LED_ON true
 50  #define LED_OFF (!LED_ON)
 51  #define BOARD_NAME "V2 Advanced PCB"
 52  // Radio Output Pins for Advanced PCB
 53  #define RADIO_DIT_PIN A3
 54  #define RADIO_DAH_PIN A2
 55  #define HAS_RADIO_OUTPUT // Signal that radio output pins are configured
 56#endif
 57
 58#ifdef NO_PCB_GITHUB_SPECS
 59  #define DIT_PIN 2
 60  #define DAH_PIN 1
 61  #define KEY_PIN 0
 62  #define QT_DIT_PIN A6
 63  #define QT_DAH_PIN A7
 64  #define QT_KEY_PIN A8
 65  #define PIEZO_PIN 10
 66  #define LED_ON false // Xiao inverts this logic
 67  #define LED_OFF (!LED_ON)
 68  #define BOARD_NAME "No PCB (GitHub Specs)"
 69  // Radio pins not defined, so HAS_RADIO_OUTPUT will not be defined
 70#endif
 71
 72// --- RADIO KEYING POLARITY ---
 73// Set to true if your radio PTT/KEY line activates when pulled LOW.
 74// Set to false if your radio PTT/KEY line activates when pulled HIGH.
 75#define RADIO_KEYING_ACTIVE_LOW false // <<<< ADJUST THIS FOR YOUR RADIO
 76
 77#ifdef HAS_RADIO_OUTPUT
 78  #if RADIO_KEYING_ACTIVE_LOW
 79    #define RADIO_ACTIVE_LEVEL LOW
 80    #define RADIO_INACTIVE_LEVEL HIGH
 81  #else
 82    #define RADIO_ACTIVE_LEVEL HIGH
 83    #define RADIO_INACTIVE_LEVEL LOW
 84  #endif
 85#endif
 86
 87
 88// --- COMMON DEFINITIONS ---
 89#define DIT_KEYBOARD_KEY KEY_LEFT_CTRL
 90#define DAH_KEYBOARD_KEY KEY_RIGHT_CTRL
 91#define DEFAULT_TONE_NOTE 69
 92#define DEFAULT_ADAPTER_DIT_DURATION_MS 100
 93
 94#define MILLISECOND 1
 95#define SECOND (1000 * MILLISECOND)
 96
 97// Morse code timing at 20 WPM (for startup sound, not for keyer logic directly)
 98#define DOT_DURATION 60
 99#define DASH_DURATION (DOT_DURATION * 3)
100#define ELEMENT_SPACE (DOT_DURATION)
101#define CHAR_SPACE (DOT_DURATION * 3)
102#define WORD_SPACE (DOT_DURATION * 7)
103
104// EEPROM definitions
105#define EEPROM_KEYER_TYPE_ADDR 0
106#define EEPROM_DIT_DURATION_ADDR 1
107#define EEPROM_TX_NOTE_ADDR 3
108#define EEPROM_VALID_FLAG_ADDR 4
109#define EEPROM_VALID_VALUE 0x42
110
111// Spam detection and feature thresholds
112#define SPAM_DISABLE_WINDOW 500
113#define DIT_SPAM_COUNT_BUZZER_DISABLE 10
114#define DAH_SPAM_COUNT_RADIO_MODE 10
115#define KEY_HOLD_DISABLE_THRESHOLD 6000
116
117#endif // CONFIG_H