renamed
This commit is contained in:
parent
d147059531
commit
8fa9f971a5
1 changed files with 0 additions and 0 deletions
142
src/raspikeyer.cpp
Normal file
142
src/raspikeyer.cpp
Normal file
|
@ -0,0 +1,142 @@
|
|||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "bsp/board.h"
|
||||
#include "hardware/adc.h"
|
||||
#include "pico/multicore.h"
|
||||
#include "pico/stdlib.h"
|
||||
#include "pico/util/queue.h"
|
||||
#include "tusb.h"
|
||||
|
||||
#include "keyer.h"
|
||||
#include "settings.h"
|
||||
#include <config.h>
|
||||
#include "tusb_config.h"
|
||||
#include "utils.h"
|
||||
#include "winkeyer.h"
|
||||
|
||||
extern const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||
extern const uint LEFT_PADDLE_PIN = 14;
|
||||
extern const uint RIGHT_PADDLE_PIN = 15;
|
||||
extern const uint BUZZER_PIN = 18;
|
||||
extern const uint CW_OUT_PIN = 17;
|
||||
// extern const uint AUDIO_OUT_PIN = 16;
|
||||
extern const uint ADC_PIN = 26;
|
||||
|
||||
queue_t keyerQueue;
|
||||
|
||||
void setup()
|
||||
{
|
||||
stdio_init_all();
|
||||
gpio_init(LED_PIN);
|
||||
gpio_set_dir(LED_PIN, GPIO_OUT);
|
||||
gpio_put(LED_PIN, 0);
|
||||
|
||||
// Setup pins for left and right paddles
|
||||
gpio_init(LEFT_PADDLE_PIN);
|
||||
gpio_set_dir(LEFT_PADDLE_PIN, GPIO_IN);
|
||||
gpio_pull_up(LEFT_PADDLE_PIN);
|
||||
gpio_init(RIGHT_PADDLE_PIN);
|
||||
gpio_set_dir(RIGHT_PADDLE_PIN, GPIO_IN);
|
||||
gpio_pull_up(RIGHT_PADDLE_PIN);
|
||||
gpio_init(CW_OUT_PIN);
|
||||
gpio_set_dir(CW_OUT_PIN, GPIO_OUT);
|
||||
gpio_put(CW_OUT_PIN, 0);
|
||||
|
||||
// Setup ADC
|
||||
adc_init();
|
||||
gpio_init(ADC_PIN);
|
||||
adc_select_input(0);
|
||||
|
||||
// Setup USB
|
||||
board_init();
|
||||
tud_init(BOARD_TUD_RHPORT);
|
||||
}
|
||||
|
||||
/* Let's do all the keying stuff in the second core, so there are no timing problems. */
|
||||
void core1_main()
|
||||
{
|
||||
flash_safe_execute_core_init();
|
||||
|
||||
KeyerQueueData data;
|
||||
queue_remove_blocking(&keyerQueue, &data);
|
||||
|
||||
Keyer keyer(data.wpm, data.mode);
|
||||
|
||||
while (true) {
|
||||
queue_try_remove(&keyerQueue, &data);
|
||||
|
||||
switch (data.cmd) {
|
||||
case KeyerQueueCommand::Run:
|
||||
keyer.run();
|
||||
break;
|
||||
case KeyerQueueCommand::Stop:
|
||||
keyer.stop();
|
||||
data.cmd = KeyerQueueCommand::Wait;
|
||||
break;
|
||||
case KeyerQueueCommand::Config:
|
||||
keyer.setSpeed(data.wpm);
|
||||
keyer.setMode(data.mode);
|
||||
data.cmd = KeyerQueueCommand::Run;
|
||||
break;
|
||||
case KeyerQueueCommand::SendMessage:
|
||||
keyer.sendCharacter(data.message);
|
||||
data.cmd = KeyerQueueCommand::Run;
|
||||
break;
|
||||
case KeyerQueueCommand::Wait:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
timer_hw->dbgpause = 0; // workaround for problem with debug and sleep_ms
|
||||
// https://github.com/raspberrypi/pico-sdk/issues/1152#issuecomment-1418248639
|
||||
|
||||
setup();
|
||||
|
||||
printf("RaspiKeyer Version %s\n", PROJECT_VERSION);
|
||||
|
||||
queue_init(&keyerQueue, sizeof(KeyerQueueData), 2);
|
||||
multicore_reset_core1();
|
||||
multicore_launch_core1(core1_main);
|
||||
|
||||
Settings settings {read_settings()};
|
||||
|
||||
uint8_t currentWpm {0};
|
||||
uint8_t lastWpm {0};
|
||||
|
||||
// If WPM in settings is set to 0 -> take speed from poti
|
||||
if (settings.wpm == 0) {
|
||||
currentWpm = calcWPM(potiRead(), settings.wpmPotiMin, settings.wpmPotiMax);
|
||||
} else {
|
||||
currentWpm = settings.wpm;
|
||||
}
|
||||
lastWpm = currentWpm;
|
||||
|
||||
KeyerQueueData keyerQueueData {KeyerQueueCommand::Run, currentWpm, settings.mode, 0};
|
||||
queue_add_blocking(&keyerQueue, &keyerQueueData);
|
||||
|
||||
WinKeyer winKeyer;
|
||||
|
||||
while (true) {
|
||||
currentWpm = calcWPM(potiRead(), settings.wpmPotiMin, settings.wpmPotiMax);
|
||||
|
||||
// If WPM in settings is set to 0 -> take speed from poti
|
||||
if (settings.wpm == 0 && (currentWpm != lastWpm)) {
|
||||
KeyerQueueData keyerQueueData {KeyerQueueCommand::Config, currentWpm, settings.mode, 0};
|
||||
queue_add_blocking(&keyerQueue, &keyerQueueData);
|
||||
printf("WPM has changed to: %d\n", currentWpm);
|
||||
lastWpm = currentWpm;
|
||||
}
|
||||
|
||||
tud_task(); // Internal PICO purposes
|
||||
|
||||
winKeyer.run(keyerQueue);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue