source: titan/titan/scdev.h @ 44949

Last change on this file since 44949 was 28126, checked in by obi, 10 years ago

mipsel add hybrid tuner support

File size: 6.2 KB
Line 
1#ifndef SCDEV_H
2#define SCDEV_H
3
4#ifndef IOCTL_SET_RESET
5#define IOCTL_SET_RESET _IOW('s', 1, uint32_t)
6#endif
7
8#ifndef IOCTL_SET_MODES
9#define IOCTL_SET_MODES _IOW('s', 2, scimodes)
10#endif
11
12#ifndef IOCTL_GET_MODES
13#define IOCTL_GET_MODES _IOW('s', 3, scimodes)
14#endif
15
16#ifndef IOCTL_SET_PARAMETERS
17#define IOCTL_SET_PARAMETERS    _IOW('s', 4, sciparameters)
18#endif
19
20#ifndef IOCTL_GET_PARAMETERS
21#define IOCTL_GET_PARAMETERS    _IOW('s', 5, sciparameters)
22#endif
23
24#ifndef IOCTL_SET_CLOCK_START
25#define IOCTL_SET_CLOCK_START   _IOW('s', 6, uint32_t)
26#endif
27
28#ifndef IOCTL_SET_CLOCK_STOP
29#define IOCTL_SET_CLOCK_STOP    _IOW('s', 7, uint32_t)
30#endif
31
32#ifndef IOCTL_GET_IS_CARD_PRESENT
33#define IOCTL_GET_IS_CARD_PRESENT       _IOW('s', 8, uint32_t)
34#endif
35
36#ifndef IOCTL_GET_IS_CARD_ACTIVATED
37#define IOCTL_GET_IS_CARD_ACTIVATED     _IOW('s', 9, uint32_t)
38#endif
39
40#ifndef IOCTL_SET_DEACTIVATE
41#define IOCTL_SET_DEACTIVATE    _IOW('s', 10, uint32_t)
42#endif
43
44#ifndef IOCTL_SET_ATR_READY
45#define IOCTL_SET_ATR_READY     _IOW('s', 11, uint32_t)
46#endif
47
48#ifndef IOCTL_GET_ATR_STATUS
49#define IOCTL_GET_ATR_STATUS    _IOW('s', 12, uint32_t)
50#endif
51
52#ifndef IOCTL_DUMP_REGS
53#define IOCTL_DUMP_REGS _IOW('s', 20, uint32_t)
54#endif
55
56#ifndef IOCTL_SET_CLOCK
57#define IOCTL_SET_CLOCK _IOW('s', 13, uint32_t)
58#endif
59
60#ifndef IOCTL_SET_ONLY_RESET
61#define IOCTL_SET_ONLY_RESET    _IOW('s', 100, uint32_t)
62#endif
63
64struct dvbdev* scopen()
65{
66        int fd = -1;
67        struct dvbdev* node = dvbdev;
68
69        while(node != NULL)
70        {
71                if(node->fd == -1 && node->type == SCDEV)
72                        break;
73                node = node->next;
74        }
75
76        if(node != NULL)
77        {
78                if((fd = open(node->dev, O_RDWR)) < 0)
79                {
80                        debug(200, "open sc failed %s", node->dev);
81                        node = NULL;
82                }
83                else
84                {
85                        node->fd = fd;
86                        closeonexec(fd);
87                }
88        }
89
90        return node;
91}
92
93int scopendirect(char *scdev)
94{
95        int fd = -1;
96
97        if((fd = open(scdev, O_RDWR)) < 0)
98        {
99                debug(200, "open sc failed %s", scdev);
100        }
101
102        closeonexec(fd);
103        return fd;
104}
105
106void scclose(struct dvbdev* node, int fd)
107{
108        if(node != NULL)
109        {
110                close(node->fd);
111                node->fd = -1;
112        }
113        else
114                close(fd);
115}
116
117int scsetreset(struct dvbdev* node)
118{
119        if(node == NULL)
120        {
121                err("NULL detect");
122                return 1;
123        }
124
125        debug(200, "IOCTL_SET_RESET");
126        if(ioctl(node->fd, IOCTL_SET_RESET) < 0)
127        {
128                perr("IOCTL_SET_RESET");
129                return 1;
130        }
131
132        return 0;
133}
134
135int scsetmodes(struct dvbdev* node, struct sci_modes* modes)
136{
137        if(node == NULL || modes == NULL)
138        {
139                err("NULL detect");
140                return 1;
141        }
142
143        debug(200, "IOCTL_SET_MODES");
144        if(ioctl(node->fd, IOCTL_SET_MODES, modes) < 0)
145        {
146                perr("IOCTL_SET_MODES");
147                return 1;
148        }
149
150        return 0;
151}
152
153int scgetmodes(struct dvbdev* node, struct sci_modes* modes)
154{
155        if(node == NULL || modes == NULL)
156        {
157                err("NULL detect");
158                return 1;
159        }
160
161        debug(200, "IOCTL_GET_MODES");
162        if(ioctl(node->fd, IOCTL_GET_MODES, modes) < 0)
163        {
164                perr("IOCTL_GET_MODES");
165                return 1;
166        }
167
168        return 0;
169}
170
171int scsetparameters(struct dvbdev* node, struct sci_parameters* parameters)
172{
173        if(node == NULL || parameters == NULL)
174        {
175                err("NULL detect");
176                return 1;
177        }
178
179        debug(200, "IOCTL_SET_PARAMETERS");
180        if(ioctl(node->fd, IOCTL_SET_PARAMETERS, parameters) < 0)
181        {
182                perr("IOCTL_SET_PARAMETERS");
183                return 1;
184        }
185
186        return 0;
187}
188
189int scgetparameters(struct dvbdev* node, struct sci_parameters* parameters)
190{
191        if(node == NULL || parameters == NULL)
192        {
193                err("NULL detect");
194                return 1;
195        }
196
197        debug(200, "IOCTL_GET_PARAMETERS");
198        if(ioctl(node->fd, IOCTL_GET_PARAMETERS, parameters) < 0)
199        {
200                perr("IOCTL_GET_PARAMETERS");
201                return 1;
202        }
203
204        return 0;
205}
206
207int scsetclockstart(struct dvbdev* node)
208{
209        if(node == NULL)
210        {
211                err("NULL detect");
212                return 1;
213        }
214
215        debug(200, "IOCTL_SET_CLOCK_START");
216        if(ioctl(node->fd, IOCTL_SET_CLOCK_START) < 0)
217        {
218                perr("IOCTL_SET_CLOCK_START");
219                return 1;
220        }
221
222        return 0;
223}
224
225int scsetclockstop(struct dvbdev* node)
226{
227        if(node == NULL)
228        {
229                err("NULL detect");
230                return 1;
231        }
232
233        debug(200, "IOCTL_SET_CLOCK_STOP");
234        if(ioctl(node->fd, IOCTL_SET_CLOCK_STOP) < 0)
235        {
236                perr("IOCTL_SET_CLOCK_STOP");
237                return 1;
238        }
239
240        return 0;
241}
242
243int scgetiscardpresent(struct dvbdev* node, uint32_t* status)
244{
245        if(node == NULL)
246        {
247                err("NULL detect");
248                return 1;
249        }
250
251        debug(200, "IOCTL_GET_IS_CARD_PRESENT");
252        if(ioctl(node->fd, IOCTL_GET_IS_CARD_PRESENT, status) < 0)
253        {
254                perr("IOCTL_GET_IS_CARD_PRESENT");
255                return 1;
256        }
257
258        return 0;
259}
260
261int scgetiscardactivated(struct dvbdev* node, uint32_t* status)
262{
263        if(node == NULL)
264        {
265                err("NULL detect");
266                return 1;
267        }
268
269        debug(200, "IOCTL_GET_IS_CARD_ACTIVATED");
270        if(ioctl(node->fd, IOCTL_GET_IS_CARD_ACTIVATED, status) < 0)
271        {
272                perr("IOCTL_GET_IS_CARD_ACTIVATED");
273                return 1;
274        }
275
276        return 0;
277}
278
279int scsetdeactivate(struct dvbdev* node)
280{
281        if(node == NULL)
282        {
283                err("NULL detect");
284                return 1;
285        }
286
287        debug(200, "IOCTL_SET_DEACTIVATE");
288        if(ioctl(node->fd, IOCTL_SET_DEACTIVATE) < 0)
289        {
290                perr("IOCTL_SET_DEACTIVATE");
291                return 1;
292        }
293
294        return 0;
295}
296
297int scsetatrready(struct dvbdev* node)
298{
299        if(node == NULL)
300        {
301                err("NULL detect");
302                return 1;
303        }
304
305        debug(200, "IOCTL_SET_ATR_READY");
306        if(ioctl(node->fd, IOCTL_SET_ATR_READY) < 0)
307        {
308                perr("IOCTL_SET_ATR_READY");
309                return 1;
310        }
311
312        return 0;
313}
314
315int scgetatrstatus(struct dvbdev* node, uint32_t* status)
316{
317        if(node == NULL)
318        {
319                err("NULL detect");
320                return 1;
321        }
322
323        debug(200, "IOCTL_GET_ATR_STATUS");
324        if(ioctl(node->fd, IOCTL_GET_ATR_STATUS, status) < 0)
325        {
326                perr("IOCTL_GET_ATR_STATUS");
327                return 1;
328        }
329
330        return 0;
331}
332
333int scsetclock(struct dvbdev* node, uint32_t* clock)
334{
335        if(node == NULL)
336        {
337                err("NULL detect");
338                return 1;
339        }
340
341        debug(200, "IOCTL_SET_CLOCK");
342        if(ioctl(node->fd, IOCTL_SET_CLOCK, clock) < 0)
343        {
344                perr("IOCTL_SET_CLOCK");
345                return 1;
346        }
347
348        return 0;
349}
350
351int scsetonlyreset(struct dvbdev* node)
352{
353        if(node == NULL)
354        {
355                err("NULL detect");
356                return 1;
357        }
358
359        debug(200, "IOCTL_SET_ONLY_RESET");
360        if(ioctl(node->fd, IOCTL_SET_ONLY_RESET) < 0)
361        {
362                perr("IOCTL_SET_ONLY_RESET");
363                return 1;
364        }
365
366        return 0;
367}
368
369int scgetdev()
370{
371        int y, fd = -1, count = 0;
372        char *buf = NULL, *scdev = NULL;
373
374        scdev = getconfig("scdev", NULL);
375        if(scdev == NULL)
376        {
377                err("NULL detect");
378                return count;
379        }
380
381        buf = malloc(MINMALLOC);
382        if(buf == NULL)
383        {
384                err("no memory");
385                return count;
386        }
387
388        for(y = 0; y < MAXSCDEV; y++)
389        {
390                sprintf(buf, scdev, y);
391                fd = scopendirect(buf);
392                if(fd >= 0)
393                {
394                        scclose(NULL, fd);
395                        count++;
396                        adddvbdev(buf, 0, y, -1, SCDEV, NULL, NULL, NULL, 0);
397                }
398        }
399
400        free(buf);
401        return count;
402}
403
404#endif
Note: See TracBrowser for help on using the repository browser.