root/trunk/libffado/src/fireworks/efc/efc_cmd.h

Revision 639, 5.6 kB (checked in by ppalmers, 16 years ago)

- Introduce a generic infrastructure for FFADODevices to present the clock sources they support and their state
- Implement this infrastructure for BeBoB devices
- Implement this infrastructure for ECHO Fireworks devices

Line 
1 /*
2  * Copyright (C) 2007 by Pieter Palmers
3  *
4  * This file is part of FFADO
5  * FFADO = Free Firewire (pro-)audio drivers for linux
6  *
7  * FFADO is based upon FreeBoB
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License version 2.1, as published by the Free Software Foundation;
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21  * MA 02110-1301 USA
22  */
23
24 #ifndef FIREWORKS_EFC_CMD_H
25 #define FIREWORKS_EFC_CMD_H
26
27 #include "debugmodule/debugmodule.h"
28
29 #include "libutil/cmd_serialize.h"
30
31 #define EFC_CAT_INVALID                 0xFFFFFFFF
32 #define EFC_CMD_INVALID                 0xFFFFFFFF
33
34 // Categories
35 #define EFC_CAT_HARDWARE_INFO           0
36 #define EFC_CAT_FLASH                   1
37 #define EFC_CAT_TRANSPORT               2
38 #define EFC_CAT_HARDWARE_CONTROL        3
39 #define EFC_CAT_PHYSICAL_OUTPUT_MIX     4
40 #define EFC_CAT_PHYSICAL_INPUT_MIX      5
41 #define EFC_CAT_PLAYBACK_MIX            6
42 #define EFC_CAT_RECORD_MIX              7
43 #define EFC_CAT_MONITOR_MIX             8
44 #define EFC_CAT_IO_CONFIG               9
45 #define EFC_CAT_COUNT                   10
46
47 // Commands for the EFC_CAT_HARDWARE_INFO category
48 #define EFC_CMD_HW_HWINFO_GET_CAPS      0
49 #define EFC_CMD_HW_GET_POLLED           1
50 #define EFC_CMD_HW_SET_EFR_ADDRESS      2
51 #define EFC_CMD_HW_READ_SESSION_BLOCK   3
52 #define EFC_CMD_HW_GET_DEBUG_INFO       4
53 #define EFC_CMD_HW_SET_DEBUG_TRACKING   5
54 #define EFC_CMD_HW_COUNT                6
55
56 // Commands for the EFC_CAT_HARDWARE_CONTROL category
57 #define EFC_CMD_HWCTRL_SET_CLOCK        0
58 #define EFC_CMD_HWCTRL_GET_CLOCK        1
59 #define EFC_CMD_HWCTRL_BSX_HANDSHAKE    2
60 #define EFC_CMD_HWCTRL_CHANGE_FLAGS     3
61 #define EFC_CMD_HWCTRL_GET_FLAGS        4
62 #define EFC_CMD_HWCTRL_IDENTIFY         5
63 #define EFC_CMD_HWCTRL_RECONNECT_PHY    6
64
65 // size of the header
66 #define EFC_HEADER_LENGTH_QUADLETS      ((sizeof(uint32_t) + sizeof(struct EfcCmd::efc_header))/4)
67
68 // util macro to do deserialization and byteswap
69 #define EFC_DESERIALIZE_AND_SWAP(__de__, __value__, __result__) \
70     { __result__ &= __de__.read(__value__); \
71       *(__value__)=ntohl(*(__value__)); } \
72
73
74 // specifiers for the flags field
75 #define EFC_CMD_HW_DYNADDR_SUPPORTED                1
76 #define EFC_CMD_HW_MIRRORING_SUPPORTED              2
77 #define EFC_CMD_HW_SPDIF_COAX_SUPPORTED             3
78 #define EFC_CMD_HW_SPDIF_AESEBUXLR_SUPPORTED        4
79 #define EFC_CMD_HW_HAS_DSP                          5
80 #define EFC_CMD_HW_HAS_FPGA                         6
81 #define EFC_CMD_HW_HAS_PHANTOM                      7
82
83 #define EFC_CMD_HW_CHECK_FLAG(__val__,__flag__) \
84     (((__val__) & (1<<(__flag__))) != 0)
85 #define EFC_CMD_HW_TO_FLAG(__val__) \
86     (1<<(__val__))
87
88 // Clock sources
89 #define EFC_CMD_HW_CLOCK_INTERNAL                   0
90 #define EFC_CMD_HW_CLOCK_SYTMATCH                   1
91 #define EFC_CMD_HW_CLOCK_WORDCLOCK                  2
92 #define EFC_CMD_HW_CLOCK_SPDIF                      3
93 #define EFC_CMD_HW_CLOCK_ADAT_1                     4
94 #define EFC_CMD_HW_CLOCK_ADAT_2                     5
95 #define EFC_CMD_HW_CLOCK_COUNT                      6
96
97 #define EFC_CMD_HW_CLOCK_UNSPECIFIED       0xFFFFFFFF
98
99 // MIDI flags
100 #define EFC_CMD_HW_MIDI_IN_1                        8
101 #define EFC_CMD_HW_MIDI_OUT_1                       9
102 #define EFC_CMD_HW_MIDI_IN_2                       10
103 #define EFC_CMD_HW_MIDI_OUT_2                      11
104
105 // Channel types
106 #define EFC_CMD_HW_CHANNEL_TYPE_ANALOG              0
107 #define EFC_CMD_HW_CHANNEL_TYPE_SPDIF               1
108 #define EFC_CMD_HW_CHANNEL_TYPE_ADAT                2
109 #define EFC_CMD_HW_CHANNEL_TYPE_SPDIF_OR_ADAT       3
110 #define EFC_CMD_HW_CHANNEL_TYPE_ANALOG_MIRRORING    4
111 #define EFC_CMD_HW_CHANNEL_TYPE_HEADPHONES          5
112 #define EFC_CMD_HW_CHANNEL_TYPE_I2S                 6
113
114 namespace FireWorks {
115
116 class EfcCmd
117 {
118 public:
119     enum EfcReturnValue {
120         eERV_Ok             = 0,
121         eERV_Bad            = 1,
122         eERV_BadCommand     = 2,
123         eERV_CommErr        = 3,
124         eERV_BadQuadCount   = 4,
125         eERV_Unsupported    = 5,
126         eERV_1394Timeout    = 6,
127         eERV_DspTimeout     = 7,
128         eERV_BadRate        = 8,
129         eERV_BadClock       = 9,
130         eERV_BadChannel     = 10,
131         eERV_BadPan         = 11,
132         eERV_FlashBusy      = 12,
133         eERV_BadMirror      = 13,
134         eERV_BadLed         = 14,
135         eERV_BadParameter   = 15,
136         eERV_Incomplete     = 0x80000000L,
137         eERV_Unspecified    = 0xFFFFFFFFL,
138     };
139
140     typedef struct efc_header
141     {
142         uint32_t    version;
143         uint32_t    seqnum;
144         uint32_t    category;
145         uint32_t    command;
146         uint32_t    retval;
147     };
148
149 protected: // this HAS to be overloaded
150     EfcCmd(uint32_t cat, uint32_t cmd);
151
152 public:
153     virtual ~EfcCmd();
154    
155     virtual bool serialize( Util::IOSSerialize& se );
156     virtual bool deserialize( Util::IISDeserialize& de );
157
158     virtual const char* getCmdName() const = 0;
159
160     virtual void showEfcCmd();
161
162     uint32_t            m_length; // in quadlets, including length field and header.
163     struct efc_header   m_header;
164
165 private:
166     uint32_t            m_category_id;
167     uint32_t            m_command_id;
168
169 public:
170     static uint32_t     m_seqnum;
171 protected:
172     DECLARE_DEBUG_MODULE;
173 };
174
175 } // namespace FireWorks
176
177 #endif // FIREWORKS_EFC_CMD_H
Note: See TracBrowser for help on using the browser.