kradio4
r778
|
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