rds_group.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KRADIO_V4LRADIO_RDS_GROUP_H
00019 #define KRADIO_V4LRADIO_RDS_GROUP_H
00020
00021 #ifdef HAVE_CONFIG_H
00022 #include <config.h>
00023 #endif
00024
00025 #include <kdemacros.h>
00026
00027 #define RDS_BLK_A 0
00028 #define RDS_BLK_B 1
00029 #define RDS_BLK_C 2
00030 #define RDS_BLK_D 3
00031 #define RDS_BLK_C_ 4
00032 #define RDS_BLK_E 5
00033 #define RDS_BLK_E_ 6
00034 #define RDS_BLK_RESERVED 7
00035 #define RDS_BLK_MAXCOUNT 8
00036
00037 #define RDS_PI_BLOCK RDS_BLK_A
00038 #define RDS_PI_SHIFT 0
00039 #define RDS_PI_MASK 0xFFFF
00040
00041 #define RDS_GRP_BLOCK RDS_BLK_B
00042 #define RDS_GRP_SHIFT 11
00043 #define RDS_GRP_MASK 0xF800
00044
00045 #define RDS_TP_BLOCK RDS_BLK_B
00046 #define RDS_TP_SHIFT 10
00047 #define RDS_TP_MASK 0x0400
00048
00049 #define RDS_PTY_BLOCK RDS_BLK_B
00050 #define RDS_PTY_SHIFT 5
00051 #define RDS_PTY_MASK 0x03E0
00052
00053 #define RDS_0A_POS_BLOCK RDS_BLK_B
00054 #define RDS_0A_POS_SHIFT 0
00055 #define RDS_0A_POS_MASK 0x0003
00056
00057
00058 enum RDSGroupType {
00059 GROUP_0A = 0, GROUP_0B,
00060 GROUP_1A, GROUP_1B,
00061 GROUP_2A, GROUP_2B,
00062 GROUP_3A, GROUP_3B,
00063 GROUP_4A, GROUP_4B,
00064 GROUP_5A, GROUP_5B,
00065 GROUP_6A, GROUP_6B,
00066 GROUP_7A, GROUP_7B,
00067 GROUP_8A, GROUP_8B,
00068 GROUP_9A, GROUP_9B,
00069 GROUP_10A, GROUP_10B,
00070 GROUP_11A, GROUP_11B,
00071 GROUP_12A, GROUP_12B,
00072 GROUP_13A, GROUP_13B,
00073 GROUP_14A, GROUP_14B,
00074 GROUP_15A, GROUP_15B,
00075 GROUP_TYPE_COUNT
00076 };
00077
00078 class KDE_EXPORT RDSGroup
00079 {
00080 public:
00081 RDSGroup();
00082 virtual ~RDSGroup();
00083
00084 virtual int addRawData(const unsigned char *rawdata, int size) = 0;
00085 virtual void clear();
00086 virtual bool isComplete() const = 0;
00087
00088 int getPI () const { return m_pi_code; }
00089 int getTP () const { return m_tp; }
00090 int getPTY() const { return m_pty; }
00091 int getGroupType() const { return m_group_code; }
00092
00093 unsigned short getBlock(unsigned int block_nr)
00094 const { return (block_nr <= RDS_BLK_D) ? m_rawdata[block_nr] : 0; }
00095
00096 double statsBlockErrorRate() const;
00097 double statsGroupErrorRate() const;
00098
00099 protected:
00100 void statsAccountGroupError(int nGroups, int nErrors);
00101 void statsAccountBlockError(int nGroups, int nErrors);
00102 void decode();
00103
00104 unsigned short m_rawdata[RDS_BLK_MAXCOUNT];
00105
00106 int m_pty;
00107 int m_group_code;
00108 bool m_tp;
00109 int m_pi_code;
00110
00111 int m_stats_group_count;
00112 int m_stats_group_errors;
00113 int m_stats_block_count;
00114 int m_stats_block_errors;
00115 };
00116
00117
00118
00119
00120 #endif
00121