summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fig/FIG0_0.cpp16
-rw-r--r--src/fig/FIG0_0.h2
-rw-r--r--src/fig/FIG0_1.cpp38
-rw-r--r--src/fig/FIG0_1.h2
-rw-r--r--src/fig/FIG0_10.cpp45
-rw-r--r--src/fig/FIG0_10.h2
-rw-r--r--src/fig/FIG0_13.cpp26
-rw-r--r--src/fig/FIG0_13.h2
-rw-r--r--src/fig/FIG0_17.cpp14
-rw-r--r--src/fig/FIG0_17.h2
-rw-r--r--src/fig/FIG0_18.cpp9
-rw-r--r--src/fig/FIG0_18.h2
-rw-r--r--src/fig/FIG0_19.cpp11
-rw-r--r--src/fig/FIG0_19.h2
-rw-r--r--src/fig/FIG0_2.cpp57
-rw-r--r--src/fig/FIG0_2.h2
-rw-r--r--src/fig/FIG0_21.cpp60
-rw-r--r--src/fig/FIG0_21.h4
-rw-r--r--src/fig/FIG0_3.cpp27
-rw-r--r--src/fig/FIG0_3.h2
-rw-r--r--src/fig/FIG0_5.cpp9
-rw-r--r--src/fig/FIG0_5.h2
-rw-r--r--src/fig/FIG0_6.cpp27
-rw-r--r--src/fig/FIG0_6.h2
-rw-r--r--src/fig/FIG0_8.cpp29
-rw-r--r--src/fig/FIG0_8.h2
-rw-r--r--src/fig/FIG0_9.cpp16
-rw-r--r--src/fig/FIG0_9.h2
-rw-r--r--src/fig/FIG0structs.h359
29 files changed, 387 insertions, 386 deletions
diff --git a/src/fig/FIG0_0.cpp b/src/fig/FIG0_0.cpp
index b4b0b3a..9a99984 100644
--- a/src/fig/FIG0_0.cpp
+++ b/src/fig/FIG0_0.cpp
@@ -23,11 +23,27 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_0.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_0 {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
+
+ uint16_t EId;
+ uint8_t CIFcnt_hight:5;
+ uint8_t Al:1;
+ uint8_t Change:2;
+ uint8_t CIFcnt_low:8;
+} PACKED;
+
//=========== FIG 0/0 ===========
FillStatus FIG0_0::fill(uint8_t *buf, size_t max_size)
diff --git a/src/fig/FIG0_0.h b/src/fig/FIG0_0.h
index a5310c8..abed53a 100644
--- a/src/fig/FIG0_0.h
+++ b/src/fig/FIG0_0.h
@@ -27,8 +27,6 @@
#include <cstdint>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/0, Multiplex Configuration Info (MCI),
diff --git a/src/fig/FIG0_1.cpp b/src/fig/FIG0_1.cpp
index 6ed40dd..60704f2 100644
--- a/src/fig/FIG0_1.cpp
+++ b/src/fig/FIG0_1.cpp
@@ -23,11 +23,41 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_1.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_1 {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
+} PACKED;
+
+struct FIGtype0_1_SubChannel_ShortF {
+ uint8_t StartAdress_high:2;
+ uint8_t SubChId:6;
+ uint8_t StartAdress_low:8;
+ uint8_t TableIndex:6;
+ uint8_t TableSwitch:1;
+ uint8_t Short_Long_form:1;
+} PACKED;
+
+struct FIGtype0_1_SubChannel_LongF {
+ uint8_t StartAdress_high:2;
+ uint8_t SubChId:6;
+ uint8_t StartAdress_low:8;
+ uint8_t Sub_ChannelSize_high:2;
+ uint8_t ProtectionLevel:2;
+ uint8_t Option:3;
+ uint8_t Short_Long_form:1;
+ uint8_t Sub_ChannelSize_low:8;
+} PACKED;
+
FIG0_1::FIG0_1(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false),
@@ -133,8 +163,8 @@ FillStatus FIG0_1::fill(uint8_t *buf, size_t max_size)
}
if (protection->form == UEP) {
- FIG_01_SubChannel_ShortF *fig0_1subchShort =
- (FIG_01_SubChannel_ShortF*)buf;
+ FIGtype0_1_SubChannel_ShortF *fig0_1subchShort =
+ (FIGtype0_1_SubChannel_ShortF*)buf;
fig0_1subchShort->SubChId = (*subchannelFIG0_1)->id;
fig0_1subchShort->StartAdress_high =
@@ -156,8 +186,8 @@ FillStatus FIG0_1::fill(uint8_t *buf, size_t max_size)
<< " ix=" << subch_iter_ix;
}
else if (protection->form == EEP) {
- FIG_01_SubChannel_LongF *fig0_1subchLong1 =
- (FIG_01_SubChannel_LongF*)buf;
+ FIGtype0_1_SubChannel_LongF *fig0_1subchLong1 =
+ (FIGtype0_1_SubChannel_LongF*)buf;
fig0_1subchLong1->SubChId = (*subchannelFIG0_1)->id;
fig0_1subchLong1->StartAdress_high =
diff --git a/src/fig/FIG0_1.h b/src/fig/FIG0_1.h
index 6da4aec..fd98037 100644
--- a/src/fig/FIG0_1.h
+++ b/src/fig/FIG0_1.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/1, MIC, Sub-Channel Organization,
diff --git a/src/fig/FIG0_10.cpp b/src/fig/FIG0_10.cpp
index e4ff710..3ce2847 100644
--- a/src/fig/FIG0_10.cpp
+++ b/src/fig/FIG0_10.cpp
@@ -23,11 +23,56 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_10.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_10_LongForm {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
+
+ uint8_t MJD_high:7;
+ uint8_t RFU:1;
+
+ uint8_t MJD_med;
+
+ uint8_t Hours_high:3;
+ uint8_t UTC:1;
+ uint8_t ConfInd:1;
+ uint8_t LSI:1;
+ uint8_t MJD_low:2;
+
+ uint8_t Minutes:6;
+ uint8_t Hours_low:2;
+
+ uint8_t Milliseconds_high:2;
+ uint8_t Seconds:6;
+
+ uint8_t Milliseconds_low;
+
+ void setMJD(uint32_t date) {
+ MJD_high = (date >> 10) & 0x7f;
+ MJD_med = (date >> 2) & 0xff;
+ MJD_low = date & 0x03;
+ }
+ void setHours(uint16_t hours) {
+ Hours_high = (hours >> 2) & 0x07;
+ Hours_low = hours & 0x03;
+ }
+
+ void setMilliseconds(uint16_t ms) {
+ Milliseconds_high = (ms >> 8) & 0x03;
+ Milliseconds_low = ms & 0xFF;
+ }
+} PACKED;
+
FIG0_10::FIG0_10(FIGRuntimeInformation *rti) :
m_rti(rti)
{
diff --git a/src/fig/FIG0_10.h b/src/fig/FIG0_10.h
index 2991189..9210e0d 100644
--- a/src/fig/FIG0_10.h
+++ b/src/fig/FIG0_10.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/10
diff --git a/src/fig/FIG0_13.cpp b/src/fig/FIG0_13.cpp
index 51704f4..40a0be8 100644
--- a/src/fig/FIG0_13.cpp
+++ b/src/fig/FIG0_13.cpp
@@ -23,11 +23,37 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_13.h"
#include "utils.h"
namespace FIC {
+// See EN 300 401, Clause 8.1.20 for the FIG0_13 description
+struct FIG0_13_shortAppInfo {
+ uint16_t SId;
+ uint8_t No:4;
+ uint8_t SCIdS:4;
+} PACKED;
+
+struct FIG0_13_longAppInfo {
+ uint32_t SId;
+ uint8_t No:4;
+ uint8_t SCIdS:4;
+} PACKED;
+
+struct FIG0_13_app {
+ uint8_t typeHigh;
+ uint8_t length:5;
+ uint8_t typeLow:3;
+ void setType(uint16_t type) {
+ typeHigh = type >> 3;
+ typeLow = type & 0x1f;
+ }
+ uint16_t xpad;
+} PACKED;
+
+
FIG0_13::FIG0_13(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false),
diff --git a/src/fig/FIG0_13.h b/src/fig/FIG0_13.h
index 4c29278..4465aef 100644
--- a/src/fig/FIG0_13.h
+++ b/src/fig/FIG0_13.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/13
diff --git a/src/fig/FIG0_17.cpp b/src/fig/FIG0_17.cpp
index 2f5f03e..03d8814 100644
--- a/src/fig/FIG0_17.cpp
+++ b/src/fig/FIG0_17.cpp
@@ -23,11 +23,25 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_17.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_17 {
+ uint16_t SId;
+
+ uint8_t rfa2_high:4;
+ uint8_t rfu1:2;
+ uint8_t rfa1:1;
+ uint8_t SD:1; // Static/Dynamic
+
+ uint8_t IntCode:5;
+ uint8_t rfu2:1;
+ uint8_t rfa2_low:2;
+} PACKED;
+
FIG0_17::FIG0_17(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
diff --git a/src/fig/FIG0_17.h b/src/fig/FIG0_17.h
index f2861d8..2d5088b 100644
--- a/src/fig/FIG0_17.h
+++ b/src/fig/FIG0_17.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/17
diff --git a/src/fig/FIG0_18.cpp b/src/fig/FIG0_18.cpp
index 9edc3d5..2d1a567 100644
--- a/src/fig/FIG0_18.cpp
+++ b/src/fig/FIG0_18.cpp
@@ -23,11 +23,20 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_18.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_18 {
+ uint16_t SId;
+ uint16_t ASu;
+ uint8_t NumClusters:5;
+ uint8_t Rfa:3;
+ /* Followed by uint8_t Cluster IDs */
+} PACKED;
+
FIG0_18::FIG0_18(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
diff --git a/src/fig/FIG0_18.h b/src/fig/FIG0_18.h
index 7712efb..f73687c 100644
--- a/src/fig/FIG0_18.h
+++ b/src/fig/FIG0_18.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/18
diff --git a/src/fig/FIG0_19.cpp b/src/fig/FIG0_19.cpp
index 8b9aca8..6da72a9 100644
--- a/src/fig/FIG0_19.cpp
+++ b/src/fig/FIG0_19.cpp
@@ -23,11 +23,22 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_19.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_19 {
+ uint8_t ClusterId;
+ uint16_t ASw;
+ uint8_t SubChId:6;
+ uint8_t RegionFlag:1; // shall be zero
+ uint8_t NewFlag:1;
+ // Region and RFa not supported
+} PACKED;
+
+
FIG0_19::FIG0_19(FIGRuntimeInformation *rti) :
m_rti(rti)
{ }
diff --git a/src/fig/FIG0_19.h b/src/fig/FIG0_19.h
index ce76f30..1d8f4a5 100644
--- a/src/fig/FIG0_19.h
+++ b/src/fig/FIG0_19.h
@@ -27,8 +27,6 @@
#include <cstdint>
#include <vector>
-
-#include "fig/FIG0structs.h"
#include "fig/TransitionHandler.h"
namespace FIC {
diff --git a/src/fig/FIG0_2.cpp b/src/fig/FIG0_2.cpp
index 04bff60..0e5c13c 100644
--- a/src/fig/FIG0_2.cpp
+++ b/src/fig/FIG0_2.cpp
@@ -23,11 +23,68 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_2.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_2 {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
+} PACKED;
+
+
+struct FIGtype0_2_Service {
+ uint16_t SId;
+ uint8_t NbServiceComp:4;
+ uint8_t CAId:3;
+ uint8_t Local_flag:1;
+} PACKED;
+
+
+struct FIGtype0_2_Service_data {
+ uint32_t SId;
+ uint8_t NbServiceComp:4;
+ uint8_t CAId:3;
+ uint8_t Local_flag:1;
+} PACKED;
+
+
+struct FIGtype0_2_audio_component {
+ uint8_t ASCTy:6;
+ uint8_t TMid:2;
+ uint8_t CA_flag:1;
+ uint8_t PS:1;
+ uint8_t SubChId:6;
+} PACKED;
+
+
+struct FIGtype0_2_data_component {
+ uint8_t DSCTy:6;
+ uint8_t TMid:2;
+ uint8_t CA_flag:1;
+ uint8_t PS:1;
+ uint8_t SubChId:6;
+} PACKED;
+
+
+struct FIGtype0_2_packet_component {
+ uint8_t SCId_high:6;
+ uint8_t TMid:2;
+ uint8_t CA_flag:1;
+ uint8_t PS:1;
+ uint8_t SCId_low:6;
+ void setSCId(uint16_t SCId) {
+ SCId_high = SCId >> 6;
+ SCId_low = SCId & 0x3f;
+ }
+} PACKED;
+
FIG0_2::FIG0_2(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false),
diff --git a/src/fig/FIG0_2.h b/src/fig/FIG0_2.h
index 4190922..2f35b21 100644
--- a/src/fig/FIG0_2.h
+++ b/src/fig/FIG0_2.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/2, MCI, Service Organization, one instance of
// FIGtype0_2_Service for each subchannel
diff --git a/src/fig/FIG0_21.cpp b/src/fig/FIG0_21.cpp
index 515e67a..402f064 100644
--- a/src/fig/FIG0_21.cpp
+++ b/src/fig/FIG0_21.cpp
@@ -23,11 +23,39 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_21.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_21_header {
+ // This was RegionId in EN 300 401 V1.4.1
+ uint8_t rfaHigh;
+ uint8_t rfaLow:3;
+
+ uint8_t length_fi:5;
+} PACKED;
+
+struct FIGtype0_21_fi_list_header {
+ uint16_t id;
+ uint8_t range_modulation:4;
+ uint8_t continuity:1;
+ uint8_t length_freq_list:3;
+} PACKED;
+
+struct FIGtype0_21_fi_dab_entry {
+ uint8_t control_field:5;
+ uint8_t freqHigh:3;
+ uint16_t freqLow;
+
+ void setFreq(uint32_t freq) {
+ freqHigh = (freq >> 16) & 0x7;
+ freqLow = freq & 0xffff;
+ }
+} PACKED;
+
+
FIG0_21::FIG0_21(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
@@ -36,10 +64,14 @@ FIG0_21::FIG0_21(FIGRuntimeInformation *rti) :
FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
{
+#define FIG0_21_TRACE debug
FillStatus fs;
size_t remaining = max_size;
auto ensemble = m_rti->ensemble;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fill init " <<
+ (m_initialised ? 1 : 0) << " ********************************";
+
if (not m_initialised) {
freqInfoFIG0_21 = ensemble->frequency_information.begin();
m_initialised = true;
@@ -74,8 +106,11 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
const size_t required_size = sizeof(struct FIGtype0_21_header) + required_fi_size;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::loop " << (*freqInfoFIG0_21)->uid;
+
if (fig0 == nullptr) {
if (remaining < 2 + required_size) {
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::no space for fig0";
break;
}
fig0 = (FIGtype0*)buf;
@@ -93,24 +128,34 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
remaining -= 2;
}
else if (remaining < required_size) {
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::no space";
break;
}
for (const auto& fle : (*freqInfoFIG0_21)->frequency_information) {
auto *fig0_21_header = (FIGtype0_21_header*)buf;
- fig0_21_header->rfa = 0; // This was RegionId in EN 300 401 V1.4.1
+ fig0_21_header->rfaHigh = 0;
+ fig0_21_header->rfaLow = 0;
switch (fle.rm) {
case RangeModulation::dab_ensemble:
fig0_21_header->length_fi = fle.fi_dab.frequencies.size();
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fle hdr DAB " <<
+ fle.fi_dab.frequencies.size();
break;
case RangeModulation::fm_with_rds:
fig0_21_header->length_fi = fle.fi_fm.frequencies.size();
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fle hdr FM " <<
+ fle.fi_fm.frequencies.size();
break;
case RangeModulation::drm:
fig0_21_header->length_fi = fle.fi_drm.frequencies.size();
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fle hdr DRM " <<
+ fle.fi_drm.frequencies.size();
break;
case RangeModulation::amss:
fig0_21_header->length_fi = fle.fi_amss.frequencies.size();
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fle hdr AMSS " <<
+ fle.fi_amss.frequencies.size();
break;
}
@@ -141,6 +186,8 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
fig0->Length += 3;
buf += 3;
remaining -= 3;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::freq " <<
+ freq.frequency;
}
break;
case RangeModulation::fm_with_rds:
@@ -154,6 +201,8 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
fig0->Length += 1;
buf += 1;
remaining -= 1;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::freq " <<
+ freq;
}
break;
case RangeModulation::drm:
@@ -173,6 +222,8 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
fig0->Length += 2;
buf += 2;
remaining -= 2;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::freq " <<
+ freq;
}
break;
case RangeModulation::amss:
@@ -192,14 +243,21 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
fig0->Length += 2;
buf += 2;
remaining -= 2;
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::freq " <<
+ freq;
}
break;
} // switch (RM)
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::fle end len=" <<
+ static_cast<size_t>(fig0->Length) << " rem=" << remaining;
} // for over fle
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::next FI "
+ " ********************************";
} // for over FI
if (freqInfoFIG0_21 == ensemble->frequency_information.end()) {
fs.complete_fig_transmitted = true;
+ freqInfoFIG0_21 = ensemble->frequency_information.begin();
}
fs.num_bytes_written = max_size - remaining;
diff --git a/src/fig/FIG0_21.h b/src/fig/FIG0_21.h
index 2542586..5ae57f7 100644
--- a/src/fig/FIG0_21.h
+++ b/src/fig/FIG0_21.h
@@ -29,8 +29,6 @@
#include <vector>
#include <memory>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/21
@@ -40,7 +38,7 @@ class FIG0_21 : public IFIG
public:
FIG0_21(FIGRuntimeInformation* rti);
virtual FillStatus fill(uint8_t *buf, size_t max_size);
- virtual FIG_rate repetition_rate(void) { return FIG_rate::E; }
+ virtual FIG_rate repetition_rate(void) { return FIG_rate::B; }
virtual const int figtype(void) const { return 0; }
virtual const int figextension(void) const { return 21; }
diff --git a/src/fig/FIG0_3.cpp b/src/fig/FIG0_3.cpp
index 2e84e20..b85c853 100644
--- a/src/fig/FIG0_3.cpp
+++ b/src/fig/FIG0_3.cpp
@@ -23,11 +23,38 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_3.h"
#include "utils.h"
namespace FIC {
+/* Warning: When bit SCCA_flag is unset(0), the multiplexer R&S does not send
+ * the SCCA field. But, in the Factum ETI analyzer, if this field is not there,
+ * it is an error.
+ */
+struct FIGtype0_3 {
+ uint8_t SCId_high;
+ uint8_t SCCA_flag:1;
+ uint8_t rfa:3;
+ uint8_t SCId_low:4;
+ uint8_t DSCTy:6;
+ uint8_t rfu:1;
+ uint8_t DG_flag:1;
+ uint8_t Packet_address_high:2;
+ uint8_t SubChId:6;
+ uint8_t Packet_address_low;
+ uint16_t SCCA;
+ void setSCId(uint16_t SCId) {
+ SCId_high = SCId >> 4;
+ SCId_low = SCId & 0xf;
+ }
+ void setPacketAddress(uint16_t address) {
+ Packet_address_high = address >> 8;
+ Packet_address_low = address & 0xff;
+ }
+} PACKED;
+
FIG0_3::FIG0_3(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
diff --git a/src/fig/FIG0_3.h b/src/fig/FIG0_3.h
index 7b77086..d2b1563 100644
--- a/src/fig/FIG0_3.h
+++ b/src/fig/FIG0_3.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/3
diff --git a/src/fig/FIG0_5.cpp b/src/fig/FIG0_5.cpp
index 8650d29..8691a6b 100644
--- a/src/fig/FIG0_5.cpp
+++ b/src/fig/FIG0_5.cpp
@@ -23,11 +23,20 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_5.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_5_short {
+ uint8_t SubChId:6;
+ uint8_t rfu:1;
+ uint8_t LS:1;
+
+ uint8_t language;
+} PACKED;
+
FIG0_5::FIG0_5(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
diff --git a/src/fig/FIG0_5.h b/src/fig/FIG0_5.h
index 2fc92e7..51ac177 100644
--- a/src/fig/FIG0_5.h
+++ b/src/fig/FIG0_5.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/5
diff --git a/src/fig/FIG0_6.cpp b/src/fig/FIG0_6.cpp
index 5174ec2..51df05b 100644
--- a/src/fig/FIG0_6.cpp
+++ b/src/fig/FIG0_6.cpp
@@ -23,11 +23,38 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_6.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_6 {
+ uint8_t LSN_high:4; // Linkage Set Number
+ uint8_t ILS:1; // 0=national / 1=international
+ uint8_t SH:1; // 0=Soft link / 1=Hard link
+ uint8_t LA:1; // Linkage actuator
+ uint8_t IdListFlag:1; // Marks the presence of the list
+
+ uint8_t LSN_low; // Linkage Set Number
+
+ void setLSN(uint16_t LSN) {
+ LSN_high = LSN >> 8;
+ LSN_low = LSN & 0xff;
+ }
+} PACKED;
+
+#define FIG0_6_IDLQ_DAB 0x0
+#define FIG0_6_IDLQ_RDS 0x1
+#define FIG0_6_IDLQ_DRM_AMSS 0x3
+
+struct FIGtype0_6_header {
+ uint8_t num_ids:4; // number of Ids to follow in the list
+ uint8_t rfa:1; // must be 0
+ uint8_t IdLQ:2; // Identifier List Qualifier, see above defines
+ uint8_t rfu:1; // must be 0
+} PACKED;
+
FIG0_6::FIG0_6(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false)
diff --git a/src/fig/FIG0_6.h b/src/fig/FIG0_6.h
index e7c81c5..4fd7fd1 100644
--- a/src/fig/FIG0_6.h
+++ b/src/fig/FIG0_6.h
@@ -29,8 +29,6 @@
#include <vector>
#include <memory>
-#include "fig/FIG0structs.h"
-
namespace FIC {
/* TODO
diff --git a/src/fig/FIG0_8.cpp b/src/fig/FIG0_8.cpp
index 2d25547..8d69a1d 100644
--- a/src/fig/FIG0_8.cpp
+++ b/src/fig/FIG0_8.cpp
@@ -23,11 +23,40 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_8.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_8_short {
+ uint8_t SCIdS:4;
+ uint8_t rfa_1:3;
+ uint8_t ext:1;
+ uint8_t Id:6;
+ uint8_t MscFic:1;
+ uint8_t LS:1;
+ uint8_t rfa_2;
+} PACKED;
+
+struct FIGtype0_8_long {
+ uint8_t SCIdS:4;
+ uint8_t rfa_1:3;
+ uint8_t ext:1;
+ uint8_t SCId_high:4;
+ uint8_t rfa:3;
+ uint8_t LS:1;
+ uint8_t SCId_low;
+ uint8_t rfa_2;
+ void setSCId(uint16_t id) {
+ SCId_high = id >> 8;
+ SCId_low = id & 0xff;
+ }
+ uint16_t getSCid() {
+ return (SCId_high << 8) | SCId_low;
+ }
+} PACKED;
+
FIG0_8::FIG0_8(FIGRuntimeInformation *rti) :
m_rti(rti),
m_initialised(false),
diff --git a/src/fig/FIG0_8.h b/src/fig/FIG0_8.h
index 600f386..81d00ea 100644
--- a/src/fig/FIG0_8.h
+++ b/src/fig/FIG0_8.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/8
diff --git a/src/fig/FIG0_9.cpp b/src/fig/FIG0_9.cpp
index 00c2995..06f2125 100644
--- a/src/fig/FIG0_9.cpp
+++ b/src/fig/FIG0_9.cpp
@@ -23,11 +23,27 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "fig/FIG0structs.h"
#include "fig/FIG0_9.h"
#include "utils.h"
namespace FIC {
+struct FIGtype0_9 {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
+
+ uint8_t ensembleLto:6;
+ uint8_t rfa1:1;
+ uint8_t ext:1;
+ uint8_t ensembleEcc;
+ uint8_t tableId;
+} PACKED;
+
FIG0_9::FIG0_9(FIGRuntimeInformation *rti) :
m_rti(rti) {}
diff --git a/src/fig/FIG0_9.h b/src/fig/FIG0_9.h
index 57b2f7b..d5714b8 100644
--- a/src/fig/FIG0_9.h
+++ b/src/fig/FIG0_9.h
@@ -28,8 +28,6 @@
#include <cstdint>
#include <vector>
-#include "fig/FIG0structs.h"
-
namespace FIC {
// FIG type 0/9
diff --git a/src/fig/FIG0structs.h b/src/fig/FIG0structs.h
index ac2f233..d022dc4 100644
--- a/src/fig/FIG0structs.h
+++ b/src/fig/FIG0structs.h
@@ -31,333 +31,6 @@
#include "fig/FIG.h"
-#ifdef _WIN32
-# pragma pack(push)
-#endif
-
-struct FIGtype0 {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-} PACKED;
-
-
-struct FIGtype0_0 {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-
- uint16_t EId;
- uint8_t CIFcnt_hight:5;
- uint8_t Al:1;
- uint8_t Change:2;
- uint8_t CIFcnt_low:8;
-} PACKED;
-
-
-struct FIGtype0_2 {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-} PACKED;
-
-
-struct FIGtype0_2_Service {
- uint16_t SId;
- uint8_t NbServiceComp:4;
- uint8_t CAId:3;
- uint8_t Local_flag:1;
-} PACKED;
-
-
-struct FIGtype0_2_Service_data {
- uint32_t SId;
- uint8_t NbServiceComp:4;
- uint8_t CAId:3;
- uint8_t Local_flag:1;
-} PACKED;
-
-
-struct FIGtype0_2_audio_component {
- uint8_t ASCTy:6;
- uint8_t TMid:2;
- uint8_t CA_flag:1;
- uint8_t PS:1;
- uint8_t SubChId:6;
-} PACKED;
-
-
-struct FIGtype0_2_data_component {
- uint8_t DSCTy:6;
- uint8_t TMid:2;
- uint8_t CA_flag:1;
- uint8_t PS:1;
- uint8_t SubChId:6;
-} PACKED;
-
-
-struct FIGtype0_2_packet_component {
- uint8_t SCId_high:6;
- uint8_t TMid:2;
- uint8_t CA_flag:1;
- uint8_t PS:1;
- uint8_t SCId_low:6;
- void setSCId(uint16_t SCId) {
- SCId_high = SCId >> 6;
- SCId_low = SCId & 0x3f;
- }
-} PACKED;
-
-
-/* Warning: When bit SCCA_flag is unset(0), the multiplexer R&S does not send
- * the SCCA field. But, in the Factum ETI analyzer, if this field is not there,
- * it is an error.
- */
-struct FIGtype0_3 {
- uint8_t SCId_high;
- uint8_t SCCA_flag:1;
- uint8_t rfa:3;
- uint8_t SCId_low:4;
- uint8_t DSCTy:6;
- uint8_t rfu:1;
- uint8_t DG_flag:1;
- uint8_t Packet_address_high:2;
- uint8_t SubChId:6;
- uint8_t Packet_address_low;
- uint16_t SCCA;
- void setSCId(uint16_t SCId) {
- SCId_high = SCId >> 4;
- SCId_low = SCId & 0xf;
- }
- void setPacketAddress(uint16_t address) {
- Packet_address_high = address >> 8;
- Packet_address_low = address & 0xff;
- }
-} PACKED;
-
-struct FIGtype0_5_short {
- uint8_t SubChId:6;
- uint8_t rfu:1;
- uint8_t LS:1;
-
- uint8_t language;
-} PACKED;
-
-struct FIGtype0_6 {
- uint8_t LSN_high:4; // Linkage Set Number
- uint8_t ILS:1; // 0=national / 1=international
- uint8_t SH:1; // 0=Soft link / 1=Hard link
- uint8_t LA:1; // Linkage actuator
- uint8_t IdListFlag:1; // Marks the presence of the list
-
- uint8_t LSN_low; // Linkage Set Number
-
- void setLSN(uint16_t LSN) {
- LSN_high = LSN >> 8;
- LSN_low = LSN & 0xff;
- }
-} PACKED;
-
-#define FIG0_6_IDLQ_DAB 0x0
-#define FIG0_6_IDLQ_RDS 0x1
-#define FIG0_6_IDLQ_DRM_AMSS 0x3
-
-struct FIGtype0_6_header {
- uint8_t num_ids:4; // number of Ids to follow in the list
- uint8_t rfa:1; // must be 0
- uint8_t IdLQ:2; // Identifier List Qualifier, see above defines
- uint8_t rfu:1; // must be 0
-} PACKED;
-
-struct FIGtype0_8_short {
- uint8_t SCIdS:4;
- uint8_t rfa_1:3;
- uint8_t ext:1;
- uint8_t Id:6;
- uint8_t MscFic:1;
- uint8_t LS:1;
- uint8_t rfa_2;
-} PACKED;
-
-
-struct FIGtype0_8_long {
- uint8_t SCIdS:4;
- uint8_t rfa_1:3;
- uint8_t ext:1;
- uint8_t SCId_high:4;
- uint8_t rfa:3;
- uint8_t LS:1;
- uint8_t SCId_low;
- uint8_t rfa_2;
- void setSCId(uint16_t id) {
- SCId_high = id >> 8;
- SCId_low = id & 0xff;
- }
- uint16_t getSCid() {
- return (SCId_high << 8) | SCId_low;
- }
-} PACKED;
-
-
-struct FIGtype0_9 {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-
- uint8_t ensembleLto:6;
- uint8_t rfa1:1;
- uint8_t ext:1;
- uint8_t ensembleEcc;
- uint8_t tableId;
-} PACKED;
-
-
-struct FIGtype0_10_LongForm {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
-
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-
- uint8_t MJD_high:7;
- uint8_t RFU:1;
-
- uint8_t MJD_med;
-
- uint8_t Hours_high:3;
- uint8_t UTC:1;
- uint8_t ConfInd:1;
- uint8_t LSI:1;
- uint8_t MJD_low:2;
-
- uint8_t Minutes:6;
- uint8_t Hours_low:2;
-
- uint8_t Milliseconds_high:2;
- uint8_t Seconds:6;
-
- uint8_t Milliseconds_low;
-
- void setMJD(uint32_t date) {
- MJD_high = (date >> 10) & 0x7f;
- MJD_med = (date >> 2) & 0xff;
- MJD_low = date & 0x03;
- }
- void setHours(uint16_t hours) {
- Hours_high = (hours >> 2) & 0x07;
- Hours_low = hours & 0x03;
- }
-
- void setMilliseconds(uint16_t ms) {
- Milliseconds_high = (ms >> 8) & 0x03;
- Milliseconds_low = ms & 0xFF;
- }
-} PACKED;
-
-
-struct FIGtype0_17 {
- uint16_t SId;
-
- uint8_t rfa2_high:4;
- uint8_t rfu1:2;
- uint8_t rfa1:1;
- uint8_t SD:1; // Static/Dynamic
-
- uint8_t IntCode:5;
- uint8_t rfu2:1;
- uint8_t rfa2_low:2;
-} PACKED;
-
-struct FIGtype0_18 {
- uint16_t SId;
- uint16_t ASu;
- uint8_t NumClusters:5;
- uint8_t Rfa:3;
- /* Followed by uint8_t Cluster IDs */
-} PACKED;
-
-struct FIGtype0_19 {
- uint8_t ClusterId;
- uint16_t ASw;
- uint8_t SubChId:6;
- uint8_t RegionFlag:1; // shall be zero
- uint8_t NewFlag:1;
- // Region and RFa not supported
-} PACKED;
-
-struct FIGtype0_1 {
- uint8_t Length:5;
- uint8_t FIGtypeNumber:3;
- uint8_t Extension:5;
- uint8_t PD:1;
- uint8_t OE:1;
- uint8_t CN:1;
-} PACKED;
-
-
-struct FIG_01_SubChannel_ShortF {
- uint8_t StartAdress_high:2;
- uint8_t SubChId:6;
- uint8_t StartAdress_low:8;
- uint8_t TableIndex:6;
- uint8_t TableSwitch:1;
- uint8_t Short_Long_form:1;
-} PACKED;
-
-
-struct FIG_01_SubChannel_LongF {
- uint8_t StartAdress_high:2;
- uint8_t SubChId:6;
- uint8_t StartAdress_low:8;
- uint8_t Sub_ChannelSize_high:2;
- uint8_t ProtectionLevel:2;
- uint8_t Option:3;
- uint8_t Short_Long_form:1;
- uint8_t Sub_ChannelSize_low:8;
-} PACKED;
-
-
-// See EN 300 401, Clause 8.1.20 for the FIG0_13 description
-struct FIG0_13_shortAppInfo {
- uint16_t SId;
- uint8_t No:4;
- uint8_t SCIdS:4;
-} PACKED;
-
-
-struct FIG0_13_longAppInfo {
- uint32_t SId;
- uint8_t No:4;
- uint8_t SCIdS:4;
-} PACKED;
-
-
-struct FIG0_13_app {
- uint8_t typeHigh;
- uint8_t length:5;
- uint8_t typeLow:3;
- void setType(uint16_t type) {
- typeHigh = type >> 3;
- typeLow = type & 0x1f;
- }
- uint16_t xpad;
-} PACKED;
-
-
#define FIG0_13_APPTYPE_SLIDESHOW 0x2
#define FIG0_13_APPTYPE_WEBSITE 0x3
#define FIG0_13_APPTYPE_TPEG 0x4
@@ -368,30 +41,12 @@ struct FIG0_13_app {
#define FIG0_13_APPTYPE_JOURNALINE 0x441
-struct FIGtype0_21_header {
- uint16_t rfa:11;
- uint16_t length_fi:5;
-} PACKED;
-
-struct FIGtype0_21_fi_list_header {
- uint16_t id;
- uint8_t range_modulation:4;
- uint8_t continuity:1;
- uint8_t length_freq_list:3;
-} PACKED;
-
-struct FIGtype0_21_fi_dab_entry {
- uint8_t control_field:5;
- uint8_t freqHigh:3;
- uint16_t freqLow;
-
- void setFreq(uint32_t freq) {
- freqHigh = (freq >> 16) & 0x7;
- freqLow = freq & 0xffff;
- }
+struct FIGtype0 {
+ uint8_t Length:5;
+ uint8_t FIGtypeNumber:3;
+ uint8_t Extension:5;
+ uint8_t PD:1;
+ uint8_t OE:1;
+ uint8_t CN:1;
} PACKED;
-#ifdef _WIN32
-# pragma pack(pop)
-#endif
-