Home | History | Annotate | Line # | Download | only in sys
bsd_audioirig.h revision 1.1.1.5
      1  1.1.1.5  christos /*	$NetBSD: bsd_audioirig.h,v 1.1.1.5 2015/07/10 13:11:03 christos Exp $	*/
      2  1.1.1.5  christos 
      3      1.1    kardel /*
      4  1.1.1.3  christos  *	$Header: bsd_audioirig.h,v 1.0 93/08/02 12:42:00
      5      1.1    kardel  */
      6      1.1    kardel 
      7      1.1    kardel #ifndef _BSD_AUDIOIRIG_H_
      8      1.1    kardel #define _BSD_AUDIOIRIG_H_
      9      1.1    kardel 
     10      1.1    kardel #include <sys/time.h>
     11      1.1    kardel 
     12      1.1    kardel /********************************************************************/
     13      1.1    kardel /* user interface */
     14      1.1    kardel 
     15      1.1    kardel /*
     16      1.1    kardel  * irig ioctls
     17      1.1    kardel  */
     18      1.1    kardel #if defined(__STDC__) || (!defined(sun) && !defined(ibm032) && !defined(__GNUC))
     19      1.1    kardel #define AUDIO_IRIG_OPEN         _IO('A', 50)
     20      1.1    kardel #define AUDIO_IRIG_CLOSE        _IO('A', 51)
     21      1.1    kardel #define AUDIO_IRIG_SETFORMAT    _IOWR('A', 52, int)
     22      1.1    kardel #else
     23      1.1    kardel #define AUDIO_IRIG_OPEN         _IO(A, 50)
     24      1.1    kardel #define AUDIO_IRIG_CLOSE        _IO(A, 51)
     25      1.1    kardel #define AUDIO_IRIG_SETFORMAT    _IOWR(A, 52, int)
     26      1.1    kardel #endif
     27      1.1    kardel 
     28      1.1    kardel /*
     29      1.1    kardel  * irig error codes
     30      1.1    kardel  */
     31      1.1    kardel #define AUDIO_IRIG_BADSIGNAL	0x01
     32      1.1    kardel #define AUDIO_IRIG_BADDATA	0x02
     33      1.1    kardel #define AUDIO_IRIG_BADSYNC	0x04
     34      1.1    kardel #define AUDIO_IRIG_BADCLOCK	0x08
     35      1.1    kardel #define AUDIO_IRIG_OLDDATA	0x10
     36      1.1    kardel 
     37      1.1    kardel /********************************************************************/
     38      1.1    kardel 
     39      1.1    kardel /*
     40      1.1    kardel  * auib definitions
     41      1.1    kardel  */
     42      1.1    kardel #define AUIB_SIZE	(0x0040)
     43      1.1    kardel #define AUIB_INC	(0x0008)
     44      1.1    kardel #define AUIB_MOD(k)	((k) & 0x0038)
     45      1.1    kardel #define AUIB_INIT(ib)	((ib)->ib_head = (ib)->ib_tail = (ib)->ib_lock = \
     46      1.1    kardel 			 (ib)->phase = (ib)->shi = (ib)->slo = (ib)->high = \
     47      1.1    kardel 			 (ib)->level0 = (ib)->level1 = \
     48      1.1    kardel 			 (ib)->shift[0] = (ib)->shift[1] = (ib)->shift[2] = \
     49      1.1    kardel 			 (ib)->shift[3] = (ib)->sdata[0] = (ib)->sdata[1] = \
     50      1.1    kardel 			 (ib)->sdata[2] = (ib)->sdata[3] = (ib)->err = 0)
     51      1.1    kardel #define AUIB_EMPTY(ib)	((ib)->ib_head == (ib)->ib_tail)
     52      1.1    kardel #define AUIB_LEN(ib)	(AUIB_MOD((ib)->ib_tail - (ib)->ib_head))
     53      1.1    kardel #define AUIB_LEFT(ib)	(AUIB_MOD((ib)->ib_head - (ib)->ib_tail - 1))
     54      1.1    kardel #define IRIGDELAY 3
     55      1.1    kardel #define IRIGLEVEL 1355
     56      1.1    kardel 
     57      1.1    kardel #ifndef LOCORE
     58      1.1    kardel /*
     59      1.1    kardel  * irig_time holds IRIG data for one second
     60      1.1    kardel  */
     61      1.1    kardel struct irig_time {
     62      1.1    kardel         struct timeval  stamp;          /* timestamp */
     63      1.1    kardel         u_char  bits[13];               /* 100 irig data bits */
     64      1.1    kardel 	u_char	status;			/* status byte */
     65      1.1    kardel         char    time[14];               /* time string */
     66      1.1    kardel };
     67      1.1    kardel 
     68      1.1    kardel /*
     69      1.1    kardel  * auib's are used for IRIG data communication between the trap
     70      1.1    kardel  * handler and the software interrupt.
     71      1.1    kardel  */
     72      1.1    kardel struct auib {
     73      1.1    kardel 	/* driver variables */
     74      1.1    kardel 	u_short	active;			/* 0=inactive, else=active */
     75      1.1    kardel 	u_short	format;			/* time output format */
     76      1.1    kardel 	struct	irig_time timestr;	/* time structure */
     77      1.1    kardel 	char	buffer[14];		/* output formation buffer */
     78      1.1    kardel 
     79      1.1    kardel 	/* hardware interrupt variables */
     80      1.1    kardel 	struct	timeval tv1,tv2,tv3;	/* time stamps (median filter) */
     81      1.1    kardel 	int	level0,level1;		/* lo/hi input levels */
     82      1.1    kardel 	int	level;			/* decision level */
     83      1.1    kardel 	int	high;			/* recent largest sample */
     84      1.1    kardel 	int	sl0,sl1;		/* recent sample levels */
     85      1.1    kardel 	int	lasts;			/* last sample value */
     86      1.1    kardel 	u_short	scount;			/* sample count */
     87      1.1    kardel 	u_long	eacc;			/* 10-bit element accumulator */
     88      1.1    kardel 	u_long	ebit;			/* current bit in element */
     89      1.1    kardel 	u_char	r_level,mmr1;		/* recording level 0-255 */
     90      1.1    kardel 	int	shi,slo,phase;		/* AGC variables */
     91      1.1    kardel 	u_long	err;			/* error status bits */
     92      1.1    kardel 	int	ecount;			/* count of elements this second */
     93      1.1    kardel 	long	shift[4];		/* shift register of pos ident */
     94      1.1    kardel 	long	sdata[4];		/* shift register of symbols */
     95      1.1    kardel 
     96      1.1    kardel 	int	ib_head;		/* queue head */
     97      1.1    kardel 	int	ib_tail;		/* queue tail */
     98      1.1    kardel 	u_short	ib_lock;		/* queue head lock */
     99      1.1    kardel 	u_long	ib_data[AUIB_SIZE];	/* data buffer */
    100      1.1    kardel };
    101      1.1    kardel #endif
    102      1.1    kardel 
    103      1.1    kardel #endif /* _BSD_AUDIOIRIG_H_ */
    104