ParameterMgr.h revision 326a31df0dd401283de6170ed09bcf605f61ef7d
17d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org/*
27d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * INTEL CONFIDENTIAL
37d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * Copyright © 2011 Intel
47d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * Corporation All Rights Reserved.
57d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org *
67d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * The source code contained or described herein and all documents related to
77d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * the source code ("Material") are owned by Intel Corporation or its suppliers
87d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * or licensors. Title to the Material remains with Intel Corporation or its
97d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * suppliers and licensors. The Material contains trade secrets and proprietary
107d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * and confidential information of Intel or its suppliers and licensors. The
117d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * Material is protected by worldwide copyright and trade secret laws and
127d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * treaty provisions. No part of the Material may be used, copied, reproduced,
137d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * modified, published, uploaded, posted, transmitted, distributed, or
147d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * disclosed in any way without Intel’s prior express written permission.
157d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org *
167d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * No license under any patent, copyright, trade secret or other intellectual
177d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * property right is granted to or conferred upon you by disclosure or delivery
187d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * of the Materials, either expressly, by implication, inducement, estoppel or
197d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * otherwise. Any license under such intellectual property rights must be
207d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * express and approved by Intel in writing.
217d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org *
227d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * CREATED: 2011-06-01
237d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org * UPDATED: 2011-07-27
247d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org */
257d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#pragma once
267d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
277d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include <pthread.h>
287d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "RemoteCommandHandlerTemplate.h"
297d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "PathNavigator.h"
307d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "SelectionCriterionType.h"
317d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "SelectionCriterion.h"
327d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "Element.h"
337d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include <map>
347d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include <vector>
357d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "XmlDocSink.h"
367d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org#include "XmlDocSource.h"
377d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
387d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
397d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CElementLibrarySet;
407d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CSubsystemLibrary;
417d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CSystemClass;
427d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CSelectionCriteria;
437d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CParameterFrameworkConfiguration;
447d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CSystemClassConfiguration;
457d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CParameterBlackboard;
467d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CConfigurableDomains;
477d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass IRemoteProcessorServerInterface;
487d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CBackSynchronizer;
497d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CParameterHandle;
507d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CSubsystemPlugins;
517d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
527d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.orgclass CParameterMgr : private CElement
537d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org{
547d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    enum ChildElement {
557d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        EFrameworkConfiguration,
567d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        ESelectionCriteria,
577d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        ESystemClass,
587d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        EConfigurableDomains
597d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    };
607d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    enum ElementLibrary {
617d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        EFrameworkConfigurationLibrary,
627d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        EParameterCreationLibrary,
637d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        EParameterConfigurationLibrary
647d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    };
657d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
667d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    // Remote command parsers
677d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    typedef TRemoteCommandHandlerTemplate<CParameterMgr> CCommandHandler;
687d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
697d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    typedef CCommandHandler::CommandStatus (CParameterMgr::*RemoteCommandParser)(const IRemoteCommand& remoteCommand, string& strResult);
707d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org
717d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    // Parser descriptions
727d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    struct SRemoteCommandParserItem
737d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    {
747d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        const char* _pcCommandName;
757d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        CParameterMgr::RemoteCommandParser _pfnParser;
767d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        uint32_t _uiMinArgumentCount;
777d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        const char* _pcHelp;
787d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org        const char* _pcDescription;
797d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    };
807d7f08957c335438ff8898ee74d27dfdac7a1789kjellander@webrtc.org    // Version
81    static const uint32_t guiEditionMajor = 0x2;
82    static const uint32_t guiEditionMinor = 0x1;
83    static const uint32_t guiRevision = 0x0;
84
85    // Parameter handle friendship
86    friend class CParameterHandle;
87public:
88    // Logger interface
89    class ILogger
90    {
91    public:
92        virtual void log(const std::string& strLog) = 0;
93    };
94
95    // Construction
96    CParameterMgr(const string& strConfigurationFilePath);
97    virtual ~CParameterMgr();
98
99    // Logging
100    void setLogger(ILogger* pLogger);
101
102    // Init
103    bool load(string& strError);
104    virtual bool init(string& strError);
105
106    // Selection Criteria
107    CSelectionCriterionType* createSelectionCriterionType(bool bIsInclusive);
108    CSelectionCriterion* createSelectionCriterion(const string& strName, const CSelectionCriterionType* pSelectionCriterionType);
109    // Selection criterion retrieval
110    CSelectionCriterion* getSelectionCriterion(const string& strName);
111
112    // Configuration application
113    bool applyConfigurations(string& strError);
114
115    // Dynamic parameter handling
116    CParameterHandle* createParameterHandle(const string& strPath, string& strError);
117
118    //////////// Tuning /////////////
119    // Tuning mode
120    bool setTuningMode(bool bOn, string& strError);
121    bool tuningModeOn() const;
122
123    // Current value space for user set/get value interpretation
124    void setValueSpace(bool bIsRaw);
125    bool valueSpaceIsRaw();
126
127    // Current Output Raw Format for user get value interpretation
128    void setOutputRawFormat(bool bIsHex);
129    bool outputRawFormatIsHex();
130
131    // Automatic hardware synchronization control (during tuning session)
132    bool setAutoSync(bool bAutoSyncOn, string& strError);
133    bool autoSyncOn() const;
134    bool sync(string& strError);
135
136    // User set/get parameters
137    bool accessValue(const string& strPath, string& strValue, bool bSet, string& strError);
138
139    ////////// Configuration/Domains handling //////////////
140    // Creation/Deletion
141    bool createDomain(const string& strName, string& strError);
142    bool deleteDomain(const string& strName, string& strError);
143    bool deleteAllDomains(string& strError);
144    bool createConfiguration(const string& strDomain, const string& strConfiguration, string& strError);
145    bool deleteConfiguration(const string& strDomain, const string& strConfiguration, string& strError);
146
147    // Save/Restore
148    bool restoreConfiguration(const string& strDomain, const string& strConfiguration, string& strError);
149    bool saveConfiguration(const string& strDomain, const string& strConfiguration, string& strError);
150
151    // Configurable element - domain association
152    bool addConfigurableElementToDomain(const string& strDomain, const string& strConfigurableElementPath, string& strError);
153    bool removeConfigurableElementFromDomain(const string& strDomain, const string& strConfigurableElementPath, string& strError);
154    bool split(const string& strDomain, const string& strConfigurableElementPath, string& strError);
155
156    // XML Import/Export
157    bool importDomainsXml(const string& strFileName, bool bWithSettings, string& strError);
158    bool exportDomainsXml(const string& strFileName, bool bWithSettings, string& strError) const;
159
160    // Binary Import/Export
161    bool importDomainsBinary(const string& strFileName, string& strError);
162    bool exportDomainsBinary(const string& strFileName, string& strError);
163
164    // GUI command XML send
165    bool getDomainsXMLString(string& strResult, bool bWithSettings);
166    bool getSystemClassXMLString(string& strResult);
167
168    // Introspect
169    void logStructureContent(string& strContent) const;
170
171    // CElement
172    virtual string getKind() const;
173private:
174    CParameterMgr(const CParameterMgr&);
175    CParameterMgr& operator=(const CParameterMgr&);
176
177    // Logging (done by root)
178    virtual void doLog(const string& strLog) const;
179    virtual void nestLog() const;
180    virtual void unnestLog() const;
181
182    // Version
183    string getVersion() const;
184
185    ////////////////:: Remote command parsers
186    /// Version
187    CCommandHandler::CommandStatus versionCommandProcess(const IRemoteCommand& remoteCommand, string& strResult);
188    /// Status
189    CCommandHandler::CommandStatus statusCommandProcess(const IRemoteCommand& remoteCommand, string& strResult);
190    /// Tuning Mode
191    CCommandHandler::CommandStatus setTuningModeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
192    CCommandHandler::CommandStatus getTuningModeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
193    /// Value Space
194    CCommandHandler::CommandStatus setValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
195    CCommandHandler::CommandStatus getValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
196    /// Output Raw Format
197    CCommandHandler::CommandStatus setOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
198    CCommandHandler::CommandStatus getOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
199    /// Sync
200    CCommandHandler::CommandStatus setAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
201    CCommandHandler::CommandStatus getAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
202    CCommandHandler::CommandStatus syncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
203    /// Criteria
204    CCommandHandler::CommandStatus listCriteriaCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
205    /// Domains
206    CCommandHandler::CommandStatus listDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
207    CCommandHandler::CommandStatus createDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
208    CCommandHandler::CommandStatus deleteDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
209    CCommandHandler::CommandStatus deleteAllDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
210    CCommandHandler::CommandStatus renameDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
211    CCommandHandler::CommandStatus setSequenceAwarenessCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
212    CCommandHandler::CommandStatus getSequenceAwarenessCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
213    CCommandHandler::CommandStatus listDomainElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
214    CCommandHandler::CommandStatus addElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
215    CCommandHandler::CommandStatus removeElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
216    CCommandHandler::CommandStatus splitDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
217    /// Configurations
218    CCommandHandler::CommandStatus listConfigurationsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
219    CCommandHandler::CommandStatus dumpDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
220    CCommandHandler::CommandStatus createConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
221    CCommandHandler::CommandStatus deleteConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
222    CCommandHandler::CommandStatus renameConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
223    CCommandHandler::CommandStatus saveConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
224    CCommandHandler::CommandStatus restoreConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
225    CCommandHandler::CommandStatus setElementSequenceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
226    CCommandHandler::CommandStatus getElementSequenceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
227    CCommandHandler::CommandStatus setRuleCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
228    CCommandHandler::CommandStatus clearRuleCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
229    CCommandHandler::CommandStatus getRuleCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
230    /// Elements/Parameters
231    CCommandHandler::CommandStatus listElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
232    CCommandHandler::CommandStatus listParametersCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
233    CCommandHandler::CommandStatus dumpElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
234    CCommandHandler::CommandStatus getElementSizeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
235    CCommandHandler::CommandStatus showPropertiesCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
236    CCommandHandler::CommandStatus getParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
237    CCommandHandler::CommandStatus setParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
238    CCommandHandler::CommandStatus listBelongingDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
239    CCommandHandler::CommandStatus listAssociatedDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
240    /// Browse
241    CCommandHandler::CommandStatus listAssociatedElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
242    CCommandHandler::CommandStatus listConflictingElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
243    CCommandHandler::CommandStatus listRogueElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
244    /// Settings Import/Export
245    CCommandHandler::CommandStatus exportConfigurableDomainsToXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
246    CCommandHandler::CommandStatus importConfigurableDomainsFromXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
247    CCommandHandler::CommandStatus exportConfigurableDomainsWithSettingsToXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
248    CCommandHandler::CommandStatus importConfigurableDomainsWithSettingsFromXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
249    CCommandHandler::CommandStatus exportSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
250    CCommandHandler::CommandStatus importSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
251    /// GUI commands
252    CCommandHandler::CommandStatus getSystemClassXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
253    CCommandHandler::CommandStatus getDomainsXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
254
255    // Max command usage length, use for formatting
256    void setMaxCommandUsageLength();
257
258    // For tuning, check we're in tuning mode
259    bool checkTuningModeOn(string& strError) const;
260
261    // Blackboard (dynamic parameter handling)
262    pthread_mutex_t* getBlackboardMutex();
263
264    // Blackboard reference (dynamic parameter handling)
265    CParameterBlackboard* getParameterBlackboard();
266
267    // Parameter access
268    bool doSetValue(const string& strPath, const string& strValue, bool bRawValueSpace, bool bDynamicAccess, string& strError) const;
269    bool doGetValue(const string& strPath, string& strValue, bool bRawValueSpace, bool bHexOutputRawFormat, bool bDynamicAccess, string& strError) const;
270
271    // Framework global configuration loading
272    bool loadFrameworkConfiguration(string& strError);
273
274    // System class Structure loading
275    bool loadStructure(string& strError);
276
277    // System class Structure loading
278    bool loadSettings(string& strError);
279
280    // Parse XML file into Root element
281    bool xmlParse(CXmlElementSerializingContext& elementSerializingContext, CElement* pRootElement, const string& strXmlFilePath, const string& strXmlFolder, ElementLibrary eElementLibrary, const string& strNameAttrituteName = "Name");
282
283    // Framework Configuration
284    CParameterFrameworkConfiguration* getFrameworkConfiguration();
285    const CParameterFrameworkConfiguration* getConstFrameworkConfiguration();
286
287    // Selection Criteria
288    CSelectionCriteria* getSelectionCriteria();
289    const CSelectionCriteria* getConstSelectionCriteria();
290
291    // System Class
292    CSystemClass* getSystemClass();
293    const CSystemClass* getConstSystemClass() const;
294
295    // Configurable Domains
296    CConfigurableDomains* getConfigurableDomains();
297    const CConfigurableDomains* getConstConfigurableDomains();
298    const CConfigurableDomains* getConstConfigurableDomains() const;
299
300    // Dynamic object creation libraries feeding
301    void feedElementLibraries();
302
303    // Remote Processor Server connection handling
304    bool handleRemoteProcessingInterface(string& strError);
305
306    // Back synchronization
307    CBackSynchronizer* createBackSynchronizer(string& strError) const;
308
309    // Tuning
310    bool _bTuningModeIsOn;
311
312    // Value Space
313    bool _bValueSpaceIsRaw;
314
315    // Output Raw Format
316    bool _bOutputRawFormatIsHex;
317
318    // Automatic synchronization to HW during Tuning session
319    bool _bAutoSyncOn;
320
321    // Current Parameter Settings
322    CParameterBlackboard* _pMainParameterBlackboard;
323
324    // Dynamic object creation
325    CElementLibrarySet* _pElementLibrarySet;
326
327    // XML parsing, object creation handling
328    string _strXmlConfigurationFilePath; // Configuration file path
329    string _strXmlConfigurationFolderPath; // Root folder for configuration file
330    string _strSchemaFolderLocation; // Place where schemas stand
331
332    // Subsystem plugin location
333    const CSubsystemPlugins* _pSubsystemPlugins;
334
335    // Whole system structure checksum
336    uint8_t _uiStructureChecksum;
337
338    // Command Handler
339    CCommandHandler* _pCommandHandler;
340
341    // Remote Processor Server
342    IRemoteProcessorServerInterface* _pRemoteProcessorServer;
343
344    // Parser description array
345    static const SRemoteCommandParserItem gastRemoteCommandParserItems[];
346
347    // Parser description array size
348    static const uint32_t guiNbRemoteCommandParserItems;
349
350    // Maximum command usage length
351    uint32_t _uiMaxCommandUsageLength;
352
353    // Blackboard access mutex
354    pthread_mutex_t _blackboardMutex;
355
356    // Logging
357    ILogger* _pLogger;
358    mutable uint32_t _uiLogDepth;
359};
360
361