FLEX RX: fix long-address numeric decode, improve short message format (#3136)

- Fix long-address numeric message decoding: read body[0] from Vy (j+1)
  for multi-word messages, from w1 for single-word. Fix MF word count
  for long addresses (n_field words, not n_field+1).
- Fix long-address short message: read 5 additional BCD digits from Vy
  for 8-digit decode.
- Fix BCD table: index 10 is '.' (dot) not ' ' (space) in both RX and TX.
- Clean up address decode: identify address type by value range per
  Table 3.8.1-1. Remove is_group/is_temp_group from packet structs.
- Rename SMSG to SHORT. Format message payload directly in baseband:
  TONE, NUM abc, SRC N, SRC N N=M R=R, RESERVED hex.
- Add BIW1 heartbeat packet (biw_field=0xFF) on every decoded frame.
- Move timezone table to file scope, simplify console log_message,
  add No signal initial status, simplify serial BIW output format.
This commit is contained in:
VasylSamoilov
2026-04-18 22:15:05 +03:00
committed by GitHub
parent 3f10663bc9
commit fc5beb0c09
6 changed files with 197 additions and 221 deletions
+1 -3
View File
@@ -121,8 +121,6 @@ struct FlexDecode {
int long_address = 0;
int64_t capcode = 0;
AddrType addr_type = AddrType::SHORT;
int is_group = 0;
int is_temp_group = 0;
int is_priority = 0;
};
@@ -184,7 +182,7 @@ class FlexProcessor : public BasebandProcessor {
// Parsing
void parse_capcode(uint32_t aw1);
void parse_alphanumeric(uint32_t* phaseptr, const uint8_t* word_bad, char PhaseNo, int mw1, int mw2, int flex_groupmessage);
void parse_numeric(uint32_t* phaseptr, char PhaseNo, int j);
void parse_numeric(uint32_t* phaseptr, const uint8_t* word_bad, char PhaseNo, int j);
void parse_tone_only(uint32_t* phaseptr, char PhaseNo, int j);
void parse_unknown(uint32_t* phaseptr, char PhaseNo, int mw1, int mw2);