From 701bf8f6b4db8ea18833ba8f54c012634d78dd4d Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Mon, 26 Feb 2024 15:20:28 +0100 Subject: [PATCH] [WIP] Send messages via USB --- src/keyer.cpp | 22 ++++++++++++---------- src/raspi_keyer.cpp | 38 ++++++++++++++++++++++++++++---------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/keyer.cpp b/src/keyer.cpp index 5fd8f19..bca845b 100644 --- a/src/keyer.cpp +++ b/src/keyer.cpp @@ -50,9 +50,10 @@ void Keyer::setSpeed(uint8_t wpm) void Keyer::sendMessage(std::string msg) { + printf("Queue size: %d\n", m_messageQueue.size()); std::string morse = messageToMorse(msg); - for (unsigned char c : morse) { + for (char c : morse) { m_messageQueue.push(c); } } @@ -62,17 +63,18 @@ void Keyer::run() auto timestamp = get_absolute_time(); // If there is some message to send … - if (!m_messageQueue.empty() || m_messageKeyingState != MessageState::Wait) { + //if (!m_messageQueue.empty() || m_messageKeyingState != MessageState::Wait) { + if (!m_messageQueue.empty()) { // Stop all paddle keying, if necessary if (m_paddleKeyingState != State::Wait) { - gpio_put(LED_PIN, 0); - gpio_put(CW_OUT_PIN, 0); - m_buzzer.off(); - m_keyNextIambicB = false; - m_currentlyPausing = false; - m_currentlyKeying = false; - m_previousState = State::Abort; - m_paddleKeyingState = State::Wait; + //gpio_put(LED_PIN, 0); + //gpio_put(CW_OUT_PIN, 0); + //m_buzzer.off(); + //m_keyNextIambicB = false; + //m_currentlyPausing = false; + //m_currentlyKeying = false; + //m_previousState = State::Abort; + //m_paddleKeyingState = State::Wait; } switch (m_messageKeyingState) { diff --git a/src/raspi_keyer.cpp b/src/raspi_keyer.cpp index d83869f..f4559c5 100644 --- a/src/raspi_keyer.cpp +++ b/src/raspi_keyer.cpp @@ -93,6 +93,7 @@ void core1_main() data.cmd = KeyerQueueCommand::Run; break; case KeyerQueueCommand::SendMessage: + printf("Sending: %s\n", data.message.c_str()); keyer.sendMessage(data.message); data.cmd = KeyerQueueCommand::Run; break; @@ -126,25 +127,42 @@ void cdc_task() if (tud_cdc_n_available(USB_IF)) { uint8_t buf[64]; - // printf("AHA!!! %d\n", (int)tud_cdc_n_available(USB_IF)); + //printf("AHA!!! %d\n", (int)tud_cdc_n_available(USB_IF)); uint32_t count = tud_cdc_n_read(USB_IF, buf, sizeof(buf)); if (count > 0) { switch (buf[0]) { case 'a' ... 'z': + [[fallthrough]]; case 'A' ... 'Z': + [[fallthrough]]; case '0' ... '9': - printf("TODO: Send it!\n"); + [[fallthrough]]; + case ' ': + [[fallthrough]]; + case '+': + [[fallthrough]]; + case '=': + [[fallthrough]]; + case '?': + [[fallthrough]]; + case ',': + [[fallthrough]]; + case '.': + { + printf("TODO: Send it: %c\n", buf[0]); + std::string msg(1, buf[0]); + KeyerQueueData keyerQueueData {KeyerQueueCommand::SendMessage, 0, Mode::IambicB, msg}; + queue_add_blocking(&keyerQueue, &keyerQueueData); break; + } case 0x00: // ADMIN COMMAND switch (buf[1]) { - case 0x02: // Host open + case 0x02: // HOST OPEN usbSend(USB_IF, 9); // Send WK1 (v9) for now (no WinKeyer PTT control) break; - case 0x04: // Echo test - printf("Echo test: %x\n", buf[2]); - printf("buf address: %p\n", &buf[2]); - usbSend(USB_IF, &buf[2], 1); + case 0x04: // ECHO TEST + usbSend(USB_IF, &buf[2], 1); // Send the received byte back break; default: printf("Unknown admin command: %x\n", buf[1]); @@ -209,9 +227,6 @@ int main() static bool used = false; while (true) { - tud_task(); - cdc_task(); - currentWpm = calcWPM(potiRead(), settings.wpmPotiMin, settings.wpmPotiMax); // If WPM in settings is set to 0 -> take speed from poti @@ -228,6 +243,9 @@ int main() // pse k"}; queue_add_blocking(&keyerQueue, &keyerQueueData); used = true; } + + tud_task(); + cdc_task(); } return 0;