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