root/branches/libfreebob-2.0/src/motu/motu_avdevice.h

Revision 208, 4.4 kB (checked in by pieterpalmers, 18 years ago)

--

Line 
1 /* motu_avdevice.h
2  * Copyright (C) 2006 by Pieter Palmers
3  *
4  * This file is part of FreeBob.
5  *
6  * FreeBob is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * FreeBob is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with FreeBob; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
18  * MA 02111-1307 USA.
19  */
20
21 #ifndef MOTUDEVICE_H
22 #define MOTUDEVICE_H
23
24 #include "iavdevice.h"
25
26 #include "debugmodule/debugmodule.h"
27 #include "libfreebobavc/avc_definitions.h"
28 #include "libfreebob/xmlparser.h"
29
30 #define MOTU_BASE_ADDR     0xfffff0000000ULL
31 #define MOTU_BASE_RATE_44100            (0<<4)
32 #define MOTU_BASE_RATE_48000            (1<<4)
33 #define MOTU_RATE_MULTIPLIER_1X         (0<<5)
34 #define MOTU_RATE_MULTIPLIER_2X         (1<<5)
35 #define MOTU_RATE_MULTIPLIER_4X         (2<<5)
36 #define MOTU_RATE_MASK                          (0x00000007)
37
38
39 class ConfigRom;
40 class Ieee1394Service;
41
42 namespace Motu {
43
44 class MotuDevice : public IAvDevice {
45 public:
46     MotuDevice( Ieee1394Service& ieee1394Service,
47                   int nodeId,
48                   int verboseLevel );
49     virtual ~MotuDevice();
50
51     virtual bool discover();
52     virtual ConfigRom& getConfigRom() const;
53     virtual bool addXmlDescription( xmlNodePtr deviceNode );
54     virtual bool setSamplingFrequency( ESamplingFrequency samplingFrequency );
55     virtual void showDevice() const;
56
57 protected:
58     Ieee1394Service* m_1394Service;
59     ConfigRom*       m_configRom;
60     int              m_nodeId;
61     int              m_verboseLevel;
62
63 private:
64         unsigned int ReadRegister(unsigned int reg);
65         signed int WriteRegister(unsigned int reg, quadlet_t data);
66
67         /* ======================================================================= */
68         /* MOTU-related defines, definitions, enumerations etc */
69
70         /* IEEE1394 Vendor IDs.  One would expect only MOTU, but you never know if a
71         * clone might appear some day.
72         */
73         enum EVendorId {
74                 VENDOR_MOTU = 0x000001f2,
75                 VENDOR_MOTU_TEST     = 0x0000030D,
76         };
77        
78         /* IEEE1394 Model IDs for different MOTU hardware */
79         enum EModelId {
80                 MOTU_828mkII  = 0x00101800,
81                 MOTU_TRAVELER = 0x00104800,
82                 MOTU_TEST     = 0x00000000,
83         };
84
85         /* Input/Output channels.  Channels are included here even if they are
86         * uni-directional (eg: phones - which is output only).  It is up to
87         * individual functions taking a motufw_io_channel_t argument to ensure
88         * that operations are appropriate for the channel supplied.
89         */
90         enum EIoChannel {
91                 MOTUFW_IO_ANALOG1, MOTUFW_IO_ANALOG2, MOTUFW_IO_ANALOG3,
92                 MOTUFW_IO_ANALOG4, MOTUFW_IO_ANALOG5, MOTUFW_IO_ANALOG6,
93                 MOTUFW_IO_ANALOG7, MOTUFW_IO_ANALOG8,
94                 MOTUFW_IO_AESEBU_L, MOTUFW_IO_AESEBU_R, /* Traveler only */
95                 MOTUFW_IO_MAIN_L,   MOTUFW_IO_MAIN_R,   /* 828MkII only */
96                 MOTUFW_IO_SPDIF_L,  MOTUFW_IO_SPDIF_R,
97                 MOTUFW_IO_ADAT1, MOTUFW_IO_ADAT2, MOTUFW_IO_ADAT3,
98                 MOTUFW_IO_ADAT4, MOTUFW_IO_ADAT5, MOTUFW_IO_ADAT6,
99                 MOTUFW_IO_ADAT7, MOTUFW_IO_ADAT8,
100         };
101        
102         /* Stereo output buses */
103         enum EOutputBus {
104                 MOTUFW_OUTPUT_DISABLED ,
105                 MOTUFW_OUTPUT_PHONES,
106                 MOTUFW_OUTPUT_ANALOG1_2, MOTUFW_OUTPUT_ANALOG3_4,
107                 MOTUFW_OUTPUT_ANALOG5_6, MOTUFW_OUTPUT_ANALOG7_8,
108                 MOTUFW_OUTPUT_AESEBU, MOTUFW_OUTPUT_MAINPOUT,
109                 MOTUFW_OUTPUT_SPDIF,
110                 MOTUFW_OUTPUT_ADAT1_2, MOTUFW_OUTPUT_ADAT3_4,
111                 MOTUFW_OUTPUT_ADAT5_6, MOTUFW_OUTPUT_ADAT7_8,
112         };
113        
114         /* Cuemix mixers available */
115         enum ECuemixMixer {
116                 MOTUFW_CUEMIX_MIX1,
117                 MOTUFW_CUEMIX_MIX2,
118                 MOTUFW_CUEMIX_MIX3,
119                 MOTUFW_CUEMIX_MIX4,
120         };
121        
122         /* MOTU configuration details */
123         enum ESampleRate {
124                 MOTUFW_SAMPLERATE_44k1,  MOTUFW_SAMPLERATE_48k,
125                 MOTUFW_SAMPLERATE_88k2,  MOTUFW_SAMPLERATE_96k,
126                 MOTUFW_SAMPLERATE_176k4, MOTUFW_SAMPLERATE_192k,
127         };
128        
129         enum EClockSource {
130                 MOTUFW_CLOCKSOURCE_INT,
131                 MOTUFW_CLOCKSOURCE_SMPTE,
132                 MOTUFW_CLOCKSOURCE_AESEBU,
133                 MOTUFW_CLOCKSOURCE_SPDIF,
134                 MOTUFW_CLOCKSOURCE_TOSLINK,
135                 MOTUFW_CLOCKSOURCE_WORDCLOCK,
136                 MOTUFW_CLOCKSOURCE_ADAT_9PIN,
137                 MOTUFW_CLOCKSOURCE_ADAT_OPTICAL,
138         };
139        
140         enum ERefLevel{
141                 MOTUFW_REFLEVEL_PLUS4_DBU, MOTUFW_REFLEVEL_MINUS10_DBU,
142         };
143        
144         enum EOpticalMode {
145                 MOTUFW_OPTICAL_MODE_OFF,
146                 MOTUFW_OPTICAL_MODE_ADAT,
147                 MOTUFW_OPTICAL_MODE_TOSLINK,
148         };
149
150
151         // debug support
152     DECLARE_DEBUG_MODULE;
153 };
154
155 }
156
157 #endif
Note: See TracBrowser for help on using the browser.