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