diff --git a/src/boards/Main/Radio/Radio.cpp b/src/boards/Main/Radio/Radio.cpp index 71926fbfdd2f9cfcab6100098c30f7483d5c4c7e..0597b93d5b84731a158510aecc4ef21ca19b43ea 100644 --- a/src/boards/Main/Radio/Radio.cpp +++ b/src/boards/Main/Radio/Radio.cpp @@ -121,8 +121,11 @@ Radio::Radio() transceiver = new SX1278(Buses::getInstance().spi5, sensors::sx127x::cs::getPin()); + SX1278::Config config = {}; + config.freq_rf = 412000000; + // Use default configuration - transceiver->init({}); + transceiver->init(config); enableExternalInterrupt(GPIOF_BASE, 10, InterruptTrigger::RISING_EDGE); #endif diff --git a/src/entrypoints/Groundstation/GUI/GUI.h b/src/entrypoints/Groundstation/GUI/GUI.h index 78829456052ad3610f426f0c6da73d4f2ade9207..dad98c7f90d1cd7b0ba3673a79de27f6369f61b7 100644 --- a/src/entrypoints/Groundstation/GUI/GUI.h +++ b/src/entrypoints/Groundstation/GUI/GUI.h @@ -32,13 +32,23 @@ std::string format_link_speed(size_t value) { if (value > 1000000) - return fmt::format("{:.2f} mb/s", static_cast<float>(value) / 1000000); + return fmt::format("{:.2f} Mb/s", static_cast<float>(value) / 1000000); else if (value > 1000) return fmt::format("{:.2f} kb/s", static_cast<float>(value) / 1000); else return fmt::format("{} b/s", value); } +std::string format_freq(float value) +{ + if (value > 1000000) + return fmt::format("{:.2f} MHz", value / 1000000); + else if (value > 1000) + return fmt::format("{:.2f} kHz", value / 1000); + else + return fmt::format("{} Hz", value); +} + class StatsScreen { public: @@ -49,6 +59,7 @@ public: int sent_count; int recv_count; float rssi; + float fei; }; StatsScreen() @@ -64,12 +75,14 @@ public: body.setCell(&lbl_rx_bitrate, 2, 0); body.setCell(&lbl_recv_count, 3, 0); body.setCell(&lbl_rssi, 4, 0); + body.setCell(&lbl_fei, 5, 0); body.setCell(&tx_bitrate, 0, 1); body.setCell(&sent_count, 1, 1); body.setCell(&rx_bitrate, 2, 1); body.setCell(&recv_count, 3, 1); body.setCell(&rssi, 4, 1); + body.setCell(&fei, 5, 1); root.addView(&status, 0.1); root.addView(&body, 1.0); @@ -106,23 +119,26 @@ public: recv_count.setText(fmt::format("{}", data.recv_count)); rssi.setText(fmt::format("{} dBm", data.rssi)); + fei.setText(format_freq(data.fei)); } Boardcore::VerticalLayout root{10}; Boardcore::TextView status{"LOADING"}; - Boardcore::GridLayout body{5, 2}; + Boardcore::GridLayout body{6, 2}; Boardcore::TextView lbl_tx_bitrate{"Tx bitrate:"}; Boardcore::TextView lbl_sent_count{"Packet sent:"}; Boardcore::TextView lbl_rx_bitrate{"Rx bitrate:"}; Boardcore::TextView lbl_recv_count{"Packet received:"}; Boardcore::TextView lbl_rssi{"RSSI:"}; + Boardcore::TextView lbl_fei{"FEI:"}; Boardcore::TextView tx_bitrate{"0 b/s"}; Boardcore::TextView sent_count{"0"}; Boardcore::TextView rx_bitrate{"0 b/s"}; Boardcore::TextView recv_count{"0"}; Boardcore::TextView rssi{"0 dBm"}; + Boardcore::TextView fei{"0 Hz"}; }; class GUI diff --git a/src/entrypoints/Groundstation/groundstation-entry.cpp b/src/entrypoints/Groundstation/groundstation-entry.cpp index 97e802127c75b69b5c1cce28370c30ac311f9520..bf2eeaba6cee1231117b7b75226cc6f8381d3d34 100644 --- a/src/entrypoints/Groundstation/groundstation-entry.cpp +++ b/src/entrypoints/Groundstation/groundstation-entry.cpp @@ -62,6 +62,7 @@ struct Stats int sent_count = 0; int recv_count = 0; float rssi = 0.0f; + float fei = 0.0f; size_t txBitrate() { return (tx.getAverage() * 1000) / DELTA_T; } size_t rxBitrate() { return (rx.getAverage() * 1000) / DELTA_T; } @@ -74,12 +75,12 @@ void recvLoop() while (true) { int len = sx1278->receive(msg, sizeof(msg)); + stats.rssi = sx1278->getLastRxRssi(); + stats.fei = sx1278->getLastRxFei(); stats.recv_count++; stats.cur_rx += len; - stats.rssi = sx1278->getRssi(); - if (len > 0) - usart->write(msg, len); + usart->write(msg, len); } } @@ -91,14 +92,11 @@ void sendLoop() { int len = usart->read(msg, sizeof(msg)); - if (len > 0) - { - ledOn(); - sx1278->send(msg, len); - stats.sent_count++; - stats.cur_tx += len; - ledOff(); - } + ledOn(); + sx1278->send(msg, len); + stats.sent_count++; + stats.cur_tx += len; + ledOff(); } } @@ -138,7 +136,7 @@ int main() // Run default configuration SX1278::Config config; - SX1278::Error err; + config.freq_rf = 412000000; SPIBus bus(SPI4); #ifdef USE_RA01_PC13 @@ -150,6 +148,7 @@ int main() sx1278 = new SX1278(bus, cs); printf("[sx1278] Configuring sx1278...\n"); + SX1278::Error err; if ((err = sx1278->init(config)) != SX1278::Error::NONE) { gui->stats_screen.updateError(err); @@ -185,7 +184,7 @@ int main() StatsScreen::Data data = {stats.txBitrate() * 8, stats.rxBitrate() * 8, stats.sent_count, stats.recv_count, - stats.rssi}; + stats.rssi, stats.fei}; gui->stats_screen.updateStats(data); Thread::sleep(DELTA_T);