aboutsummaryrefslogtreecommitdiffstats
path: root/src/fig0_28.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2017-04-27 01:39:20 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2017-04-27 01:39:20 +0200
commit0616c12772c4995d0a22b803127af156a37a3a7d (patch)
tree0561c72fa58cc71209edc196e4706b850b000868 /src/fig0_28.cpp
parent36d70772c7ba15bf1d769f7ec54ba129377f4617 (diff)
downloadetisnoop-0616c12772c4995d0a22b803127af156a37a3a7d.tar.gz
etisnoop-0616c12772c4995d0a22b803127af156a37a3a7d.tar.bz2
etisnoop-0616c12772c4995d0a22b803127af156a37a3a7d.zip
Refactor FIG0/X message generation
Diffstat (limited to 'src/fig0_28.cpp')
-rw-r--r--src/fig0_28.cpp36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/fig0_28.cpp b/src/fig0_28.cpp
index f0cbbdd..c729b03 100644
--- a/src/fig0_28.cpp
+++ b/src/fig0_28.cpp
@@ -1,6 +1,6 @@
/*
Copyright (C) 2014 CSP Innovazione nelle ICT s.c.a r.l. (http://www.csp.it/)
- Copyright (C) 2016 Matthias P. Braendli (http://www.opendigitalradio.org)
+ Copyright (C) 2017 Matthias P. Braendli (http://www.opendigitalradio.org)
Copyright (C) 2015 Data Path
This program is free software: you can redistribute it and/or modify
@@ -49,42 +49,40 @@ bool fig0_28_is_complete(int cluster_id)
// FIG 0/28 FM Announcement switching
// ETSI EN 300 401 8.1.11.2.2
-bool fig0_28(fig0_common_t& fig0, const display_settings_t &disp)
+fig_result_t fig0_28(fig0_common_t& fig0, const display_settings_t &disp)
{
uint16_t PI;
uint8_t i = 1, Cluster_Id_Current_Ensemble, Region_Id_Current_Ensemble;
bool New_flag, Rfa;
- char tmpbuf[256];
- char desc[256];
+ fig_result_t r;
uint8_t* f = fig0.f;
- bool complete = false;
- while (i < (fig0.figlen - 3)) {
+ while (i < fig0.figlen - 3) {
// iterate over FM announcement switching
Cluster_Id_Current_Ensemble = f[i];
- complete = fig0_28_is_complete(Cluster_Id_Current_Ensemble);
+ r.complete = fig0_28_is_complete(Cluster_Id_Current_Ensemble);
New_flag = f[i+1] >> 7;
Rfa = (f[i+1] >> 6) & 0x01;
Region_Id_Current_Ensemble = f[i+1] & 0x3F;
PI = ((uint16_t)f[i+2] << 8) | (uint16_t)f[i+3];
- sprintf(desc, "Cluster Id Current Ensemble=0x%X", Cluster_Id_Current_Ensemble);
+ r.msgs.push_back(strprintf("Cluster Id Current Ensemble=0x%X", Cluster_Id_Current_Ensemble));
+
if (Cluster_Id_Current_Ensemble == 0) {
- strcat(desc, " invalid value");
- fprintf(stderr, "WARNING: FIG 0/%d Cluster Id Current Ensemble invalid value 0\n", fig0.ext());
+ r.errors.push_back("Cluster Id Current Ensemble invalid value 0");
}
- sprintf(tmpbuf, ", New flag=%d %s announcement",
- New_flag, New_flag?"newly introduced":"repeated");
- strcat(desc, tmpbuf);
+
+ r.msgs.emplace_back(1, strprintf("New flag=%d %s announcement",
+ New_flag, New_flag?"newly introduced":"repeated"));
+
if (Rfa != 0) {
- sprintf(tmpbuf, ", Rfa=%d invalid value", Rfa);
- strcat(desc, tmpbuf);
+ r.errors.push_back(strprintf("Rfa=%d invalid value", Rfa));
}
- sprintf(tmpbuf, ", Region Id Current Ensemble=0x%X, PI=0x%X", Region_Id_Current_Ensemble, PI);
- strcat(desc, tmpbuf);
- printbuf(desc, disp+1, NULL, 0);
+
+ r.msgs.emplace_back(1, strprintf("Region Id Current Ensemble=0x%X", Region_Id_Current_Ensemble));
+ r.msgs.emplace_back(1, strprintf("PI=0x%X", PI));
i += 4;
}
- return complete;
+ return r;
}