rds_group.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                           rds.h  -  description
00003                              -------------------
00004     begin                : Feb 2009
00005     copyright            : (C) 2009 Ernst Martin Witte, Klas Kalass
00006     email                : emw-kradio@nocabal.de, klas@kde.org
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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 

Generated on Tue Jun 2 19:19:57 2009 for kradio4 by  doxygen 1.5.8