source: titan/titan/dvbdev.h @ 40855

Last change on this file since 40855 was 40706, checked in by gost, 7 years ago

fix compiler error

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