From 1df947bae7346948e08edb75616d34fcf8802dae Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Wed, 16 Jan 2019 13:54:01 +0100 Subject: Add FIG2 label decoding with draft TS 103 176 v2.2.1 support --- src/figs.hpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/figs.hpp') diff --git a/src/figs.hpp b/src/figs.hpp index bd144d7..7169fc7 100644 --- a/src/figs.hpp +++ b/src/figs.hpp @@ -119,10 +119,32 @@ struct fig2_common_t { uint8_t* f; uint16_t figlen; - uint8_t toggle_flag() { return (f[0] & 0x80) >> 7; } - uint8_t segment_index() { return (f[0] & 0x70) >> 4; } - uint16_t rfu() { return (f[0] & 0x08) >> 3; } - uint16_t ext() { return f[0] & 0x07; } + uint8_t toggle_flag() const { return (f[0] & 0x80) >> 7; } + uint8_t segment_index() const { return (f[0] & 0x70) >> 4; } + uint16_t rfu() const { return (f[0] & 0x08) >> 3; } + uint16_t ext() const { return f[0] & 0x07; } + size_t identifier_len() const { + switch (ext()) { + case 0: // Ensemble label + return 2; + case 1: // Programme service label + return 2; + case 4: // Service component label + { + uint8_t pd = (f[1] & 0x80) >> 7; + return (pd == 0) ? 3 : 5; + } + case 5: // Data service label + return 5; + case 6: // X-PAD user application label + { + uint8_t pd = (f[1] & 0x80) >> 7; + return (pd == 0) ? 4 : 6; + } + default: + return 0; + } + } }; // FIG 0/11 and 0/22 struct -- cgit v1.2.3