Support turbo2.
[vuplus_dvbapp] / lib / dvb / fccdecoder.cpp
1 #include <lib/dvb/fccdecoder.h>
2 #include <lib/base/eerror.h>
3
4 #include <fcntl.h>
5 #include <sys/ioctl.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8
9 bool eFCCDecoder::isDestroyed = false;
10 eFCCDecoder::eFCCDecoder()
11 {
12         int index = 0;
13
14         eDebug("[eFCCDecoder] scanning for FCC device files..");
15         while(1)
16         {
17                 struct stat s;
18                 char filename[128];
19                 sprintf(filename, "/dev/fcc%d", index);
20                 if (stat(filename, &s))
21                         break;
22
23                 eDebug("[eFCCDecoder] %s found..", filename);
24                 m_fccs.push_back(-1);
25                 index++;
26         }
27 }
28
29 eFCCDecoder::~eFCCDecoder()
30 {
31         isDestroyed = true;
32 }
33
34 int eFCCDecoder::allocateFcc()
35 {
36         int fccFd = -1;
37         for(unsigned int i = 0; i < m_fccs.size(); i++)
38         {
39                 if (m_fccs[i]== -1)
40                 {
41                         char filename[128];
42                         sprintf(filename, "/dev/fcc%d", i);
43
44                         fccFd = ::open(filename, O_RDWR);
45                         if (fccFd < 0)
46                                 eDebug("[eFCCDecoder] open %s failed!", filename);
47
48                         else
49                                 eDebug("[eFCCDecoder] alloc %s", filename);
50
51                         m_fccs[i] = fccFd;
52                         break;
53                 }
54         }
55
56         return fccFd;
57 }
58
59 void eFCCDecoder::freeFcc(int fccFd)
60 {
61         if (fccFd < 0)
62                 return;
63
64         for(unsigned int i = 0; i < m_fccs.size(); i++)
65         {
66                 if (m_fccs[i]== fccFd)
67                 {
68                         m_fccs[i] = -1;
69                         eDebug("[eFCCDecoder] close /dev/fcc%d", i);
70                         ::close(fccFd);
71                         break;
72                 }
73         }
74 }
75