source: titan/titan/dvbdev.h @ 41327

Last change on this file since 41327 was 41327, checked in by gost, 6 years ago

[titan] hd51.. fix dmxsetsource

File size: 5.4 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                        }
66                }
67                if(type == FRONTENDDEVDUMMY)
68                {
69                        switch(devnr)
70                        {
71                                case 0: newnode->fedmxsource = DMX_SOURCE_DVR0; break;
72                                case 1: newnode->fedmxsource = DMX_SOURCE_DVR1; break;
73                                case 2: newnode->fedmxsource = DMX_SOURCE_DVR2; break;
74                                case 3: newnode->fedmxsource = DMX_SOURCE_DVR3; break;
75                                case 4: newnode->fedmxsource = DMX_SOURCE_DVR3 + 1; break;
76                                case 5: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
77                                case 6: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
78                                case 7: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
79                                case 8: newnode->fedmxsource = DMX_SOURCE_DVR0 + devnr; break;
80                        }
81                }
82        }
83       
84        if(type == ENCODERDEV)
85        {
86                int number = 99;
87                char *buf = NULL, *enc_decoder = NULL;
88                enc_decoder = getconfig("enc_decoder", NULL);
89                if(enc_decoder != NULL)
90                {
91                        buf = malloc(MINMALLOC);
92                        if(buf != NULL)
93                        {
94                                sprintf(buf, enc_decoder, devnr);
95                                FILE* fbencoder = fopen(buf, "r");
96                                if(fbencoder != NULL)
97                                {
98                                        fscanf(fbencoder, "%i", &number);
99                                        fclose(fbencoder);
100                                }
101                        }
102                }
103                newnode->decoder = number;
104                free(buf);
105        }
106       
107        if(checkbox("HD51") == 1 && type == DEMUXDEV)
108                newnode->fedmxsource = -1;
109       
110        if(node != NULL)
111        {
112                if(last == NULL)
113                {
114                        while(node->next != NULL)
115                                node = node->next;
116                        node->next = newnode;
117                }
118                else
119                        last->next = newnode;
120        }
121        else
122        {
123                if(flag == 0)
124                        dvbdev = newnode;
125                else
126                        dvbdevsim = newnode;
127        }
128
129        return newnode;
130}
131
132struct dvbdev* changedvbdev(struct dvbdev *node)
133{
134        if(node == NULL) return NULL;
135
136        char *fehyprid = NULL, *tmpstr = NULL;
137        struct dvb_frontend_info* feinfo = NULL;
138       
139        close(node->fd);
140        node->fd = -1;
141       
142        int fd = feopen(NULL, node->dev);
143        if(fd >= 0)
144        {
145                fehyprid = gethypridtunerchoicesvalue(node->devnr);
146                if(fehyprid != NULL)
147                {
148                        if(node->adapter < 10)
149                                tmpstr = ostrcat(tmpstr, "fe_0", 1, 0);
150                        else
151                                tmpstr = ostrcat(tmpstr, "fe_1", 1, 0);
152
153                        tmpstr = ostrcat(tmpstr, oitoa(node->devnr), 1, 1);
154                        tmpstr = ostrcat(tmpstr, "_hyprid", 1, 0);
155                        if(getconfig(tmpstr, NULL) != NULL)
156#ifdef MIPSEL
157                                sethypridtunernew(node, getconfig(tmpstr, NULL));
158#else
159                                sethypridtuner(node->devnr, getconfig(tmpstr, NULL));
160#endif
161                        free(tmpstr), tmpstr = NULL;
162                }
163                               
164                feinfo = fegetinfo(NULL, fd);
165               
166                free(node->feinfo);
167                node->feinfo = NULL;
168
169                free(node->feaktnr);
170                node->feaktnr = NULL;
171       
172                free(node->fehyprid);
173                node->fehyprid = NULL;
174               
175                node->fd = fd;
176                node->feinfo = feinfo;
177                node->fehyprid = ostrcat(fehyprid, NULL, 0, 0);
178        }
179
180        return node;
181}
182
183//flag 0: use dvbdev
184//flag 1: use dvbdevsim
185void deldvbdev(char *dev, int flag)
186{
187        struct dvbdev *node = NULL, *prev = NULL;
188
189        if(flag == 0)
190        {
191                node = dvbdev;
192                prev = dvbdev;
193        }
194        else
195        {
196                node = dvbdevsim;
197                prev = dvbdevsim;
198        }
199
200        while(node != NULL)
201        {
202                if(ostrcmp(node->dev, dev) == 0)
203                {
204                        if(flag == 0 && node == dvbdev)
205                                dvbdev = node->next;
206                        else if(flag == 1 && node == dvbdevsim)
207                                dvbdevsim = node->next;
208                        else
209                                prev->next = node->next;
210
211                        if(flag == 0)
212                        {
213                                close(node->fd);
214
215                                free(node->feinfo);
216                                node->feinfo = NULL;
217                        }
218
219                        free(node->dev);
220                        node->dev = NULL;
221
222                        free(node->feshortname);
223                        node->feshortname = NULL;
224
225                        free(node->feaktnr);
226                        node->feaktnr = NULL;
227                       
228                        free(node->caslot);
229                        node->caslot = NULL;
230                       
231                        free(node->fehyprid);
232                        node->fehyprid = NULL;
233
234                        free(node);
235                        node = NULL;
236                        break;
237                }
238
239                prev = node;
240                node = node->next;
241        }
242}
243
244//flag 0: use dvbdev
245//flag 1: use dvbdevsim
246void freedvbdev(int flag)
247{
248        struct dvbdev *node = NULL, *prev = NULL;
249
250        if(flag == 0)
251        {
252                node = dvbdev;
253                prev = dvbdev;
254        }
255        else
256        {
257                node = dvbdevsim;
258                prev = dvbdevsim;
259        }
260
261        while(node != NULL)
262        {
263                prev = node;
264                node = node->next;
265                if(prev != NULL)
266                        deldvbdev(prev->dev, flag);
267        }
268}
269
270#endif
Note: See TracBrowser for help on using the repository browser.