source: titan/titan/dvbdev.h @ 15349

Last change on this file since 15349 was 11394, checked in by nit, 12 years ago

fix

File size: 2.7 KB
Line 
1#ifndef DVBDEV_H
2#define DVBDEV
3
4struct dvbdev* adddvbdev(char *dev, int adapter, int devnr, int fd, int type, struct dvb_frontend_info* feinfo, struct dvbdev* last)
5{
6        debug(1000, "in");
7        struct dvbdev *newnode = NULL, *node = dvbdev;
8        char* tmp = NULL, *tmp1 = NULL;
9
10        newnode = (struct dvbdev*)malloc(sizeof(struct dvbdev));       
11        if(newnode == NULL)
12        {
13                err("no mem");
14                return NULL;
15        }
16
17        memset(newnode, 0, sizeof(struct dvbdev));
18
19        newnode->dev = ostrcat(dev, "", 0, 0);
20        newnode->fd = -1;
21        newnode->type = type;
22        newnode->feinfo = feinfo;
23        newnode->adapter = adapter;
24        newnode->devnr = devnr;
25
26        if(type == CIDEV)
27        {
28                newnode->fd = fd;
29                newnode->caslot = (struct caslot*)malloc(sizeof(struct caslot));       
30                if(newnode->caslot == NULL)
31                {
32                        err("no mem");
33                }
34                else
35                        memset(newnode->caslot, 0, sizeof(struct caslot));
36        }
37
38        if(type == FRONTENDDEV || type == FRONTENDDEVDUMMY)
39        {
40                newnode->fd = fd;
41                tmp1 = oitoa(adapter);
42                tmp = ostrcat("fe_", tmp1, 0, 1);
43                tmp1 = oitoa(devnr);
44                tmp = ostrcat(tmp, tmp1, 1, 1);
45                newnode->feshortname = tmp;
46                if(type == FRONTENDDEV)
47                {
48                        switch(devnr)
49                        {
50                                case 0: newnode->fedmxsource = DMX_SOURCE_FRONT0; break;
51                                case 1: newnode->fedmxsource = DMX_SOURCE_FRONT1; break;
52                                case 2: newnode->fedmxsource = DMX_SOURCE_FRONT2; break;
53                                case 3: newnode->fedmxsource = DMX_SOURCE_FRONT3; break;
54                        }
55                }
56                if(type == FRONTENDDEVDUMMY)
57                {
58                        switch(devnr)
59                        {
60                                case 0: newnode->fedmxsource = DMX_SOURCE_DVR0; break;
61                                case 1: newnode->fedmxsource = DMX_SOURCE_DVR1; break;
62                                case 2: newnode->fedmxsource = DMX_SOURCE_DVR2; break;
63                                case 3: newnode->fedmxsource = DMX_SOURCE_DVR3; break;
64                        }
65                }
66        }
67
68        if(node != NULL)
69        {
70                if(last == NULL)
71                {
72                        while(node->next != NULL)
73                                node = node->next;
74                        node->next = newnode;
75                }
76                else
77                        last->next = newnode;
78        }
79        else
80                dvbdev = newnode;
81
82        debug(1000, "out");
83        return newnode;
84}
85
86void deldvbdev(char *dev)
87{
88        debug(1000, "in");
89        struct dvbdev *node = dvbdev, *prev = dvbdev;
90
91        while(node != NULL)
92        {
93                if(ostrcmp(node->dev, dev) == 0)
94                {
95                        if(node == dvbdev)
96                                dvbdev = node->next;
97                        else
98                                prev->next = node->next;
99
100                        close(node->fd);
101
102                        free(node->dev);
103                        node->dev = NULL;
104
105                        free(node->feinfo);
106                        node->feinfo = NULL;
107
108                        free(node->feshortname);
109                        node->feshortname = NULL;
110
111                        free(node->feaktnr);
112                        node->feaktnr = NULL;
113                       
114                        free(node->caslot);
115                        node->caslot = NULL;
116
117                        free(node);
118                        node = NULL;
119                        break;
120                }
121
122                prev = node;
123                node = node->next;
124        }
125        debug(1000, "out");
126}
127
128void freedvbdev()
129{
130        debug(1000, "in");
131        struct dvbdev *node = dvbdev, *prev = dvbdev;
132
133        while(node != NULL)
134        {
135                prev = node;
136                node = node->next;
137                if(prev != NULL)
138                        deldvbdev(prev->dev);
139        }
140        debug(1000, "out");
141}
142
143#endif
Note: See TracBrowser for help on using the repository browser.