root/trunk/libffado/src/motu/motu_avdevice.h

Revision 554, 4.6 kB (checked in by ppalmers, 16 years ago)

Merge echoaudio branch into trunk.

This adds support for the Echo Audiofire devices to FFADO. Possibly also other devices working with the Apple Class Driver will work with this code. It is not fully complete yet, but the main rework is
done.

First of all the IAvDevice class/interface is renamed to FFADODevice, in order to separate the AV/C code from the FFADO API code. A device supported by FFADO implements a FFADODevice.

The BeBoB device has been split up into three groups:
- libavc/* : all code and commands that are specified by AV/C specs. Note that a lot of the code that used to be in BeBoB::AvDevice? now resides in AVC::Unit
- genericavc/* : a FFADODevice that uses AV/C descriptors & commands for discovery and config
- bebob/* : the bebob FFADODevice that inherits from GenericAVC::AvDevice? but that uses BridgeCo? commands for discovery

Everything has been moved as high as possible in the class hierarchy. If necessary, a subclass that uses device specific commands is introduced (e.g. BeBoB::Plug inherits from AVC::Plug and uses the
BridgeCo? extended plug info command to discover it's properties).

There are some other fixes along the way that have been done too.

Line 
1 /*
2  * Copyright (C) 2005-2007 by Pieter Palmers
3  * Copyright (C) 2005-2007 by Jonathan Woithe
4  *
5  * This file is part of FFADO
6  * FFADO = Free Firewire (pro-)audio drivers for linux
7  *
8  * FFADO is based upon FreeBoB.
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License version 2.1, as published by the Free Software Foundation;
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22  * MA 02110-1301 USA
23  */
24
25 #ifndef MOTUDEVICE_H
26 #define MOTUDEVICE_H
27
28 #include "ffadodevice.h"
29
30 #include "debugmodule/debugmodule.h"
31 #include "libavc/avc_definitions.h"
32
33 #include "libstreaming/MotuStreamProcessor.h"
34
35 #define MOTUFW_BASE_ADDR                0xfffff0000000ULL
36
37 #define MOTUFW_RATE_BASE_44100          (0<<3)
38 #define MOTUFW_RATE_BASE_48000          (1<<3)
39 #define MOTUFW_RATE_MULTIPLIER_1X       (0<<4)
40 #define MOTUFW_RATE_MULTIPLIER_2X       (1<<4)
41 #define MOTUFW_RATE_MULTIPLIER_4X       (2<<4)
42 #define MOTUFW_RATE_BASE_MASK           (0x00000008)
43 #define MOTUFW_RATE_MULTIPLIER_MASK     (0x00000030)
44
45 #define MOTUFW_OPTICAL_MODE_OFF        0x00
46 #define MOTUFW_OPTICAL_MODE_ADAT    0x01
47 #define MOTUFW_OPTICAL_MODE_TOSLINK    0x02
48 #define MOTUFW_OPTICAL_IN_MODE_MASK    (0x00000300)
49 #define MOTUFW_OPTICAL_OUT_MODE_MASK    (0x00000c00)
50 #define MOTUFW_OPTICAL_MODE_MASK    (MOTUFW_OPTICAL_IN_MODE_MASK|MOTUFW_OPTICAL_MODE_MASK)
51
52 #define MOTUFW_CLKSRC_MASK        0x00000007
53 #define MOTUFW_CLKSRC_INTERNAL        0
54 #define MOTUFW_CLKSRC_ADAT_OPTICAL    1
55 #define MOTUFW_CLKSRC_SPDIF_TOSLINK    2
56 #define MOTUFW_CLKSRC_SMTPE        3
57 #define MOTUFW_CLKSRC_WORDCLOCK        4
58 #define MOTUFW_CLKSRC_ADAT_9PIN        5
59 #define MOTUFW_CLKSRC_AES_EBU        7
60
61 #define MOTUFW_DIR_IN            1
62 #define MOTUFW_DIR_OUT            2
63 #define MOTUFW_DIR_INOUT        (MOTUFW_DIR_IN | MOTUFW_DIR_OUT)
64
65 /* Device registers */
66 #define MOTUFW_REG_ISOCTRL        0x0b00
67 #define MOTUFW_REG_OPTICAL_CTRL        0x0b10
68 #define MOTUFW_REG_CLK_CTRL        0x0b14
69 #define MOTUFW_REG_ROUTE_PORT_CONF      0x0c04
70 #define MOTUFW_REG_CLKSRC_NAME0        0x0c60
71
72 class ConfigRom;
73 class Ieee1394Service;
74
75 namespace Motu {
76
77 enum EMotuModel {
78       MOTUFW_MODEL_NONE     = 0x0000,
79       MOTUFW_MODEL_828mkII  = 0x0001,
80       MOTUFW_MODEL_TRAVELER = 0x0002,
81 };
82
83 struct VendorModelEntry {
84     unsigned int vendor_id;
85     unsigned int model_id;
86     unsigned int unit_version;
87     unsigned int unit_specifier_id;
88     enum EMotuModel model;
89     char *vendor_name;
90     char *model_name;
91 };
92
93 class MotuDevice : public FFADODevice {
94 public:
95
96     MotuDevice( std::auto_ptr<ConfigRom>( configRom ),
97           Ieee1394Service& ieee1394Service,
98           int nodeId );
99     virtual ~MotuDevice();
100
101     static bool probe( ConfigRom& configRom );
102     static int getConfigurationId( );
103     virtual bool discover();
104
105     virtual void showDevice();
106
107     virtual bool setSamplingFrequency( int samplingFrequency );
108     virtual int getSamplingFrequency( );
109
110     virtual int getStreamCount();
111     virtual Streaming::StreamProcessor *getStreamProcessorByIndex(int i);
112
113     virtual bool prepare();
114     virtual bool lock();
115     virtual bool unlock();
116
117     virtual bool startStreamByIndex(int i);
118     virtual bool stopStreamByIndex(int i);
119
120     signed int getIsoRecvChannel(void);
121     signed int getIsoSendChannel(void);
122     unsigned int getOpticalMode(unsigned int dir);
123     signed int setOpticalMode(unsigned int dir, unsigned int mode);
124
125     signed int getEventSize(unsigned int dir);
126
127 protected:
128     signed int       m_motu_model;
129     struct VendorModelEntry * m_model;
130     signed int m_iso_recv_channel, m_iso_send_channel;
131     signed int m_bandwidth;
132
133     Streaming::MotuReceiveStreamProcessor *m_receiveProcessor;
134     Streaming::MotuTransmitStreamProcessor *m_transmitProcessor;
135
136 private:
137     bool addPort(Streaming::StreamProcessor *s_processor,
138         char *name,
139         enum Streaming::Port::E_Direction direction,
140         int position, int size);
141     bool addDirPorts(
142         enum Streaming::Port::E_Direction direction,
143         unsigned int sample_rate, unsigned int optical_mode);
144
145     unsigned int ReadRegister(unsigned int reg);
146     signed int WriteRegister(unsigned int reg, quadlet_t data);
147
148 };
149
150 }
151
152 #endif
Note: See TracBrowser for help on using the browser.