source: titan/titan/dvbdev.h @ 45021

Last change on this file since 45021 was 44196, checked in by gost, 4 years ago

fix

File size: 5.9 KB
Line 
1#ifndef DVBDEV_H
2#define DVBDEV
3
4//flag 0: use dvbdev
5//flag 1: use dvbdevsim
6struct dvbdev* adddvbdev(char *dev, int adapter, int devnr, int fd, int type, struct dvb_frontend_info* feinfo, struct dvbdev* last, char *fehyprid, int flag)
7{
8        struct dvbdev *newnode = NULL, *node = NULL;
9        char* tmp = NULL, *tmp1 = NULL;
10
11        if(flag == 0)
12                node = dvbdev;
13        else
14                node = dvbdevsim;
15
16        newnode = (struct dvbdev*)malloc(sizeof(struct dvbdev));       
17        if(newnode == NULL)
18        {
19                err("no mem");
20                return NULL;
21        }
22
23        memset(newnode, 0, sizeof(struct dvbdev));
24
25        newnode->dev = ostrcat(dev, NULL, 0, 0);
26        newnode->fd = -1;
27        newnode->type = type;
28        newnode->feinfo = feinfo;
29        newnode->adapter = adapter;
30        newnode->devnr = devnr;
31        newnode->fehyprid = ostrcat(fehyprid, NULL, 0, 0);
32
33        if(type == CIDEV)
34        {
35                newnode->fd = fd;
36                newnode->caslot = (struct caslot*)malloc(sizeof(struct caslot));       
37                if(newnode->caslot == NULL)
38                {
39                        err("no mem");
40                }
41                else
42                        memset(newnode->caslot, 0, sizeof(struct caslot));
43        }
44
45        if(type == FRONTENDDEV || type == FRONTENDDEVDUMMY)
46        {
47                newnode->fd = fd;
48                tmp1 = oitoa(adapter);
49                tmp = ostrcat("fe_", tmp1, 0, 1);
50                tmp1 = oitoa(devnr);
51                tmp = ostrcat(tmp, tmp1, 1, 1);
52                newnode->feshortname = tmp;
53                if(type == FRONTENDDEV)
54                {
55                        switch(devnr)
56                        {
57                                case 0: newnode->fedmxsource = DMX_SOURCE_FRONT0; break;
58                                case 1: newnode->fedmxsource = DMX_SOURCE_FRONT1; break;
59                                case 2: newnode->fedmxsource = DMX_SOURCE_FRONT2; break;
60                                case 3: newnode->fedmxsource = DMX_SOURCE_FRONT3; break;
61                                case 4: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
62                                case 5: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
63                                case 6: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
64                                case 7: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
65                                case 8: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
66                                case 9: newnode->fedmxsource = DMX_SOURCE_FRONT0 + devnr; break;
67                        }
68                }
69                if(type == FRONTENDDEVDUMMY)
70                {
71                        switch(devnr)
72                        {
73                                case 0: newnode->fedmxsource = DMX_SOURCE_DVR0; break;
74                                case 1: newnode->fedmxsource = DMX_SOURCE_DVR1; break;
75                                case 2: newnode->fedmxsource = DMX_SOURCE_DVR2; break;
76                                case 3: newnode->fedmxsource = DMX_SOURCE_DVR3; break;
77                                case 4: newnode->fedmxsource = DMX_SOURCE_DVR3 + 1; break;
78                                case 5: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
79                                case 6: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
80                                case 7: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
81                                case 8: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
82                                case 9: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
83                        }
84                }
85        }
86       
87        if(type == ENCODERDEV)
88        {
89                int number = 99;
90                char *buf = NULL, *enc_decoder = NULL;
91                enc_decoder = getconfig("enc_decoder", NULL);
92                if(enc_decoder != NULL)
93                {
94                        buf = malloc(MINMALLOC);
95                        if(buf != NULL)
96                        {
97                                sprintf(buf, enc_decoder, devnr);
98                                FILE* fbencoder = fopen(buf, "r");
99                                if(fbencoder != NULL)
100                                {
101                                        fscanf(fbencoder, "%i", &number);
102                                        fclose(fbencoder);
103                                }
104                        }
105                }
106                newnode->decoder = number;
107                free(buf);
108        }
109       
110        if((checkrealbox("HD51") == 1 || checkrealbox("HD60") == 1 || checkrealbox("HD61") == 1 || checkchipset("HI3798MV200") == 1) && type == DEMUXDEV)
111                newnode->fedmxsource = -1;
112       
113        if(node != NULL)
114        {
115                if(last == NULL)
116                {
117                        while(node->next != NULL)
118                                node = node->next;
119                        node->next = newnode;
120                }
121                else
122                        last->next = newnode;
123        }
124        else
125        {
126                if(flag == 0)
127                        dvbdev = newnode;
128                else
129                        dvbdevsim = newnode;
130        }
131
132        return newnode;
133}
134
135struct dvbdev* changedvbdev(struct dvbdev *node)
136{
137        int fd = -1;
138        if(node == NULL) return NULL;
139
140        char *fehyprid = NULL, *tmpstr = NULL;
141        struct dvb_frontend_info* feinfo = NULL;
142       
143        if(close(node->fd) > -1 || node->fd == -1)
144        {
145                node->fd = -1;
146                fd = feopen(NULL, node->dev);
147        }
148        else
149                fd = node->fd;
150        if(fd >= 0)
151        {
152                fehyprid = gethypridtunerchoicesvalue(node->devnr);
153                if(fehyprid != NULL)
154                {
155                        if(node->adapter < 10)
156                                tmpstr = ostrcat(tmpstr, "fe_0", 1, 0);
157                        else
158                                tmpstr = ostrcat(tmpstr, "fe_1", 1, 0);
159
160                        tmpstr = ostrcat(tmpstr, oitoa(node->devnr), 1, 1);
161                        tmpstr = ostrcat(tmpstr, "_hyprid", 1, 0);
162                       
163#ifdef MIPSEL
164                                if(getconfig(tmpstr, NULL) != NULL)
165                                        sethypridtunernew(node, getconfig(tmpstr, NULL));
166                                else
167                                        sethypridtunernew(node, "0");
168#else
169                                if(getconfig(tmpstr, NULL) != NULL)
170                                        sethypridtuner(node->devnr, getconfig(tmpstr, NULL));
171#endif
172                        free(tmpstr), tmpstr = NULL;
173                }
174                               
175                feinfo = fegetinfo(NULL, fd);
176               
177                free(node->feinfo);
178                node->feinfo = NULL;
179
180                free(node->feaktnr);
181                node->feaktnr = NULL;
182       
183                free(node->fehyprid);
184                node->fehyprid = NULL;
185               
186                node->fd = fd;
187                node->feinfo = feinfo;
188                node->fehyprid = ostrcat(fehyprid, NULL, 0, 0);
189        }
190
191        return node;
192}
193
194//flag 0: use dvbdev
195//flag 1: use dvbdevsim
196void deldvbdev(char *dev, int flag)
197{
198        struct dvbdev *node = NULL, *prev = NULL;
199
200        if(flag == 0)
201        {
202                node = dvbdev;
203                prev = dvbdev;
204        }
205        else
206        {
207                node = dvbdevsim;
208                prev = dvbdevsim;
209        }
210
211        while(node != NULL)
212        {
213                if(ostrcmp(node->dev, dev) == 0)
214                {
215                        if(flag == 0 && node == dvbdev)
216                                dvbdev = node->next;
217                        else if(flag == 1 && node == dvbdevsim)
218                                dvbdevsim = node->next;
219                        else
220                                prev->next = node->next;
221
222                        if(flag == 0)
223                        {
224                                close(node->fd);
225
226                                free(node->feinfo);
227                                node->feinfo = NULL;
228                        }
229
230                        free(node->dev);
231                        node->dev = NULL;
232
233                        free(node->feshortname);
234                        node->feshortname = NULL;
235
236                        free(node->feaktnr);
237                        node->feaktnr = NULL;
238                       
239                        free(node->caslot);
240                        node->caslot = NULL;
241                       
242                        free(node->fehyprid);
243                        node->fehyprid = NULL;
244
245                        free(node);
246                        node = NULL;
247                        break;
248                }
249
250                prev = node;
251                node = node->next;
252        }
253}
254
255//flag 0: use dvbdev
256//flag 1: use dvbdevsim
257void freedvbdev(int flag)
258{
259        struct dvbdev *node = NULL, *prev = NULL;
260
261        if(flag == 0)
262        {
263                node = dvbdev;
264                prev = dvbdev;
265        }
266        else
267        {
268                node = dvbdevsim;
269                prev = dvbdevsim;
270        }
271
272        while(node != NULL)
273        {
274                prev = node;
275                node = node->next;
276                if(prev != NULL)
277                        deldvbdev(prev->dev, flag);
278        }
279}
280
281#endif
Note: See TracBrowser for help on using the repository browser.