| /* <auto_header> |
| * <FILENAME> |
| * |
| * INTEL CONFIDENTIAL |
| * Copyright © 2011 Intel |
| * Corporation All Rights Reserved. |
| * |
| * The source code contained or described herein and all documents related to |
| * the source code ("Material") are owned by Intel Corporation or its suppliers |
| * or licensors. Title to the Material remains with Intel Corporation or its |
| * suppliers and licensors. The Material contains trade secrets and proprietary |
| * and confidential information of Intel or its suppliers and licensors. The |
| * Material is protected by worldwide copyright and trade secret laws and |
| * treaty provisions. No part of the Material may be used, copied, reproduced, |
| * modified, published, uploaded, posted, transmitted, distributed, or |
| * disclosed in any way without Intel’s prior express written permission. |
| * |
| * No license under any patent, copyright, trade secret or other intellectual |
| * property right is granted to or conferred upon you by disclosure or delivery |
| * of the Materials, either expressly, by implication, inducement, estoppel or |
| * otherwise. Any license under such intellectual property rights must be |
| * express and approved by Intel in writing. |
| * |
| * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com) |
| * CREATED: 2011-06-01 |
| * UPDATED: 2011-07-27 |
| * |
| * |
| * </auto_header> |
| */ |
| #pragma once |
| |
| #include <pthread.h> |
| #include "RemoteCommandHandler.h" |
| #include "PathNavigator.h" |
| #include "SelectionCriterionType.h" |
| #include "SelectionCriterion.h" |
| #include "Element.h" |
| #include "SelectionCriterionObserver.h" |
| #include <map> |
| #include <vector> |
| |
| |
| class CElementLibrarySet; |
| class CSubsystemLibrary; |
| class CSystemClass; |
| class CSelectionCriteria; |
| class CParameterFrameworkConfiguration; |
| class CSystemClassConfiguration; |
| class CParameterBlackboard; |
| class CConfigurableDomains; |
| class IRemoteProcessorServerInterface; |
| class CBackSynchronizer; |
| |
| class CParameterMgr : private CElement, private IRemoteCommandHandler, private ISelectionCriterionObserver |
| { |
| enum ChildElement { |
| EFrameworkConfiguration, |
| ESelectionCriteria, |
| ESystemClass, |
| EConfigurableDomains |
| }; |
| enum ElementLibrary { |
| EFrameworkConfigurationLibrary, |
| EParameterCreationLibrary, |
| EParameterConfigurationLibrary |
| }; |
| // Remote command execution status |
| enum CommandStatus { |
| EDone, |
| ESucceeded, |
| EFailed, |
| EShowUsgae |
| }; |
| |
| // Remote command parsers |
| typedef CommandStatus (CParameterMgr::*RemoteCommandParser)(const IRemoteCommand& remoteCommand, string& strResult); |
| |
| // Parser descriptions |
| struct SRemoteCommandParserItem |
| { |
| const char* _pcCommandName; |
| CParameterMgr::RemoteCommandParser _pfnParser; |
| uint32_t _uiMinArgumentCount; |
| const char* _pcHelp; |
| const char* _pcDescription; |
| |
| // Usage |
| string usage() const |
| { |
| return string(_pcCommandName) + " " + _pcHelp; |
| } |
| }; |
| |
| // Version |
| static const uint32_t guiEditionMajor = 0x0; |
| static const uint32_t guiEditionMinor = 0x1; |
| static const uint32_t guiRevision = 0x1; |
| public: |
| // Logger interface |
| class ILogger |
| { |
| public: |
| virtual void log(const std::string& strLog) = 0; |
| }; |
| |
| // Construction |
| CParameterMgr(const string& strParameterFrameworkConfigurationFolderPath, const string& strSystemClassName); |
| virtual ~CParameterMgr(); |
| |
| // Logging |
| void setLogger(ILogger* pLogger); |
| |
| // Init |
| bool load(string& strError); |
| virtual bool init(string& strError); |
| |
| // Selection Criteria |
| CSelectionCriterionType* createSelectionCriterionType(bool bIsInclusive); |
| CSelectionCriterion* createSelectionCriterion(const string& strName, const CSelectionCriterionType* pSelectionCriterionType); |
| |
| //////////// Tuning ///////////// |
| // Tuning mode |
| bool setTuningMode(bool bOn, string& strError); |
| bool tuningModeOn() const; |
| |
| // Current value space for user set/get value interpretation |
| void setValueSpace(bool bIsRaw); |
| bool valueSpaceIsRaw(); |
| |
| // Current Output Raw Format for user get value interpretation |
| void setOutputRawFormat(bool bIsHex); |
| bool outputRawFormatIsHex(); |
| |
| // Automatic hardware synchronization control (during tuning session) |
| bool setAutoSync(bool bAutoSyncOn, string& strError); |
| bool autoSyncOn() const; |
| bool sync(string& strError); |
| |
| // User set/get parameters |
| bool setValue(const string& strPath, const string& strValue, string& strError); |
| bool getValue(const string& strPath, string& strValue, string& strError) const; |
| |
| ////////// Configuration/Domains handling ////////////// |
| // Creation/Deletion |
| bool createDomain(const string& strName, string& strError); |
| bool deleteDomain(const string& strName, string& strError); |
| bool createConfiguration(const string& strDomain, const string& strConfiguration, string& strError); |
| bool deleteConfiguration(const string& strDomain, const string& strConfiguration, string& strError); |
| |
| // Save/Restore |
| bool restoreConfiguration(const string& strDomain, const string& strConfiguration, string& strError); |
| bool saveConfiguration(const string& strDomain, const string& strConfiguration, string& strError); |
| |
| // Configurable element - domain association |
| bool addConfigurableElementToDomain(const string& strDomain, const string& strConfigurableElementPath, string& strError); |
| bool removeConfigurableElementFromDomain(const string& strDomain, const string& strConfigurableElementPath, string& strError); |
| bool split(const string& strDomain, const string& strConfigurableElementPath, string& strError); |
| |
| // XML Import/Export |
| bool importDomainsXml(const string& strFileName, bool bWithSettings, string& strError); |
| bool exportDomainsXml(const string& strFileName, bool bWithSettings, string& strError) const; |
| |
| // Binary Import/Export |
| bool importDomainsBinary(const string& strFileName, string& strError); |
| bool exportDomainsBinary(const string& strFileName, string& strError); |
| |
| // Introspect |
| void logStructureContent(string& strContent) const; |
| |
| // CElement |
| virtual string getKind() const; |
| private: |
| // Logging (done by root) |
| virtual void doLog(const string& strLog) const; |
| virtual void nestLog() const; |
| virtual void unnestLog() const; |
| |
| // From ISelectionCriterionObserver: selection criteria changed event |
| virtual void selectionCriterionChanged(const CSelectionCriterion* pSelectionCriterion); |
| |
| // From IRemoteCommandHandler: return true on success, fill result in any cases |
| virtual bool remoteCommandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| |
| ////////////////:: Remote command parsers |
| /// Help |
| CommandStatus helpCommandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Version |
| CommandStatus versionCommandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Status |
| CommandStatus statusCommandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Tuning Mode |
| CommandStatus setTuningModeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getTuningModeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Value Space |
| CommandStatus setValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Output Raw Format |
| CommandStatus setOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Sync |
| CommandStatus setAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus syncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Criteria |
| CommandStatus listCriteriaCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Domains |
| CommandStatus listDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus createDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus deleteDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus renameDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listDomainElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus addElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus removeElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus splitDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Configurations |
| CommandStatus listConfigurationsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus createConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus deleteConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus renameConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus saveConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus restoreConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Elements/Parameters |
| CommandStatus listElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listParametersCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus dumpElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getElementSizeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus showPropertiesCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus getParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus setParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listBelongingDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listAssociatedDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Browse |
| CommandStatus listAssociatedElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listConflictingElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus listRogueElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| /// Settings Import/Export |
| CommandStatus exportConfigurableDomainsToXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus importConfigurableDomainsFromXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus exportConfigurableDomainsWithSettingsToXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus importConfigurableDomainsWithSettingsFromXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus exportSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| CommandStatus importSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult); |
| |
| // Max command usage length, use for formatting |
| void setMaxCommandUsageLength(); |
| |
| // For tuning, check we're in tuning mode |
| bool checkTuningModeOn(string& strError) const; |
| |
| // Framework global configuration loading |
| bool loadFrameworkConfiguration(string& strError); |
| |
| // System class Structure loading |
| bool loadStructure(string& strError); |
| |
| // System class Structure loading |
| bool loadSettings(string& strError); |
| |
| // Parse XML file into Root element |
| bool xmlParse(CXmlElementSerializingContext& elementSerializingContext, CElement* pRootElement, const string& strXmlFilePath, const string& strXmlFolder, ElementLibrary eElementLibrary, const string& strNameAttrituteName = "Name"); |
| |
| // Framework Configuration |
| CParameterFrameworkConfiguration* getFrameworkConfiguration(); |
| const CParameterFrameworkConfiguration* getConstFrameworkConfiguration(); |
| |
| // Selection Criteria |
| CSelectionCriteria* getSelectionCriteria(); |
| const CSelectionCriteria* getConstSelectionCriteria(); |
| |
| // System Class |
| CSystemClass* getSystemClass(); |
| const CSystemClass* getConstSystemClass() const; |
| |
| // Configurable Domains |
| CConfigurableDomains* getConfigurableDomains(); |
| const CConfigurableDomains* getConstConfigurableDomains(); |
| const CConfigurableDomains* getConstConfigurableDomains() const; |
| |
| // Dynamic object creation libraries feeding |
| void feedElementLibraries(); |
| |
| // Remote Processor Server connection handling |
| bool handleRemoteProcessingInterface(string& strError); |
| |
| // Back synchronization |
| CBackSynchronizer* createBackSynchronizer(string& strError) const; |
| |
| // Tuning |
| bool _bTuningModeIsOn; |
| |
| // Value Space |
| bool _bValueSpaceIsRaw; |
| |
| // Output Raw Format |
| bool _bOutputRawFormatIsHex; |
| |
| // Automatic synchronization to HW during Tuning session |
| bool _bAutoSyncOn; |
| |
| // Current Parameter Settings |
| CParameterBlackboard* _pMainParameterBlackboard; |
| |
| // Dynamic object creation |
| CElementLibrarySet* _pElementLibrarySet; |
| |
| // XML parsing, object creation handling |
| string _strParameterFrameworkConfigurationFolderPath; // Root folder for framework configuration |
| string _strSchemaFolderLocation; // Place where schemas stand |
| |
| // Subsystem plugin location |
| vector<string> _astrPluginFolderPaths; |
| |
| // System Class Configuration |
| const CSystemClassConfiguration* _pSystemClassConfiguration; |
| |
| // Whole system structure checksum |
| uint8_t _uiStructureChecksum; |
| |
| // Remote Processor Server |
| IRemoteProcessorServerInterface* _pRemoteProcessorServer; |
| |
| // Parser description array |
| static const SRemoteCommandParserItem gastRemoteCommandParserItems[]; |
| |
| // Parser description array size |
| static const uint32_t guiNbRemoteCommandParserItems; |
| |
| // Maximum command usage length |
| uint32_t _uiMaxCommandUsageLength; |
| |
| // Tuning mode mutex |
| pthread_mutex_t _tuningModeMutex; |
| |
| // Logging |
| ILogger* _pLogger; |
| mutable uint32_t _uiLogDepth; |
| }; |
| |