root/trunk/libffado/src/libieee1394/configrom.h

Revision 560, 4.6 kB (checked in by ppalmers, 14 years ago)

- Sort the FFADODevice vector on GUID before assigning device id's

This results in the same device id for identical device setups,
independent of the way they are connected or the node numbers they
have been assigned.

- Sanitized debug message reporting a bit
- Cosmetic changes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 /*
2  * Copyright (C) 2005-2007 by Daniel Wagner
3  * Copyright (C) 2005-2007 by Jonathan Woithe
4  * Copyright (C) 2005-2007 by Pieter Palmers
5  *
6  * This file is part of FFADO
7  * FFADO = Free Firewire (pro-)audio drivers for linux
8  *
9  * FFADO is based upon FreeBoB
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License version 2.1, as published by the Free Software Foundation;
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with this library; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
23  * MA 02110-1301 USA
24  */
25
26 #ifndef CONFIGROM_H
27 #define CONFIGROM_H
28
29 #include "fbtypes.h"
30 #include "csr1212.h"
31
32 #include "libutil/serialize.h"
33 #include "debugmodule/debugmodule.h"
34
35 #include "libosc/OscNode.h"
36
37 #include <string>
38
39 class Ieee1394Service;
40
41 class ConfigRom
42     : public OSC::OscNode
43 {
44  public:
45     ConfigRom( Ieee1394Service& ieee1394service, fb_nodeid_t nodeId );
46     virtual ~ConfigRom();
47
48     bool initialize();
49
50     bool operator == ( const ConfigRom& rhs );
51
52     const fb_nodeid_t getNodeId() const;
53     const fb_octlet_t getGuid() const;
54     const Glib::ustring getGuidString() const;
55     const Glib::ustring getModelName() const;
56     const Glib::ustring getVendorName() const;
57
58     const unsigned int getModelId() const;
59     const unsigned int getVendorId() const;
60     const unsigned int getUnitSpecifierId() const;
61     const unsigned int getUnitVersion() const;
62
63     bool isIsoResourseManager() const
64     { return m_isIsoResourceManager; }
65     bool isCycleMasterCapable() const
66         { return m_isCycleMasterCapable; }
67     bool isSupportsIsoOperations() const
68         { return m_isSupportIsoOperations; }
69     bool isBusManagerCapable() const
70         { return m_isBusManagerCapable; }
71     fb_byte_t getCycleClockAccurancy() const
72         { return m_cycleClkAcc; }
73     fb_byte_t getMaxRec() const
74         { return m_maxRec; }
75     unsigned short getAsyMaxPayload() const;
76
77     fb_quadlet_t getNodeVendorId() const
78     { return m_nodeVendorId; }
79
80     bool updatedNodeId();
81     bool setNodeId( fb_nodeid_t nodeId );
82    
83     /**
84      * @brief Compares the GUID of two ConfigRom's
85      *
86      * This function compares the GUID of two ConfigRom objects and returns true
87      * if the GUID of @ref a is larger than the GUID of @ref b . This is intended
88      * to be used with the STL sort() algorithm.
89      *
90      * Note that GUID's are converted to integers for this.
91      *
92      * @param a pointer to first ConfigRom
93      * @param b pointer to second ConfigRom
94      *
95      * @returns true if the GUID of @ref a is larger than the GUID of @ref b .
96      */
97     static bool compareGUID(  const ConfigRom& a, const ConfigRom& b );
98
99     void printConfigRom() const;
100
101     bool serialize( Glib::ustring path, Util::IOSerialize& ser );
102     static ConfigRom* deserialize( Glib::ustring path,
103                    Util::IODeserialize& deser,
104                    Ieee1394Service& ieee1394Service );
105
106  protected:
107     void processUnitDirectory( struct csr1212_csr*    csr,
108                                struct csr1212_keyval* ud_kv,
109                                unsigned int*          id );
110
111     void processRootDirectory( struct csr1212_csr* csr );
112
113     Ieee1394Service* m_1394Service;
114     fb_nodeid_t      m_nodeId;
115     bool             m_avcDevice;
116     fb_octlet_t      m_guid;
117     Glib::ustring    m_vendorName;
118     Glib::ustring    m_modelName;
119     unsigned int     m_vendorId;
120     unsigned int     m_modelId;
121     unsigned int     m_unit_specifier_id;
122     unsigned int     m_unit_version;
123     bool             m_isIsoResourceManager;
124     bool             m_isCycleMasterCapable;
125     bool             m_isSupportIsoOperations;
126     bool             m_isBusManagerCapable;
127     fb_byte_t        m_cycleClkAcc;
128     fb_byte_t        m_maxRec;
129     fb_quadlet_t     m_nodeVendorId;
130     fb_byte_t        m_chipIdHi;
131     fb_quadlet_t     m_chipIdLow;
132
133     /* only used during parsing */
134     struct csr1212_keyval* m_vendorNameKv;
135     struct csr1212_keyval* m_modelNameKv;
136     struct csr1212_csr*    m_csr;
137
138 protected: // OSC handling
139     OSC::OscResponse processOscMessage(OSC::OscMessage *m);
140
141 private:
142     ConfigRom( const ConfigRom& ); // do not allow copy ctor
143     ConfigRom();                   // ctor for deserialition
144
145     DECLARE_DEBUG_MODULE;
146 };
147
148 #endif /* CONFIGROM_H */
Note: See TracBrowser for help on using the browser.