diff --git a/firmware/application/apps/ui_aprs_tx.hpp b/firmware/application/apps/ui_aprs_tx.hpp index 173d9fd70..970321072 100644 --- a/firmware/application/apps/ui_aprs_tx.hpp +++ b/firmware/application/apps/ui_aprs_tx.hpp @@ -82,6 +82,7 @@ private: 6, SymField::SYMFIELD_ALPHANUM }; + NumberField num_ssid_dest { { 19 * 8, 2 * 16 }, 2, diff --git a/firmware/application/protocols/aprs.cpp b/firmware/application/protocols/aprs.cpp index 96cf8df6f..6dbbbb72e 100644 --- a/firmware/application/protocols/aprs.cpp +++ b/firmware/application/protocols/aprs.cpp @@ -38,9 +38,13 @@ void make_aprs_frame(const char * src_address, const uint32_t src_ssid, char address[14] = { 0 }; memcpy(&address[0], dest_address, 6); - address[6] = (dest_ssid & 15) << 1; memcpy(&address[7], src_address, 6); - address[13] = (src_ssid & 15) << 1; + //euquiq: According to ax.25 doc section 2.2.13.x.x and 2.4.1.2 + // SSID need bits 5.6 set, so later when shifted it will end up being 011xxxx0 (xxxx = SSID number) + // Notice that if need to signal usage of AX.25 V2.0, (dest_ssid | 112); (MSb will need to be set at the end) + address[6] = (dest_ssid | 48); + address[13] = (src_ssid | 48); + frame.make_ui_frame(address, 0x03, protocol_id_t::NO_LAYER3, payload); } diff --git a/firmware/application/protocols/ax25.cpp b/firmware/application/protocols/ax25.cpp index ea1744f6d..492f6cfd5 100644 --- a/firmware/application/protocols/ax25.cpp +++ b/firmware/application/protocols/ax25.cpp @@ -51,32 +51,37 @@ void AX25Frame::NRZI_add_bit(const uint32_t bit) { } } -void AX25Frame::add_byte(uint8_t byte, bool is_flag, bool is_data) { - uint32_t bit; - +void AX25Frame::add_byte(uint8_t byte, bool is_flag, bool is_data) +{ + bool bit; + if (is_data) crc_ccitt.process_byte(byte); - - for (uint32_t i = 0; i < 8; i++) { + + for (uint32_t i = 0; i < 8; i++) + { bit = (byte >> i) & 1; - + + NRZI_add_bit(bit); + if (bit) + { ones_counter++; + if ((ones_counter == 5) && (!is_flag)) + { + NRZI_add_bit(0); + ones_counter = 0; + } + } else ones_counter = 0; - - if ((ones_counter == 6) && (!is_flag)) { - NRZI_add_bit(0); - ones_counter = 0; - } - - NRZI_add_bit(bit); } } -void AX25Frame::flush() { +void AX25Frame::flush() +{ if (bit_counter) - *bb_data_ptr = current_byte << (7 - bit_counter); + *bb_data_ptr = current_byte << (8 - bit_counter); //euquiq: This was 7 but there are 8 bits }; void AX25Frame::add_flag() { diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index ae4e3bb2a..4cc4ebe93 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -485,7 +485,7 @@ TransmittersMenuView::TransmittersMenuView(NavigationView& nav) { add_items({ //{ "..", ui::Color::light_grey(),&bitmap_icon_previous, [&nav](){ nav.pop(); } }, { "ADS-B [S]", ui::Color::yellow(), &bitmap_icon_adsb, [&nav](){ nav.push(); } }, - { "APRS", ui::Color::orange(), &bitmap_icon_aprs, [&nav](){ nav.push(); } }, + { "APRS", ui::Color::green(), &bitmap_icon_aprs, [&nav](){ nav.push(); } }, { "BHT Xy/EP", ui::Color::green(), &bitmap_icon_bht, [&nav](){ nav.push(); } }, { "GPS Sim", ui::Color::yellow(), &bitmap_icon_gps_sim, [&nav](){ nav.push(); } }, { "Jammer", ui::Color::yellow(), &bitmap_icon_jammer, [&nav](){ nav.push(); } },