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