From 67c3edc5b8e783d9537867f08bbd04e00cc7832f Mon Sep 17 00:00:00 2001 From: Paul Williamson Date: Tue, 12 Jul 2022 15:58:01 -0700 Subject: [PATCH] Rearrange frame header so flags precede token --- apps/opv-mod.cpp | 15 +++++++-------- include/opvcxx/OPVFrameHeader.h | 14 +++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/opv-mod.cpp b/apps/opv-mod.cpp index 42f0e65..46f5536 100644 --- a/apps/opv-mod.cpp +++ b/apps/opv-mod.cpp @@ -408,8 +408,8 @@ void dump_fheader(const fheader_t header) } // - if (header[9] & 0x80) std::cerr << "last "; - if (header[9] & 0x40) std::cerr << "BERT"; + if (header[6] & 0x80) std::cerr << "last "; + if (header[6] & 0x40) std::cerr << "BERT"; std::cerr << std::endl << std::dec; } @@ -429,10 +429,9 @@ fheader_t fill_fheader(const std::string& source_callsign, OPVFrameHeader::token uint8_t flags = 0; if (is_bert) flags |= 0x40; - auto it = std::copy(encoded_callsign.begin(), encoded_callsign.end(), header.begin()); - it = std::copy(access_token.begin(), access_token.end(), it); - header[9] = flags; - //!!! fill in the rest of the header + std::copy(encoded_callsign.begin(), encoded_callsign.end(), header.begin()); + std::copy(access_token.begin(), access_token.end(), header.begin() + 9); + header[6] = flags; if (config->verbose) dump_fheader(header); @@ -443,7 +442,7 @@ fheader_t fill_fheader(const std::string& source_callsign, OPVFrameHeader::token // Modify the frame header to set the EOS (end of stream) bit void set_last_frame_bit(fheader_t& fh) { - fh[9] |= 0x80; + fh[6] |= 0x80; } @@ -591,7 +590,7 @@ int main(int argc, char* argv[]) access_token[1] = (config->token & 0x00ff00) >> 8; access_token[2] = (config->token & 0x0000ff); - auto fh = fill_fheader(config->source_address, access_token, config->bert != 0); //!!! add parameters + auto fh = fill_fheader(config->source_address, access_token, config->bert != 0); auto encoded_fh = encode_fheader(fh); signal(SIGINT, &signal_handler); diff --git a/include/opvcxx/OPVFrameHeader.h b/include/opvcxx/OPVFrameHeader.h index 455a080..7fb59e2 100644 --- a/include/opvcxx/OPVFrameHeader.h +++ b/include/opvcxx/OPVFrameHeader.h @@ -162,20 +162,20 @@ struct OPVFrameHeader for (auto x : callsign) if (x) std::cerr << x; } - // If the decoded authentication token has changed, store it - if (! std::equal(raw_fh.begin() + 6, raw_fh.begin() + 9, raw_fheader_.begin() + 6)) + // If the decoded flags have changed, store them + if (! std::equal(raw_fh.begin() + 12, raw_fh.begin() + 18, raw_fheader_.begin() + 12)) { result = HeaderResult::UPDATED; - std::copy(raw_fh.begin() + 6, raw_fh.begin() + 9, token.begin()); - std::cerr << "Token: " << std::hex << token[0] << token[1] << token[2] << std::dec; + flags = ((raw_fh[6] << 16) & 0xff0000) | ((raw_fh[7] << 8) & 0x00ff00) | (raw_fh[8] & 0x0000ff); + std::cerr << "Flags: " << std::hex << flags << std::dec; } - // If the decoded flags have changed, store them + // If the decoded authentication token has changed, store it if (! std::equal(raw_fh.begin() + 18, raw_fh.end(), raw_fheader_.begin() + 18)) { result = HeaderResult::UPDATED; - flags = ((raw_fh[9] << 16) & 0xff0000) | ((raw_fh[10] << 8) & 0x00ff00) | (raw_fh[11] & 0x0000ff); - std::cerr << "Flags: " << std::hex << flags << std::dec; + std::copy(raw_fh.begin() + 9, raw_fh.end(), token.begin()); + std::cerr << "Token: " << std::hex << token[0] << token[1] << token[2] << std::dec; } if (result == HeaderResult::UPDATED)