bsd_audioirig.h revision 1.1 1 1.1 kardel /* $NetBSD: bsd_audioirig.h,v 1.1 2009/12/13 16:54:57 kardel Exp $ */
2 1.1 kardel
3 1.1 kardel /*
4 1.1 kardel * $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