source: titan/titan/dvbdev.h @ 31357

Last change on this file since 31357 was 31357, checked in by gost, 9 years ago

[titan] nemesis.. transcode step 1

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