network setup stuff
[enigma2.git] / lib / dvb_si / capmt.h
1 /*
2  * $Id: capmt.h,v 1.1 2003-10-17 15:36:38 tmbinc Exp $
3  *
4  * (C) 2002-2003 Andreas Oberritter <obi@saftware.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  *
20  */
21
22 #ifndef __dvb_table_capmt_h__
23 #define __dvb_table_capmt_h__
24
25 #include <lib/dvb_si/ca_descriptor.h>
26 #include "pmt.h"
27
28 class CaLengthField
29 {
30         protected:
31                 unsigned sizeIndicator                          : 1;
32                 unsigned lengthValue                            : 7;
33                 unsigned lengthFieldSize                        : 7;
34                 std::vector<uint8_t> lengthValueByte;
35
36         public:
37                 CaLengthField(const uint64_t length);
38 };
39
40 class CaElementaryStreamInfo
41 {
42         protected:
43                 unsigned streamType                             : 8;
44                 unsigned reserved1                              : 3;
45                 unsigned elementaryPid                          : 13;
46                 unsigned reserved2                              : 4;
47                 unsigned esInfoLength                           : 12;
48                 unsigned caPmtCmdId                             : 8;
49                 CaDescriptorVector descriptors;
50
51         public:
52                 CaElementaryStreamInfo(const ElementaryStreamInfo * const info, const uint8_t cmdId);
53                 ~CaElementaryStreamInfo(void);
54
55                 uint16_t getLength(void) const;
56 };
57
58 typedef std::vector<CaElementaryStreamInfo *> CaElementaryStreamInfoVector;
59 typedef CaElementaryStreamInfoVector::iterator CaElementaryStreamInfoIterator;
60 typedef CaElementaryStreamInfoVector::const_iterator CaElementaryStreamInfoConstIterator;
61
62 class CaProgramMapTable
63 {
64         protected:
65                 unsigned caPmtTag                               : 24;
66                 CaLengthField *lengthField;
67                 unsigned caPmtListManagement                    : 8;
68                 unsigned programNumber                          : 16;
69                 unsigned reserved1                              : 2;
70                 unsigned versionNumber                          : 5;
71                 unsigned currentNextIndicator                   : 1;
72                 unsigned reserved2                              : 4;
73                 unsigned programInfoLength                      : 12;
74                 unsigned caPmtCmdId                             : 8;
75                 CaDescriptorVector descriptors;
76                 CaElementaryStreamInfoVector esInfo;
77
78         public:
79                 CaProgramMapTable(const ProgramMapTable * const pmt, const uint8_t listManagement, const uint8_t cmdId);
80                 ~CaProgramMapTable(void);
81 };
82
83 typedef std::vector<CaProgramMapTable *> CaProgramMapTableVector;
84 typedef CaProgramMapTableVector::iterator CaProgramMapTableIterator;
85 typedef CaProgramMapTableVector::const_iterator CaProgramMapTableConstIterator;
86
87 #endif /* __dvb_table_capmt_h__ */