1 |
1275 |
phoenix |
/* -*- c-basic-offset: 8 -*- */
|
2 |
|
|
|
3 |
|
|
#ifndef __AMDTP_H
|
4 |
|
|
#define __AMDTP_H
|
5 |
|
|
|
6 |
|
|
#include <asm/types.h>
|
7 |
|
|
#include "ieee1394-ioctl.h"
|
8 |
|
|
|
9 |
|
|
/* The userspace interface for the Audio & Music Data Transmission
|
10 |
|
|
* Protocol driver is really simple. First, open /dev/amdtp, use the
|
11 |
|
|
* ioctl to configure format, rate, dimension and either plug or
|
12 |
|
|
* channel, then start writing samples.
|
13 |
|
|
*
|
14 |
|
|
* The formats supported by the driver are listed below.
|
15 |
|
|
* AMDTP_FORMAT_RAW corresponds to the AM824 raw format, which can
|
16 |
|
|
* carry any number of channels, so use this if you're streaming
|
17 |
|
|
* multichannel audio. The AMDTP_FORMAT_IEC958_PCM corresponds to the
|
18 |
|
|
* AM824 IEC958 encapsulation without the IEC958 data bit set, using
|
19 |
|
|
* AMDTP_FORMAT_IEC958_AC3 will transmit the samples with the data bit
|
20 |
|
|
* set, suitable for transmitting compressed AC-3 audio.
|
21 |
|
|
*
|
22 |
|
|
* The rate field specifies the transmission rate; supported values
|
23 |
|
|
* are 32000, 44100, 48000, 88200, 96000, 176400 and 192000.
|
24 |
|
|
*
|
25 |
|
|
* The dimension field specifies the dimension of the signal, that is,
|
26 |
|
|
* the number of audio channels. Only AMDTP_FORMAT_RAW supports
|
27 |
|
|
* settings greater than 2.
|
28 |
|
|
*
|
29 |
|
|
* The mode field specifies which transmission mode to use. The AMDTP
|
30 |
|
|
* specifies two different transmission modes: blocking and
|
31 |
|
|
* non-blocking. The blocking transmission mode always send a fixed
|
32 |
|
|
* number of samples, typically 8, 16 or 32. To exactly match the
|
33 |
|
|
* transmission rate, the driver alternates between sending empty and
|
34 |
|
|
* non-empty packets. In non-blocking mode, the driver transmits as
|
35 |
|
|
* small packets as possible. For example, for a transmission rate of
|
36 |
|
|
* 44100Hz, the driver should send 5 41/80 samples in every cycle, but
|
37 |
|
|
* this is not possible so instead the driver alternates between
|
38 |
|
|
* sending 5 and 6 samples.
|
39 |
|
|
*
|
40 |
|
|
* The last thing to specify is either the isochronous channel to use
|
41 |
|
|
* or the output plug to connect to. If you know what channel the
|
42 |
|
|
* destination device will listen on, you can specify the channel
|
43 |
|
|
* directly and use the AMDTP_IOC_CHANNEL ioctl. However, if the
|
44 |
|
|
* destination device chooses the channel and uses the IEC61883-1 plug
|
45 |
|
|
* mechanism, you can specify an output plug to connect to. The
|
46 |
|
|
* driver will pick up the channel number from the plug once the
|
47 |
|
|
* destination device locks the output plug control register. In this
|
48 |
|
|
* case set the plug field and use the AMDTP_IOC_PLUG ioctl.
|
49 |
|
|
*
|
50 |
|
|
* Having configured the interface, the driver now accepts writes of
|
51 |
|
|
* regular 16 bit signed little endian samples, with the channels
|
52 |
|
|
* interleaved. For example, 4 channels would look like:
|
53 |
|
|
*
|
54 |
|
|
* | sample 0 | sample 1 ...
|
55 |
|
|
* | ch. 0 | ch. 1 | ch. 2 | ch. 3 | ch. 0 | ...
|
56 |
|
|
* | lsb | msb | lsb | msb | lsb | msb | lsb | msb | lsb | msb | ...
|
57 |
|
|
*
|
58 |
|
|
*/
|
59 |
|
|
|
60 |
|
|
enum {
|
61 |
|
|
AMDTP_FORMAT_RAW,
|
62 |
|
|
AMDTP_FORMAT_IEC958_PCM,
|
63 |
|
|
AMDTP_FORMAT_IEC958_AC3
|
64 |
|
|
};
|
65 |
|
|
|
66 |
|
|
enum {
|
67 |
|
|
AMDTP_MODE_BLOCKING,
|
68 |
|
|
AMDTP_MODE_NON_BLOCKING,
|
69 |
|
|
};
|
70 |
|
|
|
71 |
|
|
enum {
|
72 |
|
|
AMDTP_INPUT_LE16,
|
73 |
|
|
AMDTP_INPUT_BE16,
|
74 |
|
|
};
|
75 |
|
|
|
76 |
|
|
struct amdtp_ioctl {
|
77 |
|
|
__u32 format;
|
78 |
|
|
__u32 rate;
|
79 |
|
|
__u32 dimension;
|
80 |
|
|
__u32 mode;
|
81 |
|
|
union { __u32 channel; __u32 plug; } u;
|
82 |
|
|
};
|
83 |
|
|
|
84 |
|
|
#endif /* __AMDTP_H */
|