21#ifndef _RTDM_UAPI_ANALOGY_H
22#define _RTDM_UAPI_ANALOGY_H
28#define A4L_NONBLOCK (-1)
32typedef unsigned short sampl_t;
33typedef unsigned long lsampl_t;
37 unsigned int idx_subd;
41typedef struct a4l_mmap_arg a4l_mmap_t;
45#define A4L_BUF_MAXSIZE 0x1000000
46#define A4L_BUF_DEFSIZE 0x10000
47#define A4L_BUF_DEFMAGIC 0xffaaff55
50struct a4l_buffer_config {
58 unsigned int idx_subd;
59 unsigned long buf_size;
61typedef struct a4l_buffer_config a4l_bufcfg_t;
64struct a4l_buffer_info {
65 unsigned int idx_subd;
66 unsigned long buf_size;
67 unsigned long rw_count;
69typedef struct a4l_buffer_info a4l_bufinfo_t;
72struct a4l_buffer_config2 {
73 unsigned long wake_count;
74 unsigned long reserved[3];
76typedef struct a4l_buffer_config2 a4l_bufcfg2_t;
80 unsigned int idx_subd;
87 unsigned char bname_size;
89 unsigned int opts_size;
92typedef struct a4l_link_desc a4l_lnkdesc_t;
96 char board_name[A4L_NAMELEN];
97 char driver_name[A4L_NAMELEN];
102typedef struct a4l_dev_info a4l_dvinfo_t;
105#define A4L_DEVCFG _IOW(CIO,0,a4l_lnkdesc_t)
106#define A4L_DEVINFO _IOR(CIO,1,a4l_dvinfo_t)
107#define A4L_SUBDINFO _IOR(CIO,2,a4l_sbinfo_t)
108#define A4L_CHANINFO _IOR(CIO,3,a4l_chinfo_arg_t)
109#define A4L_RNGINFO _IOR(CIO,4,a4l_rnginfo_arg_t)
110#define A4L_CMD _IOWR(CIO,5,a4l_cmd_t)
111#define A4L_CANCEL _IOR(CIO,6,unsigned int)
112#define A4L_INSNLIST _IOR(CIO,7,unsigned int)
113#define A4L_INSN _IOR(CIO,8,unsigned int)
114#define A4L_BUFCFG _IOR(CIO,9,a4l_bufcfg_t)
115#define A4L_BUFINFO _IOWR(CIO,10,a4l_bufinfo_t)
116#define A4L_POLL _IOR(CIO,11,unsigned int)
117#define A4L_MMAP _IOWR(CIO,12,unsigned int)
118#define A4L_NBCHANINFO _IOR(CIO,13,a4l_chinfo_arg_t)
119#define A4L_NBRNGINFO _IOR(CIO,14,a4l_rnginfo_arg_t)
123#define A4L_BUFCFG2 _IOR(CIO,15,a4l_bufcfg_t)
124#define A4L_BUFINFO2 _IOWR(CIO,16,a4l_bufcfg_t)
140#define A4L_CMD_SIMUL 0x1
144#define A4L_CMD_BULK 0x2
148#define A4L_CMD_WRITE 0x4
161#define TRIG_NONE 0x00000001
165#define TRIG_NOW 0x00000002
169#define TRIG_FOLLOW 0x00000004
173#define TRIG_TIME 0x00000008
177#define TRIG_TIMER 0x00000010
181#define TRIG_COUNT 0x00000020
185#define TRIG_EXT 0x00000040
189#define TRIG_INT 0x00000080
193#define TRIG_OTHER 0x00000100
197#define TRIG_WAKE_EOS 0x0020
201#define TRIG_ROUND_MASK 0x00030000
205#define TRIG_ROUND_NEAREST 0x00000000
209#define TRIG_ROUND_DOWN 0x00010000
213#define TRIG_ROUND_UP 0x00020000
217#define TRIG_ROUND_UP_NEXT 0x00030000
231#define CHAN(a) ((a) & 0xffff)
235#define RNG(a) (((a) & 0xff) << 16)
239#define AREF(a) (((a) & 0x03) << 24)
243#define FLAGS(a) ((a) & CR_FLAGS_MASK)
247#define PACK(a, b, c) (a | RNG(b) | AREF(c))
251#define PACK_FLAGS(a, b, c, d) (PACK(a, b, c) | FLAGS(d))
256#define AREF_GROUND 0x00
260#define AREF_COMMON 0x01
264#define AREF_DIFF 0x02
268#define AREF_OTHER 0x03
272#if !defined(DOXYGEN_CPP)
274#define CR_FLAGS_MASK 0xfc000000
275#define CR_ALT_FILTER (1<<26)
276#define CR_DITHER CR_ALT_FILTER
277#define CR_DEGLITCH CR_ALT_FILTER
278#define CR_ALT_SOURCE (1<<27)
279#define CR_EDGE (1<<30)
280#define CR_INVERT (1<<31)
324 unsigned int valid_simul_stages;
340#define A4L_RNG_FACTOR 1000000
345#define A4L_RNG_VOLT_UNIT 0x0
349#define A4L_RNG_MAMP_UNIT 0x1
353#define A4L_RNG_NO_UNIT 0x2
357#define A4L_RNG_EXT_UNIT 0x4
362#define A4L_RNG_UNIT(x) (x & (A4L_RNG_VOLT_UNIT | \
363 A4L_RNG_MAMP_UNIT | \
373#define A4L_SUBD_MASK_READ 0x80000000
374#define A4L_SUBD_MASK_WRITE 0x40000000
375#define A4L_SUBD_MASK_SPECIAL 0x20000000
391#define A4L_SUBD_UNUSED (A4L_SUBD_MASK_SPECIAL|0x1)
395#define A4L_SUBD_AI (A4L_SUBD_MASK_READ|0x2)
399#define A4L_SUBD_AO (A4L_SUBD_MASK_WRITE|0x4)
403#define A4L_SUBD_DI (A4L_SUBD_MASK_READ|0x8)
407#define A4L_SUBD_DO (A4L_SUBD_MASK_WRITE|0x10)
411#define A4L_SUBD_DIO (A4L_SUBD_MASK_SPECIAL|0x20)
415#define A4L_SUBD_COUNTER (A4L_SUBD_MASK_SPECIAL|0x40)
419#define A4L_SUBD_TIMER (A4L_SUBD_MASK_SPECIAL|0x80)
423#define A4L_SUBD_MEMORY (A4L_SUBD_MASK_SPECIAL|0x100)
427#define A4L_SUBD_CALIB (A4L_SUBD_MASK_SPECIAL|0x200)
431#define A4L_SUBD_PROC (A4L_SUBD_MASK_SPECIAL|0x400)
435#define A4L_SUBD_SERIAL (A4L_SUBD_MASK_SPECIAL|0x800)
439#define A4L_SUBD_TYPES (A4L_SUBD_UNUSED | \
465#define A4L_SUBD_CMD 0x1000
471#define A4L_SUBD_MMAP 0x8000
486#define A4L_SUBD_BUSY_NR 0
487#define A4L_SUBD_BUSY (1 << A4L_SUBD_BUSY_NR)
493#define A4L_SUBD_CLEAN_NR 1
494#define A4L_SUBD_CLEAN (1 << A4L_SUBD_CLEAN_NR)
502struct a4l_subd_info {
504 unsigned long status;
505 unsigned char nb_chan;
507typedef struct a4l_subd_info a4l_sbinfo_t;
510struct a4l_chan_info {
511 unsigned long chan_flags;
512 unsigned char nb_rng;
513 unsigned char nb_bits;
515typedef struct a4l_chan_info a4l_chinfo_t;
517struct a4l_chinfo_arg {
518 unsigned int idx_subd;
521typedef struct a4l_chinfo_arg a4l_chinfo_arg_t;
529typedef struct a4l_rng_info a4l_rnginfo_t;
531struct a4l_rng_info_arg {
532 unsigned int idx_subd;
533 unsigned int idx_chan;
536typedef struct a4l_rng_info_arg a4l_rnginfo_arg_t;
540#define A4L_INSN_MASK_READ 0x8000000
541#define A4L_INSN_MASK_WRITE 0x4000000
542#define A4L_INSN_MASK_SPECIAL 0x2000000
558#define A4L_INSN_READ (0 | A4L_INSN_MASK_READ)
562#define A4L_INSN_WRITE (1 | A4L_INSN_MASK_WRITE)
566#define A4L_INSN_BITS (2 | A4L_INSN_MASK_READ | \
571#define A4L_INSN_CONFIG (3 | A4L_INSN_MASK_READ | \
576#define A4L_INSN_GTOD (4 | A4L_INSN_MASK_READ | \
577 A4L_INSN_MASK_SPECIAL)
581#define A4L_INSN_WAIT (5 | A4L_INSN_MASK_WRITE | \
582 A4L_INSN_MASK_SPECIAL)
586#define A4L_INSN_INTTRIG (6 | A4L_INSN_MASK_WRITE | \
587 A4L_INSN_MASK_SPECIAL)
594#define A4L_INSN_WAIT_MAX 100000
602#define A4L_INSN_CONFIG_DIO_INPUT 0
603#define A4L_INSN_CONFIG_DIO_OUTPUT 1
604#define A4L_INSN_CONFIG_DIO_OPENDRAIN 2
605#define A4L_INSN_CONFIG_ANALOG_TRIG 16
606#define A4L_INSN_CONFIG_ALT_SOURCE 20
607#define A4L_INSN_CONFIG_DIGITAL_TRIG 21
608#define A4L_INSN_CONFIG_BLOCK_SIZE 22
609#define A4L_INSN_CONFIG_TIMER_1 23
610#define A4L_INSN_CONFIG_FILTER 24
611#define A4L_INSN_CONFIG_CHANGE_NOTIFY 25
612#define A4L_INSN_CONFIG_SERIAL_CLOCK 26
613#define A4L_INSN_CONFIG_BIDIRECTIONAL_DATA 27
614#define A4L_INSN_CONFIG_DIO_QUERY 28
615#define A4L_INSN_CONFIG_PWM_OUTPUT 29
616#define A4L_INSN_CONFIG_GET_PWM_OUTPUT 30
617#define A4L_INSN_CONFIG_ARM 31
618#define A4L_INSN_CONFIG_DISARM 32
619#define A4L_INSN_CONFIG_GET_COUNTER_STATUS 33
620#define A4L_INSN_CONFIG_RESET 34
621#define A4L_INSN_CONFIG_GPCT_SINGLE_PULSE_GENERATOR 1001
622#define A4L_INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR 1002
623#define A4L_INSN_CONFIG_GPCT_QUADRATURE_ENCODER 1003
624#define A4L_INSN_CONFIG_SET_GATE_SRC 2001
625#define A4L_INSN_CONFIG_GET_GATE_SRC 2002
626#define A4L_INSN_CONFIG_SET_CLOCK_SRC 2003
627#define A4L_INSN_CONFIG_GET_CLOCK_SRC 2004
628#define A4L_INSN_CONFIG_SET_OTHER_SRC 2005
629#define A4L_INSN_CONFIG_SET_COUNTER_MODE 4097
630#define A4L_INSN_CONFIG_SET_ROUTING 4099
631#define A4L_INSN_CONFIG_GET_ROUTING 4109
641#define A4L_COUNTER_ARMED 0x1
642#define A4L_COUNTER_COUNTING 0x2
643#define A4L_COUNTER_TERMINAL_COUNT 0x4
655#define A4L_OPENDRAIN 2
667#define A4L_EV_START 0x00040000
668#define A4L_EV_SCAN_BEGIN 0x00080000
669#define A4L_EV_CONVERT 0x00100000
670#define A4L_EV_SCAN_END 0x00200000
671#define A4L_EV_STOP 0x00400000
709struct a4l_calibration_subdev {
716struct a4l_calibration_subdev_data {
726struct a4l_calibration_data {
730 struct a4l_calibration_subdev_data *ai;
732 struct a4l_calibration_subdev_data *ao;
735struct a4l_polynomial {
int a4l_poll(a4l_desc_t *dsc, unsigned int idx_subd, unsigned long ms_timeout)
Get the available data count.
Definition async.c:286
Structure describing the asynchronous instruction.
Definition analogy.h:289
unsigned int scan_begin_arg
Scan begin trigger argument.
Definition analogy.h:303
unsigned long flags
Command flags.
Definition analogy.h:293
unsigned int start_src
Start trigger type.
Definition analogy.h:297
unsigned char idx_subd
Subdevice to which the command will be applied.
Definition analogy.h:290
unsigned int * chan_descs
Tab containing channels descriptors.
Definition analogy.h:320
unsigned int data_len
< cmd simulation valid stages (driver dependent)
Definition analogy.h:327
unsigned int convert_src
Convert trigger type.
Definition analogy.h:305
unsigned int scan_end_arg
Scan end trigger argument.
Definition analogy.h:311
sampl_t * data
Driver specific buffer pointer.
Definition analogy.h:329
unsigned int stop_src
Stop trigger type.
Definition analogy.h:313
unsigned int convert_arg
Convert trigger argument.
Definition analogy.h:307
unsigned int scan_end_src
Scan end trigger type.
Definition analogy.h:309
unsigned int scan_begin_src
Scan begin trigger type.
Definition analogy.h:301
unsigned int stop_arg
Stop trigger argument.
Definition analogy.h:315
unsigned int start_arg
Start trigger argument.
Definition analogy.h:299
unsigned char nb_chan
Count of channels related with the command.
Definition analogy.h:318
Structure describing the list of synchronous instructions.
Definition analogy.h:699
unsigned int count
Instructions count.
Definition analogy.h:700
a4l_insn_t * insns
Tab containing the instructions pointers.
Definition analogy.h:702
Structure describing the synchronous instruction.
Definition analogy.h:680
unsigned int idx_subd
Subdevice to which the instruction will be applied.
Definition analogy.h:683
unsigned int type
Instruction type.
Definition analogy.h:681
unsigned int data_size
Size of the intruction data.
Definition analogy.h:687
unsigned int chan_desc
Channel descriptor.
Definition analogy.h:685
void * data
Instruction data.
Definition analogy.h:689