root/trunk/libffado/src/libcontrol/BasicElements.h

Revision 965, 3.4 kB (checked in by ppalmers, 15 years ago)

add generic register read for focusrite devices

Line 
1 /*
2  * Copyright (C) 2005-2008 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 program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) version 3 of the License.
13  *
14  * This program 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
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  */
23
24 #ifndef CONTROL_BASICELEMENTS_H
25 #define CONTROL_BASICELEMENTS_H
26
27 #include "debugmodule/debugmodule.h"
28
29 #include <vector>
30 #include <string>
31
32 #include "Element.h"
33
34 namespace Control {
35
36 /*!
37 @brief Base class for contignous control elements
38 */
39 class Continuous
40 : public Element
41 {
42 public:
43     Continuous();
44     Continuous(std::string n);
45     virtual ~Continuous() {};
46    
47     virtual bool setValue(double v);
48     virtual double getValue();
49
50     virtual void show();
51
52 private:
53     double m_Value;
54 };
55
56 /*!
57 @brief Base class for discrete control elements
58 */
59 class Discrete
60 : public Element
61 {
62 public:
63     Discrete();
64     Discrete(std::string n);
65     virtual ~Discrete() {};
66    
67     virtual bool setValue(int v);
68     virtual int getValue();
69
70     virtual void show();
71
72 private:
73     int m_Value;
74 };
75
76 /*!
77 @brief Base class for textual control elements
78 */
79 class Text
80 : public Element
81 {
82 public:
83     Text();
84     Text(std::string n);
85     virtual ~Text() {};
86
87     virtual bool setValue(std::string v);
88     virtual std::string getValue();
89
90     virtual void show();
91
92 private:
93     std::string m_Value;
94 };
95
96 /*!
97 @brief Base class for register access control elements
98 */
99 class Register
100 : public Element
101 {
102 public:
103     Register() : Element() {};
104     Register(std::string n) : Element(n) {};
105     virtual ~Register() {};
106
107     virtual bool setValue(uint64_t addr, uint64_t value) = 0;
108     virtual uint64_t getValue(uint64_t addr) = 0;
109 private:
110 };
111
112 /*!
113 @brief Base class for basic enumerated control elements
114 */
115 class Enum
116 : public Element
117 {
118 public:
119     Enum();
120     Enum(std::string n);
121     virtual ~Enum() {};
122
123     virtual bool select(int idx);
124     virtual int selected();
125     virtual int count();
126     virtual std::string getEnumLabel(int idx);
127
128     virtual void show();
129 //private: // HACK
130     int m_selected;
131 };
132
133 /*!
134 @brief Base class for attribute enumerated control elements
135
136 The idea of this is that one can have a set of config values
137 available for a certain enum choice.
138
139 Example: for clock source selection:
140 idx Label     signal  locked  available
141   0 WordClock   0       0        1
142   1 S/PDIF      1       0        1
143   ...
144
145 Attributes:
146  0 signal
147  1 locked
148  2 available
149
150 */
151 class AttributeEnum
152 : public Enum
153 {
154 public:
155     AttributeEnum();
156     AttributeEnum(std::string n);
157     virtual ~AttributeEnum() {};
158
159     virtual int attributeCount();
160     ///> get a specific attribute value for the selected enum
161     virtual std::string getAttributeValue(int attridx);
162     ///> get the name of the attribute with a certain index
163     virtual std::string getAttributeName(int attridx);
164
165     virtual void show();
166 private:
167 };
168
169 }; // namespace Control
170
171 #endif // CONTROL_BASICELEMENTS_H
Note: See TracBrowser for help on using the browser.