source: titan/titan/dvbdev.h @ 30686

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

workaround fix

File size: 4.3 KB
RevLine 
[7497]1#ifndef DVBDEV_H
2#define DVBDEV
3
[18524]4//flag 0: use dvbdev
5//flag 1: use dvbdevsim
[28126]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)
[7497]7{
[18524]8        struct dvbdev *newnode = NULL, *node = NULL;
[7497]9        char* tmp = NULL, *tmp1 = NULL;
10
[18524]11        if(flag == 0)
12                node = dvbdev;
13        else
14                node = dvbdevsim;
15
[7497]16        newnode = (struct dvbdev*)malloc(sizeof(struct dvbdev));       
17        if(newnode == NULL)
18        {
[10473]19                err("no mem");
[7497]20                return NULL;
21        }
22
23        memset(newnode, 0, sizeof(struct dvbdev));
24
[16286]25        newnode->dev = ostrcat(dev, NULL, 0, 0);
[7497]26        newnode->fd = -1;
27        newnode->type = type;
28        newnode->feinfo = feinfo;
29        newnode->adapter = adapter;
30        newnode->devnr = devnr;
[28126]31        newnode->fehyprid = ostrcat(fehyprid, NULL, 0, 0);
[7497]32
[10473]33        if(type == CIDEV)
[10366]34        {
[10473]35                newnode->fd = fd;
36                newnode->caslot = (struct caslot*)malloc(sizeof(struct caslot));       
37                if(newnode->caslot == NULL)
[10366]38                {
[10473]39                        err("no mem");
[10366]40                }
41                else
[10473]42                        memset(newnode->caslot, 0, sizeof(struct caslot));
[10366]43        }
44
[9713]45        if(type == FRONTENDDEV || type == FRONTENDDEVDUMMY)
[7497]46        {
[8193]47                newnode->fd = fd;
[7497]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;
[9713]53                if(type == FRONTENDDEV)
[7728]54                {
[9713]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                        }
[7728]62                }
[9713]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;
[26969]71                                case 4: newnode->fedmxsource = DMX_SOURCE_DVR3 + 1; break;
[9713]72                        }
73                }
[7497]74        }
75
76        if(node != NULL)
77        {
78                if(last == NULL)
79                {
80                        while(node->next != NULL)
81                                node = node->next;
82                        node->next = newnode;
83                }
84                else
85                        last->next = newnode;
86        }
87        else
[18524]88        {
89                if(flag == 0)
90                        dvbdev = newnode;
91                else
92                        dvbdevsim = newnode;
93        }
[7497]94
95        return newnode;
96}
97
[30674]98struct dvbdev* changedvbdev(struct dvbdev *node)
99{
[30681]100        if(node == NULL) return NULL;
[30674]101
102        char *fehyprid = NULL, *tmpstr = NULL;
103        struct dvb_frontend_info* feinfo = NULL;
104       
105        close(node->fd);
106        node->fd = -1;
107       
[30681]108        int fd = feopen(NULL, node->dev);
[30674]109        if(fd >= 0)
110        {
111                fehyprid = gethypridtunerchoicesvalue(node->devnr);
112                if(fehyprid != NULL)
113                {
[30686]114//                      if(y < 10)
115//                              tmpstr = ostrcat(tmpstr, "fe_0", 1, 0);
116//                      else
[30674]117                                tmpstr = ostrcat(tmpstr, "fe_1", 1, 0);
118
119                        tmpstr = ostrcat(tmpstr, oitoa(node->devnr), 1, 1);
120                        tmpstr = ostrcat(tmpstr, "_hyprid", 1, 0);
121                        if(getconfig(tmpstr, NULL) != NULL)
122                                sethypridtuner(node->devnr, getconfig(tmpstr, NULL));
123                        free(tmpstr), tmpstr = NULL;
124                }
125                               
126                feinfo = fegetinfo(NULL, fd);
127               
128                free(node->feinfo);
129                node->feinfo = NULL;
130
131                free(node->feaktnr);
132                node->feaktnr = NULL;
133       
[30681]134                free(node->fehyprid);
[30674]135                node->fehyprid = NULL;
136               
137                node->fd = fd;
138                node->feinfo = feinfo;
139                node->fehyprid = ostrcat(fehyprid, NULL, 0, 0);
140        }
141
142        return node;
143}
144
[18524]145//flag 0: use dvbdev
146//flag 1: use dvbdevsim
147void deldvbdev(char *dev, int flag)
[7497]148{
[18524]149        struct dvbdev *node = NULL, *prev = NULL;
[7497]150
[18524]151        if(flag == 0)
152        {
153                node = dvbdev;
154                prev = dvbdev;
155        }
156        else
157        {
158                node = dvbdevsim;
159                prev = dvbdevsim;
160        }
161
[7497]162        while(node != NULL)
163        {
164                if(ostrcmp(node->dev, dev) == 0)
165                {
[18524]166                        if(flag == 0 && node == dvbdev)
[7497]167                                dvbdev = node->next;
[18524]168                        else if(flag == 1 && node == dvbdevsim)
169                                dvbdevsim = node->next;
[7497]170                        else
171                                prev->next = node->next;
172
[18554]173                        if(flag == 0)
174                        {
175                                close(node->fd);
[7571]176
[18554]177                                free(node->feinfo);
178                                node->feinfo = NULL;
179                        }
180
[7497]181                        free(node->dev);
182                        node->dev = NULL;
183
184                        free(node->feshortname);
185                        node->feshortname = NULL;
186
[11394]187                        free(node->feaktnr);
188                        node->feaktnr = NULL;
[10752]189                       
190                        free(node->caslot);
191                        node->caslot = NULL;
[30674]192                       
[30683]193                        free(node->fehyprid);
[30674]194                        node->fehyprid = NULL;
[7506]195
[7497]196                        free(node);
197                        node = NULL;
198                        break;
199                }
200
201                prev = node;
202                node = node->next;
203        }
204}
205
[18524]206//flag 0: use dvbdev
207//flag 1: use dvbdevsim
208void freedvbdev(int flag)
[7497]209{
[18524]210        struct dvbdev *node = NULL, *prev = NULL;
[7497]211
[18524]212        if(flag == 0)
213        {
214                node = dvbdev;
215                prev = dvbdev;
216        }
217        else
218        {
219                node = dvbdevsim;
220                prev = dvbdevsim;
221        }
222
[7497]223        while(node != NULL)
224        {
225                prev = node;
226                node = node->next;
227                if(prev != NULL)
[18524]228                        deldvbdev(prev->dev, flag);
[7497]229        }
230}
231
232#endif
Note: See TracBrowser for help on using the repository browser.