Write "Hello world!" out via UART protocol and receive an echo
cmake_minimum_required(VERSION 3.12)
project(UARTRX_Demo)
create_simple_executable(${PROJECT_NAME} UARTRX_Demo.cpp)
static const char TEST_STRING[] = "Hello, world!\n";
static const uint32_t BAUD_RATE = 115200;
static const Port::Mask TX_PIN = Port::Mask::P12;
static const Port::Mask RX_PIN = Port::Mask::P13;
static const UART::Parity PARITY = UART::Parity::NO_PARITY;
static void error (const PropWare::ErrorCode err);
public:
template<size_t N>
: Runnable(stack) {
}
PropWare::ErrorCode err;
int32_t receivedLength;
this->init();
while (1) {
receivedLength = sizeof(this->m_buffer);
if ((err = this->m_listener.fgets(this->m_buffer, &receivedLength)))
error(err);
pwSyncOut.
printf(
"Data (%d chars): \"%s\"\n", receivedLength, this->m_buffer);
}
}
void init () {
this->m_listener.set_rx_mask(RX_PIN);
this->m_listener.set_baud_rate(BAUD_RATE);
this->m_listener.set_parity(PARITY);
}
private:
UARTRX m_listener;
char m_buffer[sizeof(TEST_STRING)];
};
uint32_t threadStack[256];
UARTTX speaker(TX_PIN);
speaker.set_baud_rate(BAUD_RATE);
speaker.set_parity(PARITY);
pwSyncOut.
printf(
"New cog ID: %d. Ready to send!!!\n", Runnable::invoke(listener));
while (1) {
speaker.puts(TEST_STRING);
}
}
void error (const PropWare::ErrorCode err) {
SimplePort debugLEDs(Port::P16, 8, Pin::Dir::OUT);
while (1) {
debugLEDs.write((uint32_t) err);
debugLEDs.write(0);
}
}