root/trunk/libffado/src/dice/dice_eap.h

Revision 2803, 21.6 kB (checked in by jwoithe, 2 years ago)

Cosmetic: capitalise "L" in "Linux".

"Linux" is a proper noun so it should start with a capital letter. These
changes are almost all within comments.

This patch was originally proposed by pander on the ffado-devel mailing
list. It has been expanded to cover all similar cases to maintain
consistency throughout the source tree.

Line 
1 /*
2  * Copyright (C) 2005-2009 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 #ifndef __DICE_EAP_H
24 #define __DICE_EAP_H
25
26 #include "dice_avdevice.h"
27
28 #define DICE_EAP_BASE                  0x0000000000200000ULL
29 #define DICE_EAP_MAX_SIZE              0x0000000000F00000ULL
30
31 #define DICE_EAP_CAPABILITY_SPACE_OFF      0x0000
32 #define DICE_EAP_CAPABILITY_SPACE_SZ       0x0004
33 #define DICE_EAP_CMD_SPACE_OFF             0x0008
34 #define DICE_EAP_CMD_SPACE_SZ              0x000C
35 #define DICE_EAP_MIXER_SPACE_OFF           0x0010
36 #define DICE_EAP_MIXER_SPACE_SZ            0x0014
37 #define DICE_EAP_PEAK_SPACE_OFF            0x0018
38 #define DICE_EAP_PEAK_SPACE_SZ             0x001C
39 #define DICE_EAP_NEW_ROUTING_SPACE_OFF     0x0020
40 #define DICE_EAP_NEW_ROUTING_SPACE_SZ      0x0024
41 #define DICE_EAP_NEW_STREAM_CFG_SPACE_OFF  0x0028
42 #define DICE_EAP_NEW_STREAM_CFG_SPACE_SZ   0x002C
43 #define DICE_EAP_CURR_CFG_SPACE_OFF        0x0030
44 #define DICE_EAP_CURR_CFG_SPACE_SZ         0x0034
45 #define DICE_EAP_STAND_ALONE_CFG_SPACE_OFF 0x0038
46 #define DICE_EAP_STAND_ALONE_CFG_SPACE_SZ  0x003C
47 #define DICE_EAP_APP_SPACE_OFF             0x0040
48 #define DICE_EAP_APP_SPACE_SZ              0x0044
49 #define DICE_EAP_ZERO_MARKER_1             0x0048
50
51 // CAPABILITY registers
52 #define DICE_EAP_CAPABILITY_ROUTER         0x0000
53 #define DICE_EAP_CAPABILITY_MIXER          0x0004
54 #define DICE_EAP_CAPABILITY_GENERAL        0x0008
55 #define DICE_EAP_CAPABILITY_RESERVED       0x000C
56
57 // CAPABILITY bit definitions
58 #define DICE_EAP_CAP_ROUTER_EXPOSED         0
59 #define DICE_EAP_CAP_ROUTER_READONLY        1
60 #define DICE_EAP_CAP_ROUTER_FLASHSTORED     2
61 #define DICE_EAP_CAP_ROUTER_MAXROUTES      16
62
63 #define DICE_EAP_CAP_MIXER_EXPOSED          0
64 #define DICE_EAP_CAP_MIXER_READONLY         1
65 #define DICE_EAP_CAP_MIXER_FLASHSTORED      2
66 #define DICE_EAP_CAP_MIXER_IN_DEV           4
67 #define DICE_EAP_CAP_MIXER_OUT_DEV          8
68 #define DICE_EAP_CAP_MIXER_INPUTS          16
69 #define DICE_EAP_CAP_MIXER_OUTPUTS         24
70
71 #define DICE_EAP_CAP_GENERAL_STRM_CFG_EN    0
72 #define DICE_EAP_CAP_GENERAL_FLASH_EN       1
73 #define DICE_EAP_CAP_GENERAL_PEAK_EN        2
74 #define DICE_EAP_CAP_GENERAL_MAX_TX_STREAM  4
75 #define DICE_EAP_CAP_GENERAL_MAX_RX_STREAM  8
76 #define DICE_EAP_CAP_GENERAL_STRM_CFG_FLS  12
77 #define DICE_EAP_CAP_GENERAL_CHIP          16
78
79 #define DICE_EAP_CAP_GENERAL_CHIP_DICEII    0
80 #define DICE_EAP_CAP_GENERAL_CHIP_DICEMINI  1
81 #define DICE_EAP_CAP_GENERAL_CHIP_DICEJR    2
82
83 // COMMAND registers
84 #define DICE_EAP_COMMAND_OPCODE         0x0000
85 #define DICE_EAP_COMMAND_RETVAL         0x0004
86
87 // opcodes
88 #define DICE_EAP_CMD_OPCODE_NO_OP            0x0000
89 #define DICE_EAP_CMD_OPCODE_LD_ROUTER        0x0001
90 #define DICE_EAP_CMD_OPCODE_LD_STRM_CFG      0x0002
91 #define DICE_EAP_CMD_OPCODE_LD_RTR_STRM_CFG  0x0003
92 #define DICE_EAP_CMD_OPCODE_LD_FLASH_CFG     0x0004
93 #define DICE_EAP_CMD_OPCODE_ST_FLASH_CFG     0x0005
94
95 #define DICE_EAP_CMD_OPCODE_FLAG_LD_LOW      (1U<<16)
96 #define DICE_EAP_CMD_OPCODE_FLAG_LD_MID      (1U<<17)
97 #define DICE_EAP_CMD_OPCODE_FLAG_LD_HIGH     (1U<<18)
98 #define DICE_EAP_CMD_OPCODE_FLAG_LD_EXECUTE  (1U<<31)
99
100
101 // MIXER registers
102 // TODO
103
104 // PEAK registers
105 // TODO
106
107 // NEW ROUTER registers
108 // TODO
109
110 // NEW STREAM CFG registers
111 // TODO
112
113 // CURRENT CFG registers
114 #define DICE_EAP_CURRCFG_LOW_ROUTER         0x0000
115 #define DICE_EAP_CURRCFG_LOW_STREAM         0x1000
116 #define DICE_EAP_CURRCFG_MID_ROUTER         0x2000
117 #define DICE_EAP_CURRCFG_MID_STREAM         0x3000
118 #define DICE_EAP_CURRCFG_HIGH_ROUTER        0x4000
119 #define DICE_EAP_CURRCFG_HIGH_STREAM        0x5000
120
121 #define DICE_EAP_CHANNEL_CONFIG_NAMESTR_LEN_QUADS  (64)
122 #define DICE_EAP_CHANNEL_CONFIG_NAMESTR_LEN_BYTES  (4*DICE_EAP_CHANNEL_CONFIG_NAMESTR_LEN_QUADS)
123
124 namespace Dice {
125
126 /**
127   @brief Sources for audio hitting the router
128   */
129 enum eRouteSource {
130     eRS_AES = 0,
131     eRS_ADAT = 1,
132     eRS_Mixer = 2,
133     eRS_InS0 = 4,
134     eRS_InS1 = 5,
135     eRS_ARM = 10,
136     eRS_ARX0 = 11,
137     eRS_ARX1 = 12,
138     eRS_Muted = 15,
139     eRS_Invalid = 16,
140 };
141 /**
142   @brief Destinations for audio exiting the router
143   */
144 enum eRouteDestination {
145     eRD_AES = 0,
146     eRD_ADAT = 1,
147     eRD_Mixer0 = 2,
148     eRD_Mixer1 = 3,
149     eRD_InS0 = 4,
150     eRD_InS1 = 5,
151     eRD_ARM = 10,
152     eRD_ATX0 = 11,
153     eRD_ATX1 = 12,
154     eRD_Muted = 15,
155     eRD_Invalid = 16,
156 };
157
158 /**
159   @brief represents the EAP interface available on some devices
160
161   When available, the mixer and router are visible. This class is also the base for custom
162   implementations of EAP extensions.
163   */
164 class EAP : public Control::Container
165 {
166 public:
167     /**
168       @brief Command status
169       */
170     enum eWaitReturn {
171         eWR_Error,
172         eWR_Timeout,
173         eWR_Busy,
174         eWR_Done,
175     };
176     /**
177       @brief Constants for the EAP spaces
178
179       @see offsetGen for the calculation of the real offsets.
180       */
181     enum eRegBase {
182         eRT_Base,
183         eRT_Capability,
184         eRT_Command,
185         eRT_Mixer,
186         eRT_Peak,
187         eRT_NewRouting,
188         eRT_NewStreamCfg,
189         eRT_CurrentCfg,
190         eRT_Standalone,
191         eRT_Application,
192         eRT_None,
193     };
194
195 private:
196
197     /**
198       @brief Description of the routing in the hardware
199       */
200     class RouterConfig {
201     private:
202         friend class Dice::EAP;
203         RouterConfig(EAP &);
204         RouterConfig(EAP &, enum eRegBase, unsigned int offset);
205         ~RouterConfig();
206
207     public:
208
209         bool read() {return read(m_base, m_offset);};
210         bool write() {return write(m_base, m_offset);};
211         bool read(enum eRegBase b, unsigned offset);
212         bool write(enum eRegBase b, unsigned offset);
213         void show();
214
215         /**
216           @brief Create a route between src and dest
217
218           Clear the route vector
219           To be used with many care !
220           */
221         bool clearRoutes();
222
223         /**
224           @brief Create a route between src and dest
225
226           This will effectively create a new destination.
227           If a destination exists or its status is unknown,
228           rather use the next setupRoute function
229           */
230         bool createRoute(unsigned char src, unsigned char dest);
231
232         /**
233           @brief Set up a route between src and dest
234
235           If a route with that destination exists, it will be replaced. If no route to that
236           destination exists, a new route will be established.
237           */
238         bool setupRoute(unsigned char src, unsigned char dest);
239
240         /**
241           @brief Mute a route for dest
242
243           All EAP devices will support muting.
244           Not all of them support (at least full support) removing a dest (see comment below)
245           */
246         bool muteRoute(unsigned char dest);
247
248         /**
249           @brief Remove a route
250
251           @todo is this really necessary?
252           */
253         bool removeRoute(unsigned char src, unsigned char dest);
254         /**
255           @brief Remove the destinations route
256           */
257         bool removeRoute(unsigned char dest);
258
259         /**
260           @brief Return the source for the given destination
261
262           Returns -1 if the destination is not connected.
263           */
264         unsigned char getSourceForDestination(unsigned char dest);
265         /**
266           @brief Return a list of destinations for a given source
267
268           Returns an empty list if no destination is connected to this source.
269           */
270         std::vector<unsigned char> getDestinationsForSource(unsigned char src);
271
272         unsigned int getNbRoutes() {return m_routes2.size();};
273
274     private:
275         EAP &m_eap;
276         enum eRegBase m_base;
277         unsigned int m_offset;
278
279         /**
280           @brief map for the routes
281
282           The key is the destination as each destination can only have audio from one source.
283           Sources can be routed to several destinations though.
284           */
285 //        typedef std::map<unsigned char,unsigned char> RouteVectorV2;
286         typedef std::vector< std::pair<unsigned char,unsigned char> > RouteVectorV2;
287         RouteVectorV2 m_routes2;
288     private:
289         DECLARE_DEBUG_MODULE_REFERENCE;
290     };
291
292     /**
293       @brief Description of the peak space in hardware
294       */
295     class PeakSpace {
296     private:
297         friend class Dice::EAP;
298         PeakSpace(EAP &p) : m_eap(p), m_base(eRT_Peak), m_offset(0), m_debugModule(p.m_debugModule) {};
299         ~PeakSpace() {};
300
301     public:
302         bool read() {return read(m_base, m_offset);};
303         bool read(enum eRegBase b, unsigned offset);
304         void show();
305
306         std::map<unsigned char, int> getPeaks();
307         int getPeak(unsigned char dest);
308
309     private:
310         EAP &m_eap;
311         enum eRegBase m_base;
312         unsigned int m_offset;
313
314         /**
315           @brief maps peaks to destinations
316           */
317         std::map<unsigned char, int> m_peaks;
318
319         DECLARE_DEBUG_MODULE_REFERENCE;
320     };
321
322     /**
323       @brief Description of the streams in the hardware
324       */
325     class StreamConfig {
326     private:
327         friend class Dice::EAP;
328         StreamConfig(EAP &, enum eRegBase, unsigned int offset);
329         ~StreamConfig();
330
331     public:
332         struct ConfigBlock { // FIXME: somewhere in the DICE avdevice this is present too
333             uint32_t nb_audio;
334             uint32_t nb_midi;
335             uint32_t names[DICE_EAP_CHANNEL_CONFIG_NAMESTR_LEN_QUADS];
336             uint32_t ac3_map;
337         };
338         void showConfigBlock(struct ConfigBlock &);
339         stringlist getNamesForBlock(struct ConfigBlock &b);
340         stringlist getTxNamesString(unsigned int);
341         stringlist getRxNamesString(unsigned int);
342
343         bool read() {return read(m_base, m_offset);};
344         bool write() {return write(m_base, m_offset);};
345         bool read(enum eRegBase b, unsigned offset);
346         bool write(enum eRegBase b, unsigned offset);
347
348         void show();
349
350     private:
351         EAP &m_eap;
352         enum eRegBase m_base;
353         unsigned int m_offset;
354
355         uint32_t m_nb_tx;
356         uint32_t m_nb_rx;
357
358         struct ConfigBlock *m_tx_configs;
359         struct ConfigBlock *m_rx_configs;
360
361         DECLARE_DEBUG_MODULE_REFERENCE;
362     };
363
364     /**
365       @brief Description of the standalone mode configuration
366       */
367     class StandaloneConfig {
368     private:
369         friend class Dice::EAP;
370         StandaloneConfig(EAP &p) : m_eap(p), m_base(eRT_Standalone), m_offset(0), m_debugModule(p.m_debugModule) {};
371         ~StandaloneConfig() {};
372
373     public:
374         bool read() {return read(m_base, m_offset);};
375         bool write() {return write(m_base, m_offset);};
376         bool read(enum eRegBase b, unsigned offset);
377         bool write(enum eRegBase b, unsigned offset);
378
379         void show();
380     private:
381         EAP &m_eap;
382         enum eRegBase m_base;
383         unsigned int m_offset;
384
385         uint32_t m_clk_src;
386         uint32_t m_aes_ext;
387         uint32_t m_adat_ext;
388         uint32_t m_wc_ext;
389         uint32_t m_int_ext;
390
391         DECLARE_DEBUG_MODULE_REFERENCE;
392     };
393
394 public:
395
396     /**
397       @brief The matrixmixer exposed
398       */
399     class Mixer : public Control::MatrixMixer {
400     public:
401         Mixer(EAP &);
402         ~Mixer();
403
404         bool init();
405         void show();
406
407         void updateNameCache();
408         /**
409          * load the coefficients from the device into the local cache
410          * @return
411          */
412         bool loadCoefficients();
413         /**
414          * Stores the coefficients from the cache to the device
415          * @return
416          */
417         bool storeCoefficients();
418
419         virtual int getRowCount( );
420         virtual int getColCount( );
421
422         virtual int canWrite( const int, const int );
423         virtual double setValue( const int, const int, const double );
424         virtual double getValue( const int, const int );
425
426         //
427         bool hasNames() const { return false; }
428         std::string getRowName( const int );
429         std::string getColName( const int );
430
431         // TODO: implement connections.
432         bool canConnect() const { return false; }
433
434         // full map updates are unsupported
435         virtual bool getCoefficientMap(int &);
436         virtual bool storeCoefficientMap(int &);
437
438     private:
439         EAP &         m_eap;
440         fb_quadlet_t *m_coeff;
441
442         //std::map<int, RouterConfig::Route> m_input_route_map;
443         //std::map<int, RouterConfig::RouteVector> m_output_route_map;
444
445         DECLARE_DEBUG_MODULE_REFERENCE;
446     };
447
448     /**
449       @brief The router exposed
450       */
451     class Router : public Control::CrossbarRouter {
452     public:
453         Router(EAP &);
454         ~Router();
455
456         void update();
457         void show();
458
459         void addDestination(const std::string& name, enum eRouteDestination dstid,
460                             unsigned int base, unsigned int cnt, unsigned int offset=0);
461         void addSource(const std::string& name, enum eRouteSource srcid,
462                        unsigned int base, unsigned int cnt, unsigned int offset=0);
463
464         // per-coefficient access
465         virtual std::string getSourceName(const int);
466         virtual std::string getDestinationName(const int);
467         virtual int getSourceIndex(std::string);
468         virtual int getDestinationIndex(std::string);
469         virtual stringlist getSourceNames();
470         virtual stringlist getDestinationNames();
471
472         std::string getSourceForDestination(const std::string& dstname);
473         stringlist getDestinationsForSource(const std::string& srcname);
474
475         virtual bool canConnect(const int srcidx, const int dstidx);
476         virtual bool setConnectionState(const int srcidx, const int dstidx, const bool enable);
477         virtual bool getConnectionState(const int srcidx, const int dstidx);
478
479         virtual bool canConnect(const std::string& srcname, const std::string& dstname);
480         virtual bool setConnectionState(const std::string& srcname, const std::string& dstname, const bool enable);
481         virtual bool getConnectionState(const std::string& srcname, const std::string& dstname);
482
483         virtual bool clearAllConnections();
484
485         // peak metering support
486         virtual bool hasPeakMetering();
487         virtual double getPeakValue(const std::string& dest);
488         virtual std::map<std::string, double> getPeakValues();
489
490     private:
491         EAP &m_eap;
492         /**
493           @{
494           @brief Name-Index pairs for the sources and destinations
495
496           The index is 'artificial' and is the block/channel combination used in the dice.
497           */
498         std::map<std::string, int> m_sources;
499         std::map<std::string, int> m_destinations;
500         // @}
501
502         PeakSpace &m_peak;
503
504         DECLARE_DEBUG_MODULE_REFERENCE;
505     };
506
507
508 public:
509     /** constructor */
510     EAP(Device &);
511     /** destructor */
512     virtual ~EAP();
513
514     /**
515       @brief Does this device support the EAP?
516
517       When subclassing EAP, return true only on devices that actually have an EAP.
518
519       @todo Shouldn't this be inside Dice::Device?
520       */
521     static bool supportsEAP(Device &);
522
523     /**
524       @brief Initialize the EAP
525       */
526     bool init();
527
528     /// update EAP
529     void update();
530
531     /// Show information about the EAP
532     void show();
533     /// Dump the first parts of the application space
534     void showApplication();
535     /// Show the full router content
536     void showFullRouter();
537     /// Show the full peak space content
538     void showFullPeakSpace();
539
540     /// Restore from flash
541     bool loadFlashConfig();
542     /// Store to flash
543     bool storeFlashConfig();
544
545     /// Is the current operation still busy?
546     enum eWaitReturn operationBusy();
547     /// Block until the current operation is done
548     enum eWaitReturn waitForOperationEnd(int max_wait_time_ms = 100);
549
550     /// Update all configurations from the device
551     bool updateConfigurationCache();
552
553     /**
554       @{
555       @brief Read and write registers on the device
556       */
557     bool readReg(enum eRegBase, unsigned offset, quadlet_t *);
558     bool writeReg(enum eRegBase, unsigned offset, quadlet_t);
559     bool readRegBlock(enum eRegBase, unsigned, fb_quadlet_t *, size_t);
560     bool writeRegBlock(enum eRegBase, unsigned, fb_quadlet_t *, size_t);
561     bool readRegBlockSwapped(enum eRegBase, unsigned, fb_quadlet_t *, size_t);
562     bool writeRegBlockSwapped(enum eRegBase, unsigned, fb_quadlet_t *, size_t);
563     //@}
564
565     /** @brief Get access to the mixer */
566     Mixer*  getMixer() {return m_mixer;};
567     /** @brief Get access to the router */
568     Router* getRouter() {return m_router;};
569
570     /** @brief Get capture and playback names */
571     stringlist getCptrNameString(unsigned int);
572     stringlist getPbckNameString(unsigned int);
573
574     /** @brief Utility function to reset router config at hardware default */
575     void setupDefaultRouterConfig(); 
576
577 protected:
578     /**
579       @brief Setup all the available sources
580
581       This adds the needed entries for sources to the router. The default implementation decides on
582       the chip which sources to add, subclasses should only add the sources actually usable for the
583       device.
584
585       To ease custom device support, this function is not in EAP::Router but here.
586       */
587     void setupSources();
588     virtual void setupSources_low();
589     virtual void setupSources_mid();
590     virtual void setupSources_high();
591     virtual unsigned int getSMuteId();
592     /**
593       @brief Setup all the available destinations
594
595       This adds the needed entries for destinations to the router. The default implementation
596       decides on the chip which destinations to add, subclasses should only add the destinations
597       actually usable for the device.
598
599       To ease custom device support, this function is not in EAP::Router but here.
600       */
601     void setupDestinations();
602     virtual void setupDestinations_low();
603     virtual void setupDestinations_mid();
604     virtual void setupDestinations_high();
605
606     /**
607       @brief Set up a default configuration for the router
608
609       To ease custom device support, these functions are not in EAP::RouterConfig but here.
610       */
611     virtual void setupDefaultRouterConfig_low();
612     virtual void setupDefaultRouterConfig_mid();
613     virtual void setupDefaultRouterConfig_high();
614     bool addRoute(enum eRouteSource srcid, unsigned int base_src, enum eRouteDestination dstid,
615                   unsigned int base_dst);
616
617     /**
618       @brief Actually add the source
619       */
620     void addSource(const std::string name, unsigned int base, unsigned int count,
621                    enum eRouteSource srcid, unsigned int offset=0);
622     /**
623       @brief Actually add the destination
624       */
625     void addDestination(const std::string name, unsigned int base, unsigned int count,
626                         enum eRouteDestination destid, unsigned int offset=0);
627
628     uint16_t getMaxNbRouterEntries() {return m_router_nb_entries;};
629
630 private:
631     /// Return the router configuration for the current rate
632     RouterConfig * getActiveRouterConfig();
633     /// Return the stream configuration for the current rate
634     StreamConfig * getActiveStreamConfig();
635
636     /// Write a new router configuration to the device
637     bool updateRouterConfig(RouterConfig&, bool low, bool mid, bool high);
638     /// Write a new router configuration to the device
639     bool updateCurrentRouterConfig(RouterConfig&);
640     /// Write a new stream configuration to the device
641     bool updateStreamConfig(StreamConfig&, bool low, bool mid, bool high);
642     /// Write a new stream configuration to the device
643     bool updateStreamConfig(RouterConfig&, StreamConfig&, bool low, bool mid, bool high);
644  
645     bool loadRouterConfig(bool low, bool mid, bool high);
646     bool loadStreamConfig(bool low, bool mid, bool high);
647     bool loadRouterAndStreamConfig(bool low, bool mid, bool high);
648
649 private:
650     bool     m_router_exposed;
651     bool     m_router_readonly;
652     bool     m_router_flashstored;
653     uint16_t m_router_nb_entries;
654
655     bool     m_mixer_exposed;
656     bool     m_mixer_readonly;
657     bool     m_mixer_flashstored;
658     uint8_t  m_mixer_tx_id;
659     uint8_t  m_mixer_rx_id;
660     uint8_t  m_mixer_nb_tx;
661     uint8_t  m_mixer_nb_rx;
662
663     bool     m_general_support_dynstream;
664     bool     m_general_support_flash;
665     bool     m_general_peak_enabled;
666     uint8_t  m_general_max_tx;
667     uint8_t  m_general_max_rx;
668     bool     m_general_stream_cfg_stored;
669     uint16_t m_general_chip;
670
671
672     bool commandHelper(fb_quadlet_t cmd);
673
674     /// Calculate the real offset for the different spaces
675     fb_nodeaddr_t offsetGen(enum eRegBase, unsigned, size_t);
676
677 private:
678     Device & m_device;
679     Mixer*   m_mixer;
680     Router*  m_router;
681     StandaloneConfig *m_standalone;
682
683     RouterConfig m_current_cfg_routing_low;
684     RouterConfig m_current_cfg_routing_mid;
685     RouterConfig m_current_cfg_routing_high;
686     StreamConfig m_current_cfg_stream_low;
687     StreamConfig m_current_cfg_stream_mid;
688     StreamConfig m_current_cfg_stream_high;
689
690     fb_quadlet_t m_capability_offset;
691     fb_quadlet_t m_capability_size;
692     fb_quadlet_t m_cmd_offset;
693     fb_quadlet_t m_cmd_size;
694     fb_quadlet_t m_mixer_offset;
695     fb_quadlet_t m_mixer_size;
696     fb_quadlet_t m_peak_offset;
697     fb_quadlet_t m_peak_size;
698     fb_quadlet_t m_new_routing_offset;
699     fb_quadlet_t m_new_routing_size;
700     fb_quadlet_t m_new_stream_cfg_offset;
701     fb_quadlet_t m_new_stream_cfg_size;
702     fb_quadlet_t m_curr_cfg_offset;
703     fb_quadlet_t m_curr_cfg_size;
704     fb_quadlet_t m_standalone_offset;
705     fb_quadlet_t m_standalone_size;
706     fb_quadlet_t m_app_offset;
707     fb_quadlet_t m_app_size;
708
709 protected:
710     DECLARE_DEBUG_MODULE;
711 };
712
713 };
714
715 #endif // __DICE_EAP_H
Note: See TracBrowser for help on using the browser.