source: titan/titan/dvrdev.h @ 45014

Last change on this file since 45014 was 43634, checked in by gost, 5 years ago

test sf8008

File size: 1.7 KB
Line 
1#ifndef DVRDEV_H
2#define DVRDEV_H
3
4struct dvbdev* dvropen(struct dvbdev* fenode)
5{
6        int fd = -1;
7        struct dvbdev* node = dvbdev;
8
9        if(fenode == NULL) return NULL;
10               
11        while(node != NULL)
12        {
13                if(node->type == DVRDEV && node->adapter == fenode->adapter && node->devnr == fenode->devnr)
14                        break;
15                node = node->next;
16        }
17
18        if(node != NULL)
19        {
20                debug(200, "open dvr %s", node->dev);
21                if((fd = open(node->dev, O_WRONLY)) < 0)
22                {
23                        debug(200, "open dvr failed %s", node->dev);
24                        node = NULL;
25                }
26                else
27                {
28                        fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
29                        node->fd = fd;
30                        closeonexec(fd);
31                }
32        }
33
34        return node;
35}
36
37int dvropendirect(char *dvrdev)
38{
39        int fd = -1;
40       
41        debug(200, "open direct dvr %s", dvrdev);
42        if((fd = open(dvrdev, O_WRONLY)) < 0)
43        {
44                debug(200, "open dvr failed %s", dvrdev);
45        }
46
47        closeonexec(fd);
48        return fd;
49}
50
51void dvrclose(struct dvbdev* node, int fd)
52{
53        if(node != NULL)
54        {
55                close(node->fd);
56                node->fd = -1;
57        }
58        else
59                close(fd);
60}
61
62int dvrgetdev()
63{
64        int i, y, fd = -1, count = 0;
65        char *buf = NULL, *dvrdev = NULL;
66
67        dvrdev = getconfig("dvrdev", NULL);
68        if(dvrdev == NULL)
69        {
70                err("NULL detect");
71                return count;
72        }
73
74        buf = malloc(MINMALLOC);
75        if(buf == NULL)
76        {
77                err("no memory");
78                return count;
79        }
80       
81        //workaround HD51 kann nur max 4 dvr ... warum??
82        int help = MAXDVRDEV;
83        if(checkrealbox("HD51") == 1 || checkrealbox("HD60") == 1 || checkrealbox("HD61") == 1)
84                help = 4;
85        //
86        for(i = 0; i < MAXDVBADAPTER; i++)
87        {
88                //for(y = 0; y < MAXDVRDEV; y++)
89                for(y = 0; y < help; y++)
90                {
91                        sprintf(buf, dvrdev, i, y);
92                        fd = dvropendirect(buf);
93                        if(fd >= 0)
94                        {
95                                dvrclose(NULL, fd);
96                                count++;
97                                adddvbdev(buf, i, y, -1, DVRDEV, NULL, NULL, NULL, 0);
98                        }
99                }
100        }
101
102        free(buf);
103        return count;
104}
105
106#endif
Note: See TracBrowser for help on using the repository browser.