Commit | Line | Data |
---|---|---|
5377d91f MH |
1 | .. -*- coding: utf-8; mode: rst -*- |
2 | ||
3 | .. _frontend_f_open: | |
4 | ||
5 | ******************* | |
6 | DVB frontend open() | |
7 | ******************* | |
8 | ||
15e7d615 | 9 | Name |
586027ce | 10 | ==== |
5377d91f | 11 | |
586027ce | 12 | fe-open - Open a frontend device |
5377d91f | 13 | |
15e7d615 MCC |
14 | |
15 | Synopsis | |
5377d91f MH |
16 | ======== |
17 | ||
18 | .. code-block:: c | |
19 | ||
20 | #include <fcntl.h> | |
21 | ||
22 | ||
b7e67f6c | 23 | .. cpp:function:: int open( const char *device_name, int flags ) |
5377d91f | 24 | |
586027ce | 25 | |
15e7d615 | 26 | Arguments |
5377d91f MH |
27 | ========= |
28 | ||
29 | ``device_name`` | |
30 | Device to be opened. | |
31 | ||
32 | ``flags`` | |
33 | Open flags. Access can either be ``O_RDWR`` or ``O_RDONLY``. | |
34 | ||
35 | Multiple opens are allowed with ``O_RDONLY``. In this mode, only | |
36 | query and read ioctls are allowed. | |
37 | ||
38 | Only one open is allowed in ``O_RDWR``. In this mode, all ioctls are | |
39 | allowed. | |
40 | ||
41 | When the ``O_NONBLOCK`` flag is given, the system calls may return | |
cdb4af0f | 42 | ``EAGAIN`` error code when no data is available or when the device |
5377d91f MH |
43 | driver is temporarily busy. |
44 | ||
45 | Other flags have no effect. | |
46 | ||
47 | ||
15e7d615 | 48 | Description |
5377d91f MH |
49 | =========== |
50 | ||
51 | This system call opens a named frontend device | |
52 | (``/dev/dvb/adapter?/frontend?``) for subsequent use. Usually the first | |
53 | thing to do after a successful open is to find out the frontend type | |
7347081e | 54 | with :ref:`FE_GET_INFO`. |
5377d91f MH |
55 | |
56 | The device can be opened in read-only mode, which only allows monitoring | |
57 | of device status and statistics, or read/write mode, which allows any | |
58 | kind of use (e.g. performing tuning operations.) | |
59 | ||
60 | In a system with multiple front-ends, it is usually the case that | |
61 | multiple devices cannot be open in read/write mode simultaneously. As | |
62 | long as a front-end device is opened in read/write mode, other open() | |
63 | calls in read/write mode will either fail or block, depending on whether | |
64 | non-blocking or blocking mode was specified. A front-end device opened | |
65 | in blocking mode can later be put into non-blocking mode (and vice | |
66 | versa) using the F_SETFL command of the fcntl system call. This is a | |
67 | standard system call, documented in the Linux manual page for fcntl. | |
68 | When an open() call has succeeded, the device will be ready for use in | |
69 | the specified mode. This implies that the corresponding hardware is | |
70 | powered up, and that other front-ends may have been powered down to make | |
71 | that possible. | |
72 | ||
73 | ||
15e7d615 | 74 | Return Value |
5377d91f MH |
75 | ============ |
76 | ||
760c7010 MCC |
77 | On success :ref:`open() <frontend_f_open>` returns the new file descriptor. |
78 | On error, -1 is returned, and the ``errno`` variable is set appropriately. | |
79 | ||
5377d91f MH |
80 | Possible error codes are: |
81 | ||
82 | EACCES | |
83 | The caller has no permission to access the device. | |
84 | ||
85 | EBUSY | |
86 | The the device driver is already in use. | |
87 | ||
88 | ENXIO | |
89 | No device corresponding to this device special file exists. | |
90 | ||
91 | ENOMEM | |
92 | Not enough kernel memory was available to complete the request. | |
93 | ||
94 | EMFILE | |
95 | The process already has the maximum number of files open. | |
96 | ||
97 | ENFILE | |
98 | The limit on the total number of files open on the system has been | |
99 | reached. | |
100 | ||
101 | ENODEV | |
102 | The device got removed. |