Xenomai API
2.6.5
|
Data Structures | |
struct | a4l_subdevice |
Structure describing the subdevice. More... | |
Functions | |
a4l_subd_t * | a4l_alloc_subd (int sizeof_priv, void(*setup)(a4l_subd_t *)) |
Allocate a subdevice descriptor. More... | |
int | a4l_add_subd (a4l_dev_t *dev, a4l_subd_t *subd) |
Add a subdevice to the driver descriptor. More... | |
a4l_subd_t * | a4l_get_subd (a4l_dev_t *dev, int idx) |
Get a pointer to the subdevice descriptor referenced by its registration index. More... | |
Subdevices types | |
#define | A4L_SUBD_UNUSED (A4L_SUBD_MASK_SPECIAL|0x1) |
Unused subdevice. | |
#define | A4L_SUBD_AI (A4L_SUBD_MASK_READ|0x2) |
Analog input subdevice. | |
#define | A4L_SUBD_AO (A4L_SUBD_MASK_WRITE|0x4) |
Analog output subdevice. | |
#define | A4L_SUBD_DI (A4L_SUBD_MASK_READ|0x8) |
Digital input subdevice. | |
#define | A4L_SUBD_DO (A4L_SUBD_MASK_WRITE|0x10) |
Digital output subdevice. | |
#define | A4L_SUBD_DIO (A4L_SUBD_MASK_SPECIAL|0x20) |
Digital input/output subdevice. | |
#define | A4L_SUBD_COUNTER (A4L_SUBD_MASK_SPECIAL|0x40) |
Counter subdevice. | |
#define | A4L_SUBD_TIMER (A4L_SUBD_MASK_SPECIAL|0x80) |
Timer subdevice. | |
#define | A4L_SUBD_MEMORY (A4L_SUBD_MASK_SPECIAL|0x100) |
Memory, EEPROM, DPRAM. | |
#define | A4L_SUBD_CALIB (A4L_SUBD_MASK_SPECIAL|0x200) |
Calibration subdevice DACs. | |
#define | A4L_SUBD_PROC (A4L_SUBD_MASK_SPECIAL|0x400) |
Processor, DSP. | |
#define | A4L_SUBD_SERIAL (A4L_SUBD_MASK_SPECIAL|0x800) |
Serial IO subdevice. | |
#define | A4L_SUBD_TYPES |
Mask which gathers all the types. | |
Subdevice features | |
#define | A4L_SUBD_CMD 0x1000 |
The subdevice can handle command (i.e it can perform asynchronous acquisition) | |
#define | A4L_SUBD_MMAP 0x8000 |
The subdevice support mmap operations (technically, any driver can do it; however, the developer might want that his driver must be accessed through read / write. | |
Subdevice status | |
#define | A4L_SUBD_BUSY_NR 0 |
The subdevice is busy, a synchronous or an asynchronous acquisition is occuring. | |
#define | A4L_SUBD_BUSY (1 << A4L_SUBD_BUSY_NR) |
The subdevice is busy, a synchronous or an asynchronous acquisition is occuring. | |
#define | A4L_SUBD_CLEAN_NR 1 |
The subdevice is about to be cleaned in the middle of the detach procedure. | |
#define | A4L_SUBD_CLEAN (1 << A4L_SUBD_CLEAN_NR) |
The subdevice is busy, a synchronous or an asynchronous acquisition is occuring. | |
Subdevice declaration in a driver
The subdevice structure is the most complex one in the Analogy driver layer. It contains some description fields to fill and some callbacks to declare.
The description fields are:
The functions callbacks are:
Once the subdevice is filled, it must be inserted into the driver structure thanks to a4l_add_subd().
int a4l_add_subd | ( | a4l_dev_t * | dev, |
a4l_subd_t * | subd | ||
) |
Add a subdevice to the driver descriptor.
Once the driver descriptor structure is initialized, the function a4l_add_subd() must be used so to add some subdevices to the driver.
[in] | dev | Device descriptor structure |
[in] | subd | Subdevice descriptor structure |
a4l_subd_t* a4l_alloc_subd | ( | int | sizeof_priv, |
void(*)(a4l_subd_t *) | setup | ||
) |
Allocate a subdevice descriptor.
This is a helper function so as to get a suitable subdevice descriptor
[in] | sizeof_priv | Size of the subdevice's private data |
[in] | setup | Setup function to be called after the allocation |
a4l_subd_t* a4l_get_subd | ( | a4l_dev_t * | dev, |
int | idx | ||
) |
Get a pointer to the subdevice descriptor referenced by its registration index.
This function is scarcely useful as all the drivers callbacks get the related subdevice descriptor as first argument. This function is not optimized, it goes through a linked list to get the proper pointer. So it must not be used in real-time context but at initialization / cleanup time (attach / detach).
[in] | dev | Device descriptor structure |
[in] | idx | Subdevice index |