1*c33452fbSAndroid Build Coastguard Worker /*
2*c33452fbSAndroid Build Coastguard Worker * Copyright (c) 2011-2016, Intel Corporation
3*c33452fbSAndroid Build Coastguard Worker * All rights reserved.
4*c33452fbSAndroid Build Coastguard Worker *
5*c33452fbSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without modification,
6*c33452fbSAndroid Build Coastguard Worker * are permitted provided that the following conditions are met:
7*c33452fbSAndroid Build Coastguard Worker *
8*c33452fbSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this
9*c33452fbSAndroid Build Coastguard Worker * list of conditions and the following disclaimer.
10*c33452fbSAndroid Build Coastguard Worker *
11*c33452fbSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice,
12*c33452fbSAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation and/or
13*c33452fbSAndroid Build Coastguard Worker * other materials provided with the distribution.
14*c33452fbSAndroid Build Coastguard Worker *
15*c33452fbSAndroid Build Coastguard Worker * 3. Neither the name of the copyright holder nor the names of its contributors
16*c33452fbSAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software without
17*c33452fbSAndroid Build Coastguard Worker * specific prior written permission.
18*c33452fbSAndroid Build Coastguard Worker *
19*c33452fbSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20*c33452fbSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21*c33452fbSAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22*c33452fbSAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23*c33452fbSAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24*c33452fbSAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25*c33452fbSAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26*c33452fbSAndroid Build Coastguard Worker * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*c33452fbSAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28*c33452fbSAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*c33452fbSAndroid Build Coastguard Worker */
30*c33452fbSAndroid Build Coastguard Worker #include "version.h"
31*c33452fbSAndroid Build Coastguard Worker #include "ParameterMgr.h"
32*c33452fbSAndroid Build Coastguard Worker #include "ConfigurationAccessContext.h"
33*c33452fbSAndroid Build Coastguard Worker #include "XmlParameterSerializingContext.h"
34*c33452fbSAndroid Build Coastguard Worker #include "XmlElementSerializingContext.h"
35*c33452fbSAndroid Build Coastguard Worker #include "SystemClass.h"
36*c33452fbSAndroid Build Coastguard Worker #include "ElementLibrarySet.h"
37*c33452fbSAndroid Build Coastguard Worker #include "SubsystemLibrary.h"
38*c33452fbSAndroid Build Coastguard Worker #include "NamedElementBuilderTemplate.h"
39*c33452fbSAndroid Build Coastguard Worker #include "KindElementBuilderTemplate.h"
40*c33452fbSAndroid Build Coastguard Worker #include "ElementBuilderTemplate.h"
41*c33452fbSAndroid Build Coastguard Worker #include "SelectionCriterionType.h"
42*c33452fbSAndroid Build Coastguard Worker #include "SubsystemElementBuilder.h"
43*c33452fbSAndroid Build Coastguard Worker #include "FileIncluderElementBuilder.h"
44*c33452fbSAndroid Build Coastguard Worker #include "SelectionCriteria.h"
45*c33452fbSAndroid Build Coastguard Worker #include "ComponentType.h"
46*c33452fbSAndroid Build Coastguard Worker #include "ComponentInstance.h"
47*c33452fbSAndroid Build Coastguard Worker #include "ParameterBlockType.h"
48*c33452fbSAndroid Build Coastguard Worker #include "BooleanParameterType.h"
49*c33452fbSAndroid Build Coastguard Worker #include "IntegerParameterBuilder.h"
50*c33452fbSAndroid Build Coastguard Worker #include "FixedPointParameterType.h"
51*c33452fbSAndroid Build Coastguard Worker #include "FloatingPointParameterType.h"
52*c33452fbSAndroid Build Coastguard Worker #include "ParameterBlackboard.h"
53*c33452fbSAndroid Build Coastguard Worker #include "Parameter.h"
54*c33452fbSAndroid Build Coastguard Worker #include "ParameterAccessContext.h"
55*c33452fbSAndroid Build Coastguard Worker #include "ParameterFrameworkConfiguration.h"
56*c33452fbSAndroid Build Coastguard Worker #include "FrameworkConfigurationGroup.h"
57*c33452fbSAndroid Build Coastguard Worker #include "PluginLocation.h"
58*c33452fbSAndroid Build Coastguard Worker #include "SubsystemPlugins.h"
59*c33452fbSAndroid Build Coastguard Worker #include "FrameworkConfigurationLocation.h"
60*c33452fbSAndroid Build Coastguard Worker #include "ConfigurableDomains.h"
61*c33452fbSAndroid Build Coastguard Worker #include "ConfigurableDomain.h"
62*c33452fbSAndroid Build Coastguard Worker #include "DomainConfiguration.h"
63*c33452fbSAndroid Build Coastguard Worker #include "XmlDomainSerializingContext.h"
64*c33452fbSAndroid Build Coastguard Worker #include "XmlDomainExportContext.h"
65*c33452fbSAndroid Build Coastguard Worker #include "XmlDomainImportContext.h"
66*c33452fbSAndroid Build Coastguard Worker #include "BitParameterBlockType.h"
67*c33452fbSAndroid Build Coastguard Worker #include "BitParameterType.h"
68*c33452fbSAndroid Build Coastguard Worker #include "StringParameterType.h"
69*c33452fbSAndroid Build Coastguard Worker #include "EnumParameterType.h"
70*c33452fbSAndroid Build Coastguard Worker #include "BackgroundRemoteProcessorServer.h"
71*c33452fbSAndroid Build Coastguard Worker #include "ElementLocator.h"
72*c33452fbSAndroid Build Coastguard Worker #include "CompoundRule.h"
73*c33452fbSAndroid Build Coastguard Worker #include "SelectionCriterionRule.h"
74*c33452fbSAndroid Build Coastguard Worker #include "SimulatedBackSynchronizer.h"
75*c33452fbSAndroid Build Coastguard Worker #include "HardwareBackSynchronizer.h"
76*c33452fbSAndroid Build Coastguard Worker #include <cassert>
77*c33452fbSAndroid Build Coastguard Worker #include "ParameterHandle.h"
78*c33452fbSAndroid Build Coastguard Worker #include "LinearParameterAdaptation.h"
79*c33452fbSAndroid Build Coastguard Worker #include "LogarithmicParameterAdaptation.h"
80*c33452fbSAndroid Build Coastguard Worker #include "EnumValuePair.h"
81*c33452fbSAndroid Build Coastguard Worker #include "Subsystem.h"
82*c33452fbSAndroid Build Coastguard Worker #include "XmlStreamDocSink.h"
83*c33452fbSAndroid Build Coastguard Worker #include "XmlMemoryDocSink.h"
84*c33452fbSAndroid Build Coastguard Worker #include "XmlDocSource.h"
85*c33452fbSAndroid Build Coastguard Worker #include "XmlMemoryDocSource.h"
86*c33452fbSAndroid Build Coastguard Worker #include "SelectionCriteriaDefinition.h"
87*c33452fbSAndroid Build Coastguard Worker #include "Utility.h"
88*c33452fbSAndroid Build Coastguard Worker #include "Memory.hpp"
89*c33452fbSAndroid Build Coastguard Worker #include <sstream>
90*c33452fbSAndroid Build Coastguard Worker #include <fstream>
91*c33452fbSAndroid Build Coastguard Worker #include <algorithm>
92*c33452fbSAndroid Build Coastguard Worker #include <stdexcept>
93*c33452fbSAndroid Build Coastguard Worker #include <mutex>
94*c33452fbSAndroid Build Coastguard Worker #include <iomanip>
95*c33452fbSAndroid Build Coastguard Worker #include "convert.hpp"
96*c33452fbSAndroid Build Coastguard Worker
97*c33452fbSAndroid Build Coastguard Worker #define base CElement
98*c33452fbSAndroid Build Coastguard Worker
99*c33452fbSAndroid Build Coastguard Worker /** Private macro helper to declare a new context
100*c33452fbSAndroid Build Coastguard Worker *
101*c33452fbSAndroid Build Coastguard Worker * Context declaration always need logger and logging prefix to be
102*c33452fbSAndroid Build Coastguard Worker * passed as parameters.
103*c33452fbSAndroid Build Coastguard Worker * This macro aims to avoid this boring notation.
104*c33452fbSAndroid Build Coastguard Worker * This macro should be called only once in a scope. Nested scopes can
105*c33452fbSAndroid Build Coastguard Worker * call this macro too, as variable shadowing is supported.
106*c33452fbSAndroid Build Coastguard Worker */
107*c33452fbSAndroid Build Coastguard Worker #define LOG_CONTEXT(contextTitle) core::log::Context context(_logger, contextTitle)
108*c33452fbSAndroid Build Coastguard Worker
109*c33452fbSAndroid Build Coastguard Worker #ifdef SIMULATION
110*c33452fbSAndroid Build Coastguard Worker // In simulation, back synchronization of the blackboard won't probably work
111*c33452fbSAndroid Build Coastguard Worker // We need to ensure though the blackboard is initialized with valid data
112*c33452fbSAndroid Build Coastguard Worker typedef CSimulatedBackSynchronizer BackSynchronizer;
113*c33452fbSAndroid Build Coastguard Worker #else
114*c33452fbSAndroid Build Coastguard Worker // Real back synchronizer from subsystems
115*c33452fbSAndroid Build Coastguard Worker typedef CHardwareBackSynchronizer BackSynchronizer;
116*c33452fbSAndroid Build Coastguard Worker #endif
117*c33452fbSAndroid Build Coastguard Worker
118*c33452fbSAndroid Build Coastguard Worker using std::string;
119*c33452fbSAndroid Build Coastguard Worker using std::list;
120*c33452fbSAndroid Build Coastguard Worker using std::vector;
121*c33452fbSAndroid Build Coastguard Worker using std::ostringstream;
122*c33452fbSAndroid Build Coastguard Worker using std::ofstream;
123*c33452fbSAndroid Build Coastguard Worker using std::ifstream;
124*c33452fbSAndroid Build Coastguard Worker using std::mutex;
125*c33452fbSAndroid Build Coastguard Worker using std::lock_guard;
126*c33452fbSAndroid Build Coastguard Worker
127*c33452fbSAndroid Build Coastguard Worker // FIXME: integrate ParameterMgr to core namespace
128*c33452fbSAndroid Build Coastguard Worker using namespace core;
129*c33452fbSAndroid Build Coastguard Worker
130*c33452fbSAndroid Build Coastguard Worker // Used for remote processor server creation
131*c33452fbSAndroid Build Coastguard Worker typedef IRemoteProcessorServerInterface *(*CreateRemoteProcessorServer)(
132*c33452fbSAndroid Build Coastguard Worker std::string bindAddress, IRemoteCommandHandler *pCommandHandler);
133*c33452fbSAndroid Build Coastguard Worker
134*c33452fbSAndroid Build Coastguard Worker // Config File System looks normally like this:
135*c33452fbSAndroid Build Coastguard Worker // ---------------------------------------------
136*c33452fbSAndroid Build Coastguard Worker //|-- <ParameterFrameworkConfiguration>.xml
137*c33452fbSAndroid Build Coastguard Worker //|-- schemas
138*c33452fbSAndroid Build Coastguard Worker //| `-- *.xsd
139*c33452fbSAndroid Build Coastguard Worker //|-- Settings
140*c33452fbSAndroid Build Coastguard Worker //| `-- <SystemClassName folder>*
141*c33452fbSAndroid Build Coastguard Worker //| |-- <ConfigurableDomains>.xml
142*c33452fbSAndroid Build Coastguard Worker //| `-- <Settings>.bin?
143*c33452fbSAndroid Build Coastguard Worker //`-- Structure
144*c33452fbSAndroid Build Coastguard Worker // `-- <SystemClassName folder>*
145*c33452fbSAndroid Build Coastguard Worker // |-- <SystemClassName>Class.xml
146*c33452fbSAndroid Build Coastguard Worker // `-- <Subsystem>.xml*
147*c33452fbSAndroid Build Coastguard Worker // --------------------------------------------
148*c33452fbSAndroid Build Coastguard Worker
149*c33452fbSAndroid Build Coastguard Worker // Remote command parser array
150*c33452fbSAndroid Build Coastguard Worker const CParameterMgr::SRemoteCommandParserItem CParameterMgr::gastRemoteCommandParserItems[] = {
151*c33452fbSAndroid Build Coastguard Worker
152*c33452fbSAndroid Build Coastguard Worker /// Version
153*c33452fbSAndroid Build Coastguard Worker {"version", &CParameterMgr::versionCommandProcess, 0, "", "Show version"},
154*c33452fbSAndroid Build Coastguard Worker
155*c33452fbSAndroid Build Coastguard Worker /// Status
156*c33452fbSAndroid Build Coastguard Worker {"status", &CParameterMgr::statusCommandProcess, 0, "", "Show current status"},
157*c33452fbSAndroid Build Coastguard Worker
158*c33452fbSAndroid Build Coastguard Worker /// Tuning Mode
159*c33452fbSAndroid Build Coastguard Worker {"setTuningMode", &CParameterMgr::setTuningModeCommandProcess, 1, "on|off*",
160*c33452fbSAndroid Build Coastguard Worker "Turn on or off Tuning Mode"},
161*c33452fbSAndroid Build Coastguard Worker {"getTuningMode", &CParameterMgr::getTuningModeCommandProcess, 0, "", "Show Tuning Mode"},
162*c33452fbSAndroid Build Coastguard Worker
163*c33452fbSAndroid Build Coastguard Worker /// Value Space
164*c33452fbSAndroid Build Coastguard Worker {"setValueSpace", &CParameterMgr::setValueSpaceCommandProcess, 1, "raw|real*",
165*c33452fbSAndroid Build Coastguard Worker "Assigns Value Space used for parameter value interpretation"},
166*c33452fbSAndroid Build Coastguard Worker {"getValueSpace", &CParameterMgr::getValueSpaceCommandProcess, 0, "", "Show Value Space"},
167*c33452fbSAndroid Build Coastguard Worker
168*c33452fbSAndroid Build Coastguard Worker /// Output Raw Format
169*c33452fbSAndroid Build Coastguard Worker {"setOutputRawFormat", &CParameterMgr::setOutputRawFormatCommandProcess, 1, "dec*|hex",
170*c33452fbSAndroid Build Coastguard Worker "Assigns format used to output parameter values when in raw Value Space"},
171*c33452fbSAndroid Build Coastguard Worker {"getOutputRawFormat", &CParameterMgr::getOutputRawFormatCommandProcess, 0, "",
172*c33452fbSAndroid Build Coastguard Worker "Show Output Raw Format"},
173*c33452fbSAndroid Build Coastguard Worker
174*c33452fbSAndroid Build Coastguard Worker /// Sync
175*c33452fbSAndroid Build Coastguard Worker {"setAutoSync", &CParameterMgr::setAutoSyncCommandProcess, 1, "on*|off",
176*c33452fbSAndroid Build Coastguard Worker "Turn on or off automatic synchronization to hardware while in Tuning Mode"},
177*c33452fbSAndroid Build Coastguard Worker {"getAutoSync", &CParameterMgr::getAutoSyncCommandProcess, 0, "", "Show Auto Sync state"},
178*c33452fbSAndroid Build Coastguard Worker {"sync", &CParameterMgr::syncCommandProcess, 0, "",
179*c33452fbSAndroid Build Coastguard Worker "Synchronize current settings to hardware while in Tuning Mode and Auto Sync off"},
180*c33452fbSAndroid Build Coastguard Worker
181*c33452fbSAndroid Build Coastguard Worker /// Criteria
182*c33452fbSAndroid Build Coastguard Worker {"listCriteria", &CParameterMgr::listCriteriaCommandProcess, 0, "[CSV|XML]",
183*c33452fbSAndroid Build Coastguard Worker "List selection criteria"},
184*c33452fbSAndroid Build Coastguard Worker
185*c33452fbSAndroid Build Coastguard Worker /// Domains
186*c33452fbSAndroid Build Coastguard Worker {"listDomains", &CParameterMgr::listDomainsCommandProcess, 0, "", "List configurable domains"},
187*c33452fbSAndroid Build Coastguard Worker {"dumpDomains", &CParameterMgr::dumpDomainsCommandProcess, 0, "",
188*c33452fbSAndroid Build Coastguard Worker "Show all domains and configurations, including applicability conditions"},
189*c33452fbSAndroid Build Coastguard Worker {"createDomain", &CParameterMgr::createDomainCommandProcess, 1, "<domain>",
190*c33452fbSAndroid Build Coastguard Worker "Create new configurable domain"},
191*c33452fbSAndroid Build Coastguard Worker {"deleteDomain", &CParameterMgr::deleteDomainCommandProcess, 1, "<domain>",
192*c33452fbSAndroid Build Coastguard Worker "Delete configurable domain"},
193*c33452fbSAndroid Build Coastguard Worker {"deleteAllDomains", &CParameterMgr::deleteAllDomainsCommandProcess, 0, "",
194*c33452fbSAndroid Build Coastguard Worker "Delete all configurable domains"},
195*c33452fbSAndroid Build Coastguard Worker {"renameDomain", &CParameterMgr::renameDomainCommandProcess, 2, "<domain> <new name>",
196*c33452fbSAndroid Build Coastguard Worker "Rename configurable domain"},
197*c33452fbSAndroid Build Coastguard Worker {"setSequenceAwareness", &CParameterMgr::setSequenceAwarenessCommandProcess, 1,
198*c33452fbSAndroid Build Coastguard Worker "<domain> true|false*", "Set configurable domain sequence awareness"},
199*c33452fbSAndroid Build Coastguard Worker {"getSequenceAwareness", &CParameterMgr::getSequenceAwarenessCommandProcess, 1, "<domain>",
200*c33452fbSAndroid Build Coastguard Worker "Get configurable domain sequence awareness"},
201*c33452fbSAndroid Build Coastguard Worker {"listDomainElements", &CParameterMgr::listDomainElementsCommandProcess, 1, "<domain>",
202*c33452fbSAndroid Build Coastguard Worker "List elements associated to configurable domain"},
203*c33452fbSAndroid Build Coastguard Worker {"addElement", &CParameterMgr::addElementCommandProcess, 2, "<domain> <elem path>",
204*c33452fbSAndroid Build Coastguard Worker "Associate element at given path to configurable domain"},
205*c33452fbSAndroid Build Coastguard Worker {"removeElement", &CParameterMgr::removeElementCommandProcess, 2, "<domain> <elem path>",
206*c33452fbSAndroid Build Coastguard Worker "Dissociate element at given path from configurable domain"},
207*c33452fbSAndroid Build Coastguard Worker {"splitDomain", &CParameterMgr::splitDomainCommandProcess, 2, "<domain> <elem path>",
208*c33452fbSAndroid Build Coastguard Worker "Split configurable domain at given associated element path"},
209*c33452fbSAndroid Build Coastguard Worker
210*c33452fbSAndroid Build Coastguard Worker /// Configurations
211*c33452fbSAndroid Build Coastguard Worker {"listConfigurations", &CParameterMgr::listConfigurationsCommandProcess, 1, "<domain>",
212*c33452fbSAndroid Build Coastguard Worker "List domain configurations"},
213*c33452fbSAndroid Build Coastguard Worker {"createConfiguration", &CParameterMgr::createConfigurationCommandProcess, 2,
214*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration>", "Create new domain configuration"},
215*c33452fbSAndroid Build Coastguard Worker {"deleteConfiguration", &CParameterMgr::deleteConfigurationCommandProcess, 2,
216*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration>", "Delete domain configuration"},
217*c33452fbSAndroid Build Coastguard Worker {"renameConfiguration", &CParameterMgr::renameConfigurationCommandProcess, 3,
218*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration> <new name>", "Rename domain configuration"},
219*c33452fbSAndroid Build Coastguard Worker {"saveConfiguration", &CParameterMgr::saveConfigurationCommandProcess, 2,
220*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration>", "Save current settings into configuration"},
221*c33452fbSAndroid Build Coastguard Worker {"restoreConfiguration", &CParameterMgr::restoreConfigurationCommandProcess, 2,
222*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration>", "Restore current settings from configuration"},
223*c33452fbSAndroid Build Coastguard Worker {"setElementSequence", &CParameterMgr::setElementSequenceCommandProcess, 3,
224*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration> <elem path list>",
225*c33452fbSAndroid Build Coastguard Worker "Set element application order for configuration"},
226*c33452fbSAndroid Build Coastguard Worker {"getElementSequence", &CParameterMgr::getElementSequenceCommandProcess, 2,
227*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration>", "Get element application order for configuration"},
228*c33452fbSAndroid Build Coastguard Worker {"setRule", &CParameterMgr::setRuleCommandProcess, 3, "<domain> <configuration> <rule>",
229*c33452fbSAndroid Build Coastguard Worker "Set configuration application rule"},
230*c33452fbSAndroid Build Coastguard Worker {"clearRule", &CParameterMgr::clearRuleCommandProcess, 2, "<domain> <configuration>",
231*c33452fbSAndroid Build Coastguard Worker "Clear configuration application rule"},
232*c33452fbSAndroid Build Coastguard Worker {"getRule", &CParameterMgr::getRuleCommandProcess, 2, "<domain> <configuration>",
233*c33452fbSAndroid Build Coastguard Worker "Get configuration application rule"},
234*c33452fbSAndroid Build Coastguard Worker
235*c33452fbSAndroid Build Coastguard Worker /// Elements/Parameters
236*c33452fbSAndroid Build Coastguard Worker {"listElements", &CParameterMgr::listElementsCommandProcess, 1, "<elem path>|/",
237*c33452fbSAndroid Build Coastguard Worker "List elements under element at given path or root"},
238*c33452fbSAndroid Build Coastguard Worker {"listParameters", &CParameterMgr::listParametersCommandProcess, 1, "<elem path>|/",
239*c33452fbSAndroid Build Coastguard Worker "List parameters under element at given path or root"},
240*c33452fbSAndroid Build Coastguard Worker {"getElementStructureXML", &CParameterMgr::getElementStructureXMLCommandProcess, 1,
241*c33452fbSAndroid Build Coastguard Worker "<elem path>", "Get structure of element at given path in XML format"},
242*c33452fbSAndroid Build Coastguard Worker {"getElementBytes", &CParameterMgr::getElementBytesCommandProcess, 1, "<elem path>",
243*c33452fbSAndroid Build Coastguard Worker "Get settings of element at given path in Byte Array format"},
244*c33452fbSAndroid Build Coastguard Worker {"setElementBytes", &CParameterMgr::setElementBytesCommandProcess, 2, "<elem path> <values>",
245*c33452fbSAndroid Build Coastguard Worker "Set settings of element at given path in Byte Array format"},
246*c33452fbSAndroid Build Coastguard Worker {"getElementXML", &CParameterMgr::getElementXMLCommandProcess, 1, "<elem path>",
247*c33452fbSAndroid Build Coastguard Worker "Get settings of element at given path in XML format"},
248*c33452fbSAndroid Build Coastguard Worker {"setElementXML", &CParameterMgr::setElementXMLCommandProcess, 2, "<elem path> <values>",
249*c33452fbSAndroid Build Coastguard Worker "Set settings of element at given path in XML format"},
250*c33452fbSAndroid Build Coastguard Worker {"dumpElement", &CParameterMgr::dumpElementCommandProcess, 1, "<elem path>",
251*c33452fbSAndroid Build Coastguard Worker "Dump structure and content of element at given path"},
252*c33452fbSAndroid Build Coastguard Worker {"getElementSize", &CParameterMgr::getElementSizeCommandProcess, 1, "<elem path>",
253*c33452fbSAndroid Build Coastguard Worker "Show size of element at given path"},
254*c33452fbSAndroid Build Coastguard Worker {"showProperties", &CParameterMgr::showPropertiesCommandProcess, 1, "<elem path>",
255*c33452fbSAndroid Build Coastguard Worker "Show properties of element at given path"},
256*c33452fbSAndroid Build Coastguard Worker {"getParameter", &CParameterMgr::getParameterCommandProcess, 1, "<param path>",
257*c33452fbSAndroid Build Coastguard Worker "Get value for parameter at given path"},
258*c33452fbSAndroid Build Coastguard Worker {"setParameter", &CParameterMgr::setParameterCommandProcess, 2, "<param path> <value>",
259*c33452fbSAndroid Build Coastguard Worker "Set value for parameter at given path"},
260*c33452fbSAndroid Build Coastguard Worker {"listBelongingDomains", &CParameterMgr::listBelongingDomainsCommandProcess, 1, "<elem path>",
261*c33452fbSAndroid Build Coastguard Worker "List domain(s) element at given path belongs to"},
262*c33452fbSAndroid Build Coastguard Worker {"listAssociatedDomains", &CParameterMgr::listAssociatedDomainsCommandProcess, 1, "<elem path>",
263*c33452fbSAndroid Build Coastguard Worker "List domain(s) element at given path is associated to"},
264*c33452fbSAndroid Build Coastguard Worker {"getConfigurationParameter", &CParameterMgr::getConfigurationParameterCommandProcess, 3,
265*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration> <param path>",
266*c33452fbSAndroid Build Coastguard Worker "Get value for parameter at given path from configuration"},
267*c33452fbSAndroid Build Coastguard Worker {"setConfigurationParameter", &CParameterMgr::setConfigurationParameterCommandProcess, 4,
268*c33452fbSAndroid Build Coastguard Worker "<domain> <configuration> <param path> <value>",
269*c33452fbSAndroid Build Coastguard Worker "Set value for parameter at given path to configuration"},
270*c33452fbSAndroid Build Coastguard Worker {"showMapping", &CParameterMgr::showMappingCommandProcess, 1, "<elem path>",
271*c33452fbSAndroid Build Coastguard Worker "Show mapping for an element at given path"},
272*c33452fbSAndroid Build Coastguard Worker
273*c33452fbSAndroid Build Coastguard Worker /// Browse
274*c33452fbSAndroid Build Coastguard Worker {"listAssociatedElements", &CParameterMgr::listAssociatedElementsCommandProcess, 0, "",
275*c33452fbSAndroid Build Coastguard Worker "List element sub-trees associated to at least one configurable domain"},
276*c33452fbSAndroid Build Coastguard Worker {"listConflictingElements", &CParameterMgr::listConflictingElementsCommandProcess, 0, "",
277*c33452fbSAndroid Build Coastguard Worker "List element sub-trees contained in more than one configurable domain"},
278*c33452fbSAndroid Build Coastguard Worker {"listRogueElements", &CParameterMgr::listRogueElementsCommandProcess, 0, "",
279*c33452fbSAndroid Build Coastguard Worker "List element sub-trees owned by no configurable domain"},
280*c33452fbSAndroid Build Coastguard Worker
281*c33452fbSAndroid Build Coastguard Worker /// Settings Import/Export
282*c33452fbSAndroid Build Coastguard Worker {"exportDomainsXML", &CParameterMgr::exportDomainsXMLCommandProcess, 1, "<file path> ",
283*c33452fbSAndroid Build Coastguard Worker "Export domains to an XML file (provide an absolute path or relative"
284*c33452fbSAndroid Build Coastguard Worker "to the client's working directory)"},
285*c33452fbSAndroid Build Coastguard Worker {"importDomainsXML", &CParameterMgr::importDomainsXMLCommandProcess, 1, "<file path>",
286*c33452fbSAndroid Build Coastguard Worker "Import domains from an XML file (provide an absolute path or relative"
287*c33452fbSAndroid Build Coastguard Worker "to the client's working directory)"},
288*c33452fbSAndroid Build Coastguard Worker {"exportDomainsWithSettingsXML", &CParameterMgr::exportDomainsWithSettingsXMLCommandProcess, 1,
289*c33452fbSAndroid Build Coastguard Worker "<file path> ",
290*c33452fbSAndroid Build Coastguard Worker "Export domains including settings to XML file (provide an absolute path or relative"
291*c33452fbSAndroid Build Coastguard Worker "to the client's working directory)"},
292*c33452fbSAndroid Build Coastguard Worker {"exportDomainWithSettingsXML", &CParameterMgr::exportDomainWithSettingsXMLCommandProcess, 2,
293*c33452fbSAndroid Build Coastguard Worker "<domain> <file path> ", "Export a single given domain including settings to XML file"
294*c33452fbSAndroid Build Coastguard Worker " (provide an absolute path or relative to the client's"
295*c33452fbSAndroid Build Coastguard Worker " working directory)"},
296*c33452fbSAndroid Build Coastguard Worker {"importDomainsWithSettingsXML", &CParameterMgr::importDomainsWithSettingsXMLCommandProcess, 1,
297*c33452fbSAndroid Build Coastguard Worker "<file path>",
298*c33452fbSAndroid Build Coastguard Worker "Import domains including settings from XML file (provide an absolute path or relative"
299*c33452fbSAndroid Build Coastguard Worker "to the client's working directory)"},
300*c33452fbSAndroid Build Coastguard Worker {"importDomainWithSettingsXML", &CParameterMgr::importDomainWithSettingsXMLCommandProcess, 1,
301*c33452fbSAndroid Build Coastguard Worker "<file path> [overwrite]",
302*c33452fbSAndroid Build Coastguard Worker "Import a single domain including settings from XML file."
303*c33452fbSAndroid Build Coastguard Worker " Does not overwrite an existing domain unless 'overwrite' is passed as second"
304*c33452fbSAndroid Build Coastguard Worker " argument. Provide an absolute path or relative to the client's working directory)"},
305*c33452fbSAndroid Build Coastguard Worker {"getDomainsWithSettingsXML", &CParameterMgr::getDomainsWithSettingsXMLCommandProcess, 0, "",
306*c33452fbSAndroid Build Coastguard Worker "Print domains including settings as XML"},
307*c33452fbSAndroid Build Coastguard Worker {"getDomainWithSettingsXML", &CParameterMgr::getDomainWithSettingsXMLCommandProcess, 1,
308*c33452fbSAndroid Build Coastguard Worker "<domain>", "Print the given domain including settings as XML"},
309*c33452fbSAndroid Build Coastguard Worker {"setDomainsWithSettingsXML", &CParameterMgr::setDomainsWithSettingsXMLCommandProcess, 1,
310*c33452fbSAndroid Build Coastguard Worker "<xml configurable domains>", "Import domains including settings from XML string"},
311*c33452fbSAndroid Build Coastguard Worker {"setDomainWithSettingsXML", &CParameterMgr::setDomainWithSettingsXMLCommandProcess, 1,
312*c33452fbSAndroid Build Coastguard Worker "<xml configurable domain> [overwrite]",
313*c33452fbSAndroid Build Coastguard Worker "Import domains including settings from XML"
314*c33452fbSAndroid Build Coastguard Worker " string. Does not overwrite an existing domain unless 'overwrite' is passed as second"
315*c33452fbSAndroid Build Coastguard Worker " argument"},
316*c33452fbSAndroid Build Coastguard Worker /// Structure Export
317*c33452fbSAndroid Build Coastguard Worker {"getSystemClassXML", &CParameterMgr::getSystemClassXMLCommandProcess, 0, "",
318*c33452fbSAndroid Build Coastguard Worker "Print parameter structure as XML"},
319*c33452fbSAndroid Build Coastguard Worker /// Deprecated Commands
320*c33452fbSAndroid Build Coastguard Worker {"getDomainsXML", &CParameterMgr::getDomainsWithSettingsXMLCommandProcess, 0, "",
321*c33452fbSAndroid Build Coastguard Worker "DEPRECATED COMMAND, please use getDomainsWithSettingsXML"},
322*c33452fbSAndroid Build Coastguard Worker
323*c33452fbSAndroid Build Coastguard Worker };
324*c33452fbSAndroid Build Coastguard Worker
325*c33452fbSAndroid Build Coastguard Worker // Remote command parsers array Size
CParameterMgr(const string & strConfigurationFilePath,log::ILogger & logger)326*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CParameterMgr(const string &strConfigurationFilePath, log::ILogger &logger)
327*c33452fbSAndroid Build Coastguard Worker : _pMainParameterBlackboard(new CParameterBlackboard),
328*c33452fbSAndroid Build Coastguard Worker _pElementLibrarySet(new CElementLibrarySet),
329*c33452fbSAndroid Build Coastguard Worker _xmlConfigurationUri(CXmlDocSource::mkUri(strConfigurationFilePath, "")), _logger(logger)
330*c33452fbSAndroid Build Coastguard Worker {
331*c33452fbSAndroid Build Coastguard Worker // Deal with children
332*c33452fbSAndroid Build Coastguard Worker addChild(new CParameterFrameworkConfiguration);
333*c33452fbSAndroid Build Coastguard Worker addChild(new CSelectionCriteria);
334*c33452fbSAndroid Build Coastguard Worker addChild(new CSystemClass(_logger));
335*c33452fbSAndroid Build Coastguard Worker addChild(new CConfigurableDomains);
336*c33452fbSAndroid Build Coastguard Worker }
337*c33452fbSAndroid Build Coastguard Worker
~CParameterMgr()338*c33452fbSAndroid Build Coastguard Worker CParameterMgr::~CParameterMgr()
339*c33452fbSAndroid Build Coastguard Worker {
340*c33452fbSAndroid Build Coastguard Worker // Children
341*c33452fbSAndroid Build Coastguard Worker delete _pRemoteProcessorServer;
342*c33452fbSAndroid Build Coastguard Worker delete _pMainParameterBlackboard;
343*c33452fbSAndroid Build Coastguard Worker delete _pElementLibrarySet;
344*c33452fbSAndroid Build Coastguard Worker }
345*c33452fbSAndroid Build Coastguard Worker
getKind() const346*c33452fbSAndroid Build Coastguard Worker string CParameterMgr::getKind() const
347*c33452fbSAndroid Build Coastguard Worker {
348*c33452fbSAndroid Build Coastguard Worker return "ParameterMgr";
349*c33452fbSAndroid Build Coastguard Worker }
350*c33452fbSAndroid Build Coastguard Worker
351*c33452fbSAndroid Build Coastguard Worker // Version
getVersion() const352*c33452fbSAndroid Build Coastguard Worker string CParameterMgr::getVersion() const
353*c33452fbSAndroid Build Coastguard Worker {
354*c33452fbSAndroid Build Coastguard Worker return PARAMETER_FRAMEWORK_VERSION;
355*c33452fbSAndroid Build Coastguard Worker }
356*c33452fbSAndroid Build Coastguard Worker
load(string & strError)357*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::load(string &strError)
358*c33452fbSAndroid Build Coastguard Worker {
359*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Loading");
360*c33452fbSAndroid Build Coastguard Worker
361*c33452fbSAndroid Build Coastguard Worker feedElementLibraries();
362*c33452fbSAndroid Build Coastguard Worker
363*c33452fbSAndroid Build Coastguard Worker // Load Framework configuration
364*c33452fbSAndroid Build Coastguard Worker if (!loadFrameworkConfiguration(strError)) {
365*c33452fbSAndroid Build Coastguard Worker
366*c33452fbSAndroid Build Coastguard Worker return false;
367*c33452fbSAndroid Build Coastguard Worker }
368*c33452fbSAndroid Build Coastguard Worker
369*c33452fbSAndroid Build Coastguard Worker if (!loadSubsystems(strError)) {
370*c33452fbSAndroid Build Coastguard Worker
371*c33452fbSAndroid Build Coastguard Worker return false;
372*c33452fbSAndroid Build Coastguard Worker }
373*c33452fbSAndroid Build Coastguard Worker
374*c33452fbSAndroid Build Coastguard Worker // Load structure
375*c33452fbSAndroid Build Coastguard Worker if (!loadStructure(strError)) {
376*c33452fbSAndroid Build Coastguard Worker
377*c33452fbSAndroid Build Coastguard Worker return false;
378*c33452fbSAndroid Build Coastguard Worker }
379*c33452fbSAndroid Build Coastguard Worker
380*c33452fbSAndroid Build Coastguard Worker // Load settings
381*c33452fbSAndroid Build Coastguard Worker if (!loadSettings(strError)) {
382*c33452fbSAndroid Build Coastguard Worker
383*c33452fbSAndroid Build Coastguard Worker return false;
384*c33452fbSAndroid Build Coastguard Worker }
385*c33452fbSAndroid Build Coastguard Worker
386*c33452fbSAndroid Build Coastguard Worker // Init flow of element tree
387*c33452fbSAndroid Build Coastguard Worker if (!init(strError)) {
388*c33452fbSAndroid Build Coastguard Worker
389*c33452fbSAndroid Build Coastguard Worker return false;
390*c33452fbSAndroid Build Coastguard Worker }
391*c33452fbSAndroid Build Coastguard Worker
392*c33452fbSAndroid Build Coastguard Worker {
393*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Main blackboard back synchronization");
394*c33452fbSAndroid Build Coastguard Worker
395*c33452fbSAndroid Build Coastguard Worker // Back synchronization for areas in parameter blackboard not covered by any domain
396*c33452fbSAndroid Build Coastguard Worker BackSynchronizer(getConstSystemClass(), _pMainParameterBlackboard).sync();
397*c33452fbSAndroid Build Coastguard Worker }
398*c33452fbSAndroid Build Coastguard Worker
399*c33452fbSAndroid Build Coastguard Worker // We're done loading the settings and back synchronizing
400*c33452fbSAndroid Build Coastguard Worker CConfigurableDomains *pConfigurableDomains = getConfigurableDomains();
401*c33452fbSAndroid Build Coastguard Worker
402*c33452fbSAndroid Build Coastguard Worker // We need to ensure all domains are valid
403*c33452fbSAndroid Build Coastguard Worker pConfigurableDomains->validate(_pMainParameterBlackboard);
404*c33452fbSAndroid Build Coastguard Worker
405*c33452fbSAndroid Build Coastguard Worker // Log selection criterion states
406*c33452fbSAndroid Build Coastguard Worker {
407*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Criterion states");
408*c33452fbSAndroid Build Coastguard Worker
409*c33452fbSAndroid Build Coastguard Worker const CSelectionCriteria *selectionCriteria = getConstSelectionCriteria();
410*c33452fbSAndroid Build Coastguard Worker
411*c33452fbSAndroid Build Coastguard Worker list<string> criteria;
412*c33452fbSAndroid Build Coastguard Worker selectionCriteria->listSelectionCriteria(criteria, true, false);
413*c33452fbSAndroid Build Coastguard Worker
414*c33452fbSAndroid Build Coastguard Worker info() << criteria;
415*c33452fbSAndroid Build Coastguard Worker }
416*c33452fbSAndroid Build Coastguard Worker
417*c33452fbSAndroid Build Coastguard Worker // Subsystem can not ask for resync as they have not been synced yet
418*c33452fbSAndroid Build Coastguard Worker getSystemClass()->cleanSubsystemsNeedToResync();
419*c33452fbSAndroid Build Coastguard Worker
420*c33452fbSAndroid Build Coastguard Worker // At initialization, check subsystems that need resync
421*c33452fbSAndroid Build Coastguard Worker doApplyConfigurations(true);
422*c33452fbSAndroid Build Coastguard Worker
423*c33452fbSAndroid Build Coastguard Worker // Start remote processor server if appropriate
424*c33452fbSAndroid Build Coastguard Worker return handleRemoteProcessingInterface(strError);
425*c33452fbSAndroid Build Coastguard Worker }
426*c33452fbSAndroid Build Coastguard Worker
loadFrameworkConfiguration(string & strError)427*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::loadFrameworkConfiguration(string &strError)
428*c33452fbSAndroid Build Coastguard Worker {
429*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Loading framework configuration");
430*c33452fbSAndroid Build Coastguard Worker
431*c33452fbSAndroid Build Coastguard Worker // Parse Structure XML file
432*c33452fbSAndroid Build Coastguard Worker CXmlElementSerializingContext elementSerializingContext(strError);
433*c33452fbSAndroid Build Coastguard Worker
434*c33452fbSAndroid Build Coastguard Worker _xmlDoc *doc =
435*c33452fbSAndroid Build Coastguard Worker CXmlDocSource::mkXmlDoc(_xmlConfigurationUri, true, true, elementSerializingContext);
436*c33452fbSAndroid Build Coastguard Worker if (doc == nullptr) {
437*c33452fbSAndroid Build Coastguard Worker return false;
438*c33452fbSAndroid Build Coastguard Worker }
439*c33452fbSAndroid Build Coastguard Worker
440*c33452fbSAndroid Build Coastguard Worker if (!xmlParse(elementSerializingContext, getFrameworkConfiguration(), doc, _xmlConfigurationUri,
441*c33452fbSAndroid Build Coastguard Worker EFrameworkConfigurationLibrary)) {
442*c33452fbSAndroid Build Coastguard Worker
443*c33452fbSAndroid Build Coastguard Worker return false;
444*c33452fbSAndroid Build Coastguard Worker }
445*c33452fbSAndroid Build Coastguard Worker // Set class name to system class and configurable domains
446*c33452fbSAndroid Build Coastguard Worker getSystemClass()->setName(getConstFrameworkConfiguration()->getSystemClassName());
447*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->setName(getConstFrameworkConfiguration()->getSystemClassName());
448*c33452fbSAndroid Build Coastguard Worker
449*c33452fbSAndroid Build Coastguard Worker // Get subsystem plugins elements
450*c33452fbSAndroid Build Coastguard Worker _pSubsystemPlugins = static_cast<const CSubsystemPlugins *>(
451*c33452fbSAndroid Build Coastguard Worker getConstFrameworkConfiguration()->findChild("SubsystemPlugins"));
452*c33452fbSAndroid Build Coastguard Worker
453*c33452fbSAndroid Build Coastguard Worker if (!_pSubsystemPlugins) {
454*c33452fbSAndroid Build Coastguard Worker
455*c33452fbSAndroid Build Coastguard Worker strError = "Parameter Framework Configuration: couldn't find SubsystemPlugins element";
456*c33452fbSAndroid Build Coastguard Worker
457*c33452fbSAndroid Build Coastguard Worker return false;
458*c33452fbSAndroid Build Coastguard Worker }
459*c33452fbSAndroid Build Coastguard Worker
460*c33452fbSAndroid Build Coastguard Worker // Log tuning availability
461*c33452fbSAndroid Build Coastguard Worker info() << "Tuning "
462*c33452fbSAndroid Build Coastguard Worker << (getConstFrameworkConfiguration()->isTuningAllowed() ? "allowed" : "prohibited");
463*c33452fbSAndroid Build Coastguard Worker
464*c33452fbSAndroid Build Coastguard Worker return true;
465*c33452fbSAndroid Build Coastguard Worker }
466*c33452fbSAndroid Build Coastguard Worker
loadSubsystems(std::string & error)467*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::loadSubsystems(std::string &error)
468*c33452fbSAndroid Build Coastguard Worker {
469*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Loading subsystem plugins");
470*c33452fbSAndroid Build Coastguard Worker
471*c33452fbSAndroid Build Coastguard Worker // Load subsystems
472*c33452fbSAndroid Build Coastguard Worker bool isSuccess =
473*c33452fbSAndroid Build Coastguard Worker getSystemClass()->loadSubsystems(error, _pSubsystemPlugins, !_bFailOnMissingSubsystem);
474*c33452fbSAndroid Build Coastguard Worker
475*c33452fbSAndroid Build Coastguard Worker if (isSuccess) {
476*c33452fbSAndroid Build Coastguard Worker info() << "All subsystem plugins successfully loaded";
477*c33452fbSAndroid Build Coastguard Worker
478*c33452fbSAndroid Build Coastguard Worker if (!error.empty()) {
479*c33452fbSAndroid Build Coastguard Worker // Log missing subsystems as info
480*c33452fbSAndroid Build Coastguard Worker info() << error;
481*c33452fbSAndroid Build Coastguard Worker }
482*c33452fbSAndroid Build Coastguard Worker } else {
483*c33452fbSAndroid Build Coastguard Worker warning() << error;
484*c33452fbSAndroid Build Coastguard Worker }
485*c33452fbSAndroid Build Coastguard Worker return isSuccess;
486*c33452fbSAndroid Build Coastguard Worker }
487*c33452fbSAndroid Build Coastguard Worker
loadStructure(string & strError)488*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::loadStructure(string &strError)
489*c33452fbSAndroid Build Coastguard Worker {
490*c33452fbSAndroid Build Coastguard Worker // Retrieve system to load structure to
491*c33452fbSAndroid Build Coastguard Worker CSystemClass *pSystemClass = getSystemClass();
492*c33452fbSAndroid Build Coastguard Worker
493*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Loading " + pSystemClass->getName() + " system class structure");
494*c33452fbSAndroid Build Coastguard Worker
495*c33452fbSAndroid Build Coastguard Worker // Get structure description element
496*c33452fbSAndroid Build Coastguard Worker const CFrameworkConfigurationLocation *pStructureDescriptionFileLocation =
497*c33452fbSAndroid Build Coastguard Worker static_cast<const CFrameworkConfigurationLocation *>(
498*c33452fbSAndroid Build Coastguard Worker getConstFrameworkConfiguration()->findChildOfKind("StructureDescriptionFileLocation"));
499*c33452fbSAndroid Build Coastguard Worker
500*c33452fbSAndroid Build Coastguard Worker if (!pStructureDescriptionFileLocation) {
501*c33452fbSAndroid Build Coastguard Worker
502*c33452fbSAndroid Build Coastguard Worker strError = "No StructureDescriptionFileLocation element found for SystemClass " +
503*c33452fbSAndroid Build Coastguard Worker pSystemClass->getName();
504*c33452fbSAndroid Build Coastguard Worker
505*c33452fbSAndroid Build Coastguard Worker return false;
506*c33452fbSAndroid Build Coastguard Worker }
507*c33452fbSAndroid Build Coastguard Worker
508*c33452fbSAndroid Build Coastguard Worker // Parse Structure XML file
509*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext accessContext(strError);
510*c33452fbSAndroid Build Coastguard Worker CXmlParameterSerializingContext parameterBuildContext(accessContext, strError);
511*c33452fbSAndroid Build Coastguard Worker
512*c33452fbSAndroid Build Coastguard Worker {
513*c33452fbSAndroid Build Coastguard Worker // Get structure URI
514*c33452fbSAndroid Build Coastguard Worker string structureUri =
515*c33452fbSAndroid Build Coastguard Worker CXmlDocSource::mkUri(_xmlConfigurationUri, pStructureDescriptionFileLocation->getUri());
516*c33452fbSAndroid Build Coastguard Worker
517*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Importing system structure from file " + structureUri);
518*c33452fbSAndroid Build Coastguard Worker
519*c33452fbSAndroid Build Coastguard Worker _xmlDoc *doc = CXmlDocSource::mkXmlDoc(structureUri, true, true, parameterBuildContext);
520*c33452fbSAndroid Build Coastguard Worker if (doc == nullptr) {
521*c33452fbSAndroid Build Coastguard Worker return false;
522*c33452fbSAndroid Build Coastguard Worker }
523*c33452fbSAndroid Build Coastguard Worker
524*c33452fbSAndroid Build Coastguard Worker if (!xmlParse(parameterBuildContext, pSystemClass, doc, structureUri,
525*c33452fbSAndroid Build Coastguard Worker EParameterCreationLibrary)) {
526*c33452fbSAndroid Build Coastguard Worker
527*c33452fbSAndroid Build Coastguard Worker return false;
528*c33452fbSAndroid Build Coastguard Worker }
529*c33452fbSAndroid Build Coastguard Worker }
530*c33452fbSAndroid Build Coastguard Worker
531*c33452fbSAndroid Build Coastguard Worker // Initialize offsets
532*c33452fbSAndroid Build Coastguard Worker pSystemClass->setOffset(0);
533*c33452fbSAndroid Build Coastguard Worker
534*c33452fbSAndroid Build Coastguard Worker // Initialize main blackboard's size
535*c33452fbSAndroid Build Coastguard Worker _pMainParameterBlackboard->setSize(pSystemClass->getFootPrint());
536*c33452fbSAndroid Build Coastguard Worker
537*c33452fbSAndroid Build Coastguard Worker return true;
538*c33452fbSAndroid Build Coastguard Worker }
539*c33452fbSAndroid Build Coastguard Worker
loadSettings(string & strError)540*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::loadSettings(string &strError)
541*c33452fbSAndroid Build Coastguard Worker {
542*c33452fbSAndroid Build Coastguard Worker string strLoadError;
543*c33452fbSAndroid Build Coastguard Worker bool success = loadSettingsFromConfigFile(strLoadError);
544*c33452fbSAndroid Build Coastguard Worker
545*c33452fbSAndroid Build Coastguard Worker if (!success && !_bFailOnFailedSettingsLoad) {
546*c33452fbSAndroid Build Coastguard Worker // Load can not fail, ie continue but log the load errors
547*c33452fbSAndroid Build Coastguard Worker warning() << strLoadError;
548*c33452fbSAndroid Build Coastguard Worker warning() << "Failed to load settings, continue without domains.";
549*c33452fbSAndroid Build Coastguard Worker success = true;
550*c33452fbSAndroid Build Coastguard Worker }
551*c33452fbSAndroid Build Coastguard Worker
552*c33452fbSAndroid Build Coastguard Worker if (!success) {
553*c33452fbSAndroid Build Coastguard Worker // Propagate the litteral error only if the function fails
554*c33452fbSAndroid Build Coastguard Worker strError = strLoadError;
555*c33452fbSAndroid Build Coastguard Worker return false;
556*c33452fbSAndroid Build Coastguard Worker }
557*c33452fbSAndroid Build Coastguard Worker
558*c33452fbSAndroid Build Coastguard Worker return true;
559*c33452fbSAndroid Build Coastguard Worker }
560*c33452fbSAndroid Build Coastguard Worker
loadSettingsFromConfigFile(string & strError)561*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::loadSettingsFromConfigFile(string &strError)
562*c33452fbSAndroid Build Coastguard Worker {
563*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Loading settings");
564*c33452fbSAndroid Build Coastguard Worker
565*c33452fbSAndroid Build Coastguard Worker // Get settings configuration element
566*c33452fbSAndroid Build Coastguard Worker const CFrameworkConfigurationGroup *pParameterConfigurationGroup =
567*c33452fbSAndroid Build Coastguard Worker static_cast<const CFrameworkConfigurationGroup *>(
568*c33452fbSAndroid Build Coastguard Worker getConstFrameworkConfiguration()->findChildOfKind("SettingsConfiguration"));
569*c33452fbSAndroid Build Coastguard Worker
570*c33452fbSAndroid Build Coastguard Worker if (!pParameterConfigurationGroup) {
571*c33452fbSAndroid Build Coastguard Worker
572*c33452fbSAndroid Build Coastguard Worker // No settings to load
573*c33452fbSAndroid Build Coastguard Worker
574*c33452fbSAndroid Build Coastguard Worker return true;
575*c33452fbSAndroid Build Coastguard Worker }
576*c33452fbSAndroid Build Coastguard Worker
577*c33452fbSAndroid Build Coastguard Worker // Get configurable domains element
578*c33452fbSAndroid Build Coastguard Worker const CFrameworkConfigurationLocation *pConfigurableDomainsFileLocation =
579*c33452fbSAndroid Build Coastguard Worker static_cast<const CFrameworkConfigurationLocation *>(
580*c33452fbSAndroid Build Coastguard Worker pParameterConfigurationGroup->findChildOfKind("ConfigurableDomainsFileLocation"));
581*c33452fbSAndroid Build Coastguard Worker
582*c33452fbSAndroid Build Coastguard Worker if (!pConfigurableDomainsFileLocation) {
583*c33452fbSAndroid Build Coastguard Worker
584*c33452fbSAndroid Build Coastguard Worker strError = "No ConfigurableDomainsFileLocation element found for SystemClass " +
585*c33452fbSAndroid Build Coastguard Worker getSystemClass()->getName();
586*c33452fbSAndroid Build Coastguard Worker
587*c33452fbSAndroid Build Coastguard Worker return false;
588*c33452fbSAndroid Build Coastguard Worker }
589*c33452fbSAndroid Build Coastguard Worker // Get destination root element
590*c33452fbSAndroid Build Coastguard Worker CConfigurableDomains *pConfigurableDomains = getConfigurableDomains();
591*c33452fbSAndroid Build Coastguard Worker
592*c33452fbSAndroid Build Coastguard Worker // Get Xml configuration domains URI
593*c33452fbSAndroid Build Coastguard Worker string configurationDomainsUri =
594*c33452fbSAndroid Build Coastguard Worker CXmlDocSource::mkUri(_xmlConfigurationUri, pConfigurableDomainsFileLocation->getUri());
595*c33452fbSAndroid Build Coastguard Worker
596*c33452fbSAndroid Build Coastguard Worker // Parse configuration domains XML file
597*c33452fbSAndroid Build Coastguard Worker CXmlDomainImportContext xmlDomainImportContext(strError, true, *getSystemClass());
598*c33452fbSAndroid Build Coastguard Worker
599*c33452fbSAndroid Build Coastguard Worker // Selection criteria definition for rule creation
600*c33452fbSAndroid Build Coastguard Worker xmlDomainImportContext.setSelectionCriteriaDefinition(
601*c33452fbSAndroid Build Coastguard Worker getConstSelectionCriteria()->getSelectionCriteriaDefinition());
602*c33452fbSAndroid Build Coastguard Worker
603*c33452fbSAndroid Build Coastguard Worker // Auto validation of configurations
604*c33452fbSAndroid Build Coastguard Worker xmlDomainImportContext.setAutoValidationRequired(true);
605*c33452fbSAndroid Build Coastguard Worker
606*c33452fbSAndroid Build Coastguard Worker info() << "Importing configurable domains from file " << configurationDomainsUri
607*c33452fbSAndroid Build Coastguard Worker << " with settings";
608*c33452fbSAndroid Build Coastguard Worker
609*c33452fbSAndroid Build Coastguard Worker _xmlDoc *doc =
610*c33452fbSAndroid Build Coastguard Worker CXmlDocSource::mkXmlDoc(configurationDomainsUri, true, true, xmlDomainImportContext);
611*c33452fbSAndroid Build Coastguard Worker if (doc == nullptr) {
612*c33452fbSAndroid Build Coastguard Worker return false;
613*c33452fbSAndroid Build Coastguard Worker }
614*c33452fbSAndroid Build Coastguard Worker
615*c33452fbSAndroid Build Coastguard Worker return xmlParse(xmlDomainImportContext, pConfigurableDomains, doc, _xmlConfigurationUri,
616*c33452fbSAndroid Build Coastguard Worker EParameterConfigurationLibrary, true, "SystemClassName");
617*c33452fbSAndroid Build Coastguard Worker }
618*c33452fbSAndroid Build Coastguard Worker
619*c33452fbSAndroid Build Coastguard Worker // XML parsing
xmlParse(CXmlElementSerializingContext & elementSerializingContext,CElement * pRootElement,_xmlDoc * doc,const string & baseUri,CParameterMgr::ElementLibrary eElementLibrary,bool replace,const string & strNameAttributeName)620*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::xmlParse(CXmlElementSerializingContext &elementSerializingContext,
621*c33452fbSAndroid Build Coastguard Worker CElement *pRootElement, _xmlDoc *doc, const string &baseUri,
622*c33452fbSAndroid Build Coastguard Worker CParameterMgr::ElementLibrary eElementLibrary, bool replace,
623*c33452fbSAndroid Build Coastguard Worker const string &strNameAttributeName)
624*c33452fbSAndroid Build Coastguard Worker {
625*c33452fbSAndroid Build Coastguard Worker // Init serializing context
626*c33452fbSAndroid Build Coastguard Worker elementSerializingContext.set(_pElementLibrarySet->getElementLibrary(eElementLibrary), baseUri);
627*c33452fbSAndroid Build Coastguard Worker
628*c33452fbSAndroid Build Coastguard Worker CXmlDocSource docSource(doc, _bValidateSchemasOnStart, pRootElement->getXmlElementName(),
629*c33452fbSAndroid Build Coastguard Worker pRootElement->getName(), strNameAttributeName);
630*c33452fbSAndroid Build Coastguard Worker
631*c33452fbSAndroid Build Coastguard Worker docSource.setSchemaBaseUri(getSchemaUri());
632*c33452fbSAndroid Build Coastguard Worker
633*c33452fbSAndroid Build Coastguard Worker // Start clean
634*c33452fbSAndroid Build Coastguard Worker auto clean = [replace, &pRootElement] {
635*c33452fbSAndroid Build Coastguard Worker if (replace) {
636*c33452fbSAndroid Build Coastguard Worker pRootElement->clean();
637*c33452fbSAndroid Build Coastguard Worker }
638*c33452fbSAndroid Build Coastguard Worker };
639*c33452fbSAndroid Build Coastguard Worker clean();
640*c33452fbSAndroid Build Coastguard Worker
641*c33452fbSAndroid Build Coastguard Worker CXmlMemoryDocSink memorySink(pRootElement);
642*c33452fbSAndroid Build Coastguard Worker
643*c33452fbSAndroid Build Coastguard Worker if (!memorySink.process(docSource, elementSerializingContext)) {
644*c33452fbSAndroid Build Coastguard Worker clean();
645*c33452fbSAndroid Build Coastguard Worker return false;
646*c33452fbSAndroid Build Coastguard Worker }
647*c33452fbSAndroid Build Coastguard Worker
648*c33452fbSAndroid Build Coastguard Worker return true;
649*c33452fbSAndroid Build Coastguard Worker }
650*c33452fbSAndroid Build Coastguard Worker
651*c33452fbSAndroid Build Coastguard Worker // Init
init(string & strError)652*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::init(string &strError)
653*c33452fbSAndroid Build Coastguard Worker {
654*c33452fbSAndroid Build Coastguard Worker return base::init(strError);
655*c33452fbSAndroid Build Coastguard Worker }
656*c33452fbSAndroid Build Coastguard Worker
657*c33452fbSAndroid Build Coastguard Worker // Selection criteria interface
createSelectionCriterionType(bool bIsInclusive)658*c33452fbSAndroid Build Coastguard Worker CSelectionCriterionType *CParameterMgr::createSelectionCriterionType(bool bIsInclusive)
659*c33452fbSAndroid Build Coastguard Worker {
660*c33452fbSAndroid Build Coastguard Worker // Propagate
661*c33452fbSAndroid Build Coastguard Worker return getSelectionCriteria()->createSelectionCriterionType(bIsInclusive);
662*c33452fbSAndroid Build Coastguard Worker }
663*c33452fbSAndroid Build Coastguard Worker
createSelectionCriterion(const string & strName,const CSelectionCriterionType * pSelectionCriterionType)664*c33452fbSAndroid Build Coastguard Worker CSelectionCriterion *CParameterMgr::createSelectionCriterion(
665*c33452fbSAndroid Build Coastguard Worker const string &strName, const CSelectionCriterionType *pSelectionCriterionType)
666*c33452fbSAndroid Build Coastguard Worker {
667*c33452fbSAndroid Build Coastguard Worker // Propagate
668*c33452fbSAndroid Build Coastguard Worker return getSelectionCriteria()->createSelectionCriterion(strName, pSelectionCriterionType,
669*c33452fbSAndroid Build Coastguard Worker _logger);
670*c33452fbSAndroid Build Coastguard Worker }
671*c33452fbSAndroid Build Coastguard Worker
672*c33452fbSAndroid Build Coastguard Worker // Selection criterion retrieval
getSelectionCriterion(const string & strName)673*c33452fbSAndroid Build Coastguard Worker CSelectionCriterion *CParameterMgr::getSelectionCriterion(const string &strName)
674*c33452fbSAndroid Build Coastguard Worker {
675*c33452fbSAndroid Build Coastguard Worker // Propagate
676*c33452fbSAndroid Build Coastguard Worker return getSelectionCriteria()->getSelectionCriterion(strName);
677*c33452fbSAndroid Build Coastguard Worker }
678*c33452fbSAndroid Build Coastguard Worker
679*c33452fbSAndroid Build Coastguard Worker // Configuration application
applyConfigurations()680*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::applyConfigurations()
681*c33452fbSAndroid Build Coastguard Worker {
682*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Configuration application request");
683*c33452fbSAndroid Build Coastguard Worker
684*c33452fbSAndroid Build Coastguard Worker // Lock state
685*c33452fbSAndroid Build Coastguard Worker lock_guard<mutex> autoLock(getBlackboardMutex());
686*c33452fbSAndroid Build Coastguard Worker
687*c33452fbSAndroid Build Coastguard Worker if (!_bTuningModeIsOn) {
688*c33452fbSAndroid Build Coastguard Worker
689*c33452fbSAndroid Build Coastguard Worker // Apply configuration(s)
690*c33452fbSAndroid Build Coastguard Worker doApplyConfigurations(false);
691*c33452fbSAndroid Build Coastguard Worker } else {
692*c33452fbSAndroid Build Coastguard Worker
693*c33452fbSAndroid Build Coastguard Worker warning() << "Configurations were not applied because the TuningMode is on";
694*c33452fbSAndroid Build Coastguard Worker }
695*c33452fbSAndroid Build Coastguard Worker }
696*c33452fbSAndroid Build Coastguard Worker
getConfigurableElement(const string & strPath,string & strError) const697*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *CParameterMgr::getConfigurableElement(const string &strPath,
698*c33452fbSAndroid Build Coastguard Worker string &strError) const
699*c33452fbSAndroid Build Coastguard Worker {
700*c33452fbSAndroid Build Coastguard Worker CPathNavigator pathNavigator(strPath);
701*c33452fbSAndroid Build Coastguard Worker
702*c33452fbSAndroid Build Coastguard Worker // Nagivate through system class
703*c33452fbSAndroid Build Coastguard Worker if (!pathNavigator.navigateThrough(getConstSystemClass()->getName(), strError)) {
704*c33452fbSAndroid Build Coastguard Worker
705*c33452fbSAndroid Build Coastguard Worker return nullptr;
706*c33452fbSAndroid Build Coastguard Worker }
707*c33452fbSAndroid Build Coastguard Worker
708*c33452fbSAndroid Build Coastguard Worker // Find element
709*c33452fbSAndroid Build Coastguard Worker const CElement *pElement = getConstSystemClass()->findDescendant(pathNavigator);
710*c33452fbSAndroid Build Coastguard Worker
711*c33452fbSAndroid Build Coastguard Worker if (!pElement) {
712*c33452fbSAndroid Build Coastguard Worker
713*c33452fbSAndroid Build Coastguard Worker strError = "Path not found: " + strPath;
714*c33452fbSAndroid Build Coastguard Worker
715*c33452fbSAndroid Build Coastguard Worker return nullptr;
716*c33452fbSAndroid Build Coastguard Worker }
717*c33452fbSAndroid Build Coastguard Worker
718*c33452fbSAndroid Build Coastguard Worker // Check found element is a parameter
719*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
720*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pElement);
721*c33452fbSAndroid Build Coastguard Worker
722*c33452fbSAndroid Build Coastguard Worker return pConfigurableElement;
723*c33452fbSAndroid Build Coastguard Worker }
724*c33452fbSAndroid Build Coastguard Worker
getConfigurableElement(const string & strPath,string & strError)725*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *CParameterMgr::getConfigurableElement(const string &strPath, string &strError)
726*c33452fbSAndroid Build Coastguard Worker {
727*c33452fbSAndroid Build Coastguard Worker // Implement the mutable version by calling the const one and removing
728*c33452fbSAndroid Build Coastguard Worker // the const from the result.
729*c33452fbSAndroid Build Coastguard Worker const auto *constThis = this;
730*c33452fbSAndroid Build Coastguard Worker return const_cast<CConfigurableElement *>(constThis->getConfigurableElement(strPath, strError));
731*c33452fbSAndroid Build Coastguard Worker }
732*c33452fbSAndroid Build Coastguard Worker
733*c33452fbSAndroid Build Coastguard Worker // Dynamic parameter handling
createParameterHandle(const string & strPath,string & strError)734*c33452fbSAndroid Build Coastguard Worker CParameterHandle *CParameterMgr::createParameterHandle(const string &strPath, string &strError)
735*c33452fbSAndroid Build Coastguard Worker {
736*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *pConfigurableElement = getConfigurableElement(strPath, strError);
737*c33452fbSAndroid Build Coastguard Worker
738*c33452fbSAndroid Build Coastguard Worker if (!pConfigurableElement) {
739*c33452fbSAndroid Build Coastguard Worker
740*c33452fbSAndroid Build Coastguard Worker // Element not found
741*c33452fbSAndroid Build Coastguard Worker strError = "Element not found: " + strPath;
742*c33452fbSAndroid Build Coastguard Worker return nullptr;
743*c33452fbSAndroid Build Coastguard Worker }
744*c33452fbSAndroid Build Coastguard Worker
745*c33452fbSAndroid Build Coastguard Worker if (!pConfigurableElement->isParameter()) {
746*c33452fbSAndroid Build Coastguard Worker
747*c33452fbSAndroid Build Coastguard Worker // Element is not parameter
748*c33452fbSAndroid Build Coastguard Worker strError = "Not a parameter: " + strPath;
749*c33452fbSAndroid Build Coastguard Worker
750*c33452fbSAndroid Build Coastguard Worker return nullptr;
751*c33452fbSAndroid Build Coastguard Worker }
752*c33452fbSAndroid Build Coastguard Worker
753*c33452fbSAndroid Build Coastguard Worker // Convert as parameter and return new handle
754*c33452fbSAndroid Build Coastguard Worker return new CParameterHandle(static_cast<CBaseParameter &>(*pConfigurableElement), *this);
755*c33452fbSAndroid Build Coastguard Worker }
756*c33452fbSAndroid Build Coastguard Worker
757*c33452fbSAndroid Build Coastguard Worker // Dynamic element handling
createElementHandle(const std::string & path,std::string & error)758*c33452fbSAndroid Build Coastguard Worker ElementHandle *CParameterMgr::createElementHandle(const std::string &path, std::string &error)
759*c33452fbSAndroid Build Coastguard Worker {
760*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *pConfigurableElement;
761*c33452fbSAndroid Build Coastguard Worker
762*c33452fbSAndroid Build Coastguard Worker if (path == "/") {
763*c33452fbSAndroid Build Coastguard Worker // Attempt to access root configurable element
764*c33452fbSAndroid Build Coastguard Worker pConfigurableElement = getSystemClass();
765*c33452fbSAndroid Build Coastguard Worker } else {
766*c33452fbSAndroid Build Coastguard Worker pConfigurableElement = getConfigurableElement(path, error);
767*c33452fbSAndroid Build Coastguard Worker }
768*c33452fbSAndroid Build Coastguard Worker
769*c33452fbSAndroid Build Coastguard Worker if (!pConfigurableElement) {
770*c33452fbSAndroid Build Coastguard Worker
771*c33452fbSAndroid Build Coastguard Worker // Element not found
772*c33452fbSAndroid Build Coastguard Worker error = "Element not found: " + path;
773*c33452fbSAndroid Build Coastguard Worker return nullptr;
774*c33452fbSAndroid Build Coastguard Worker }
775*c33452fbSAndroid Build Coastguard Worker
776*c33452fbSAndroid Build Coastguard Worker // The only reason why a heap object is returned instead of retuning by copy
777*c33452fbSAndroid Build Coastguard Worker // is to inform the client of a failure through a nullptr.
778*c33452fbSAndroid Build Coastguard Worker // It could be avoided (return by copy) with an
779*c33452fbSAndroid Build Coastguard Worker // - optional equivalent (see boost::optional or std::experimental::optional)
780*c33452fbSAndroid Build Coastguard Worker // - exception (but the api is noexcept)
781*c33452fbSAndroid Build Coastguard Worker return new ElementHandle(*pConfigurableElement, *this);
782*c33452fbSAndroid Build Coastguard Worker }
783*c33452fbSAndroid Build Coastguard Worker
getSettingsAsBytes(const CConfigurableElement & element,std::vector<uint8_t> & settings) const784*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::getSettingsAsBytes(const CConfigurableElement &element,
785*c33452fbSAndroid Build Coastguard Worker std::vector<uint8_t> &settings) const
786*c33452fbSAndroid Build Coastguard Worker {
787*c33452fbSAndroid Build Coastguard Worker // Not useful as the get can not fail,
788*c33452fbSAndroid Build Coastguard Worker // but the current design forces all serialization and deserialization to
789*c33452fbSAndroid Build Coastguard Worker // have an error out string
790*c33452fbSAndroid Build Coastguard Worker std::string error;
791*c33452fbSAndroid Build Coastguard Worker
792*c33452fbSAndroid Build Coastguard Worker // Prepare parameter access context for main blackboard.
793*c33452fbSAndroid Build Coastguard Worker // No need to handle output raw format and value space as Byte arrays are hexa formatted
794*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext parameterAccessContext(error);
795*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setParameterBlackboard(_pMainParameterBlackboard);
796*c33452fbSAndroid Build Coastguard Worker
797*c33452fbSAndroid Build Coastguard Worker // Get the settings
798*c33452fbSAndroid Build Coastguard Worker element.getSettingsAsBytes(settings, parameterAccessContext);
799*c33452fbSAndroid Build Coastguard Worker }
800*c33452fbSAndroid Build Coastguard Worker
setSettingsAsBytes(const CConfigurableElement & element,const std::vector<uint8_t> & settings,std::string & error)801*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setSettingsAsBytes(const CConfigurableElement &element,
802*c33452fbSAndroid Build Coastguard Worker const std::vector<uint8_t> &settings, std::string &error)
803*c33452fbSAndroid Build Coastguard Worker {
804*c33452fbSAndroid Build Coastguard Worker // Prepare parameter access context for main blackboard.
805*c33452fbSAndroid Build Coastguard Worker // Notes:
806*c33452fbSAndroid Build Coastguard Worker // - No need to handle output raw format and value space as Byte arrays are interpreted as
807*c33452fbSAndroid Build Coastguard Worker // raw formatted
808*c33452fbSAndroid Build Coastguard Worker // - No check is done as to the intgrity of the input data.
809*c33452fbSAndroid Build Coastguard Worker // This may lead to undetected out of range value assignment.
810*c33452fbSAndroid Build Coastguard Worker // Use this functionality with caution
811*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext parameterAccessContext(error);
812*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setParameterBlackboard(_pMainParameterBlackboard);
813*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setAutoSync(autoSyncOn());
814*c33452fbSAndroid Build Coastguard Worker
815*c33452fbSAndroid Build Coastguard Worker // Set the settings
816*c33452fbSAndroid Build Coastguard Worker return element.setSettingsAsBytes(settings, parameterAccessContext);
817*c33452fbSAndroid Build Coastguard Worker }
818*c33452fbSAndroid Build Coastguard Worker
setFailureOnMissingSubsystem(bool bFail)819*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setFailureOnMissingSubsystem(bool bFail)
820*c33452fbSAndroid Build Coastguard Worker {
821*c33452fbSAndroid Build Coastguard Worker _bFailOnMissingSubsystem = bFail;
822*c33452fbSAndroid Build Coastguard Worker }
823*c33452fbSAndroid Build Coastguard Worker
getFailureOnMissingSubsystem() const824*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getFailureOnMissingSubsystem() const
825*c33452fbSAndroid Build Coastguard Worker {
826*c33452fbSAndroid Build Coastguard Worker return _bFailOnMissingSubsystem;
827*c33452fbSAndroid Build Coastguard Worker }
828*c33452fbSAndroid Build Coastguard Worker
setFailureOnFailedSettingsLoad(bool bFail)829*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setFailureOnFailedSettingsLoad(bool bFail)
830*c33452fbSAndroid Build Coastguard Worker {
831*c33452fbSAndroid Build Coastguard Worker _bFailOnFailedSettingsLoad = bFail;
832*c33452fbSAndroid Build Coastguard Worker }
833*c33452fbSAndroid Build Coastguard Worker
getFailureOnFailedSettingsLoad() const834*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getFailureOnFailedSettingsLoad() const
835*c33452fbSAndroid Build Coastguard Worker {
836*c33452fbSAndroid Build Coastguard Worker return _bFailOnFailedSettingsLoad;
837*c33452fbSAndroid Build Coastguard Worker }
838*c33452fbSAndroid Build Coastguard Worker
getSchemaUri() const839*c33452fbSAndroid Build Coastguard Worker const string &CParameterMgr::getSchemaUri() const
840*c33452fbSAndroid Build Coastguard Worker {
841*c33452fbSAndroid Build Coastguard Worker return _schemaUri;
842*c33452fbSAndroid Build Coastguard Worker }
843*c33452fbSAndroid Build Coastguard Worker
setSchemaUri(const string & schemaUri)844*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setSchemaUri(const string &schemaUri)
845*c33452fbSAndroid Build Coastguard Worker {
846*c33452fbSAndroid Build Coastguard Worker _schemaUri = schemaUri;
847*c33452fbSAndroid Build Coastguard Worker }
848*c33452fbSAndroid Build Coastguard Worker
setValidateSchemasOnStart(bool bValidate)849*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setValidateSchemasOnStart(bool bValidate)
850*c33452fbSAndroid Build Coastguard Worker {
851*c33452fbSAndroid Build Coastguard Worker _bValidateSchemasOnStart = bValidate;
852*c33452fbSAndroid Build Coastguard Worker }
853*c33452fbSAndroid Build Coastguard Worker
getValidateSchemasOnStart() const854*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getValidateSchemasOnStart() const
855*c33452fbSAndroid Build Coastguard Worker {
856*c33452fbSAndroid Build Coastguard Worker return _bValidateSchemasOnStart;
857*c33452fbSAndroid Build Coastguard Worker }
858*c33452fbSAndroid Build Coastguard Worker
859*c33452fbSAndroid Build Coastguard Worker /////////////////// Remote command parsers
860*c33452fbSAndroid Build Coastguard Worker /// Version
versionCommandProcess(const IRemoteCommand &,string & strResult)861*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::versionCommandProcess(
862*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
863*c33452fbSAndroid Build Coastguard Worker {
864*c33452fbSAndroid Build Coastguard Worker // Show version
865*c33452fbSAndroid Build Coastguard Worker strResult = getVersion();
866*c33452fbSAndroid Build Coastguard Worker
867*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
868*c33452fbSAndroid Build Coastguard Worker }
869*c33452fbSAndroid Build Coastguard Worker
870*c33452fbSAndroid Build Coastguard Worker /// Status
statusCommandProcess(const IRemoteCommand &,string & strResult)871*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::statusCommandProcess(
872*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
873*c33452fbSAndroid Build Coastguard Worker {
874*c33452fbSAndroid Build Coastguard Worker // System class
875*c33452fbSAndroid Build Coastguard Worker const CSystemClass *pSystemClass = getSystemClass();
876*c33452fbSAndroid Build Coastguard Worker
877*c33452fbSAndroid Build Coastguard Worker // Show status
878*c33452fbSAndroid Build Coastguard Worker /// General section
879*c33452fbSAndroid Build Coastguard Worker utility::appendTitle(strResult, "General:");
880*c33452fbSAndroid Build Coastguard Worker // System class
881*c33452fbSAndroid Build Coastguard Worker strResult += "System Class: ";
882*c33452fbSAndroid Build Coastguard Worker strResult += pSystemClass->getName();
883*c33452fbSAndroid Build Coastguard Worker strResult += "\n";
884*c33452fbSAndroid Build Coastguard Worker
885*c33452fbSAndroid Build Coastguard Worker // Tuning mode
886*c33452fbSAndroid Build Coastguard Worker strResult += "Tuning Mode: ";
887*c33452fbSAndroid Build Coastguard Worker strResult += tuningModeOn() ? "on" : "off";
888*c33452fbSAndroid Build Coastguard Worker strResult += "\n";
889*c33452fbSAndroid Build Coastguard Worker
890*c33452fbSAndroid Build Coastguard Worker // Value space
891*c33452fbSAndroid Build Coastguard Worker strResult += "Value Space: ";
892*c33452fbSAndroid Build Coastguard Worker strResult += valueSpaceIsRaw() ? "raw" : "real";
893*c33452fbSAndroid Build Coastguard Worker strResult += "\n";
894*c33452fbSAndroid Build Coastguard Worker
895*c33452fbSAndroid Build Coastguard Worker // Output raw format
896*c33452fbSAndroid Build Coastguard Worker strResult += "Output Raw Format: ";
897*c33452fbSAndroid Build Coastguard Worker strResult += outputRawFormatIsHex() ? "hex" : "dec";
898*c33452fbSAndroid Build Coastguard Worker strResult += "\n";
899*c33452fbSAndroid Build Coastguard Worker
900*c33452fbSAndroid Build Coastguard Worker // Auto Sync
901*c33452fbSAndroid Build Coastguard Worker strResult += "Auto Sync: ";
902*c33452fbSAndroid Build Coastguard Worker strResult += autoSyncOn() ? "on" : "off";
903*c33452fbSAndroid Build Coastguard Worker strResult += "\n";
904*c33452fbSAndroid Build Coastguard Worker
905*c33452fbSAndroid Build Coastguard Worker /// Subsystem list
906*c33452fbSAndroid Build Coastguard Worker utility::appendTitle(strResult, "Subsystems:");
907*c33452fbSAndroid Build Coastguard Worker string strSubsystemList;
908*c33452fbSAndroid Build Coastguard Worker pSystemClass->listChildrenPaths(strSubsystemList);
909*c33452fbSAndroid Build Coastguard Worker strResult += strSubsystemList;
910*c33452fbSAndroid Build Coastguard Worker
911*c33452fbSAndroid Build Coastguard Worker /// Last applied configurations
912*c33452fbSAndroid Build Coastguard Worker utility::appendTitle(strResult, "Last Applied [Pending] Configurations:");
913*c33452fbSAndroid Build Coastguard Worker string strLastAppliedConfigurations;
914*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->listLastAppliedConfigurations(strLastAppliedConfigurations);
915*c33452fbSAndroid Build Coastguard Worker strResult += strLastAppliedConfigurations;
916*c33452fbSAndroid Build Coastguard Worker
917*c33452fbSAndroid Build Coastguard Worker /// Criteria states
918*c33452fbSAndroid Build Coastguard Worker utility::appendTitle(strResult, "Selection Criteria:");
919*c33452fbSAndroid Build Coastguard Worker list<string> lstrSelectionCriteria;
920*c33452fbSAndroid Build Coastguard Worker getSelectionCriteria()->listSelectionCriteria(lstrSelectionCriteria, false, true);
921*c33452fbSAndroid Build Coastguard Worker // Concatenate the criterion list as the command result
922*c33452fbSAndroid Build Coastguard Worker strResult += utility::asString(lstrSelectionCriteria);
923*c33452fbSAndroid Build Coastguard Worker
924*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
925*c33452fbSAndroid Build Coastguard Worker }
926*c33452fbSAndroid Build Coastguard Worker
927*c33452fbSAndroid Build Coastguard Worker /// Tuning Mode
setTuningModeCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)928*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setTuningModeCommandProcess(
929*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
930*c33452fbSAndroid Build Coastguard Worker {
931*c33452fbSAndroid Build Coastguard Worker // Tuning allowed? Check done only when trying to access from python command bindings.
932*c33452fbSAndroid Build Coastguard Worker if (!getConstFrameworkConfiguration()->isTuningAllowed()) {
933*c33452fbSAndroid Build Coastguard Worker
934*c33452fbSAndroid Build Coastguard Worker strResult = "Tuning prohibited";
935*c33452fbSAndroid Build Coastguard Worker
936*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
937*c33452fbSAndroid Build Coastguard Worker }
938*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(0) == "on") {
939*c33452fbSAndroid Build Coastguard Worker
940*c33452fbSAndroid Build Coastguard Worker if (setTuningMode(true, strResult)) {
941*c33452fbSAndroid Build Coastguard Worker
942*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
943*c33452fbSAndroid Build Coastguard Worker }
944*c33452fbSAndroid Build Coastguard Worker } else if (remoteCommand.getArgument(0) == "off") {
945*c33452fbSAndroid Build Coastguard Worker
946*c33452fbSAndroid Build Coastguard Worker if (setTuningMode(false, strResult)) {
947*c33452fbSAndroid Build Coastguard Worker
948*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
949*c33452fbSAndroid Build Coastguard Worker }
950*c33452fbSAndroid Build Coastguard Worker } else {
951*c33452fbSAndroid Build Coastguard Worker // Show usage
952*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
953*c33452fbSAndroid Build Coastguard Worker }
954*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
955*c33452fbSAndroid Build Coastguard Worker }
956*c33452fbSAndroid Build Coastguard Worker
getTuningModeCommandProcess(const IRemoteCommand &,string & strResult)957*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getTuningModeCommandProcess(
958*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
959*c33452fbSAndroid Build Coastguard Worker {
960*c33452fbSAndroid Build Coastguard Worker strResult = tuningModeOn() ? "on" : "off";
961*c33452fbSAndroid Build Coastguard Worker
962*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
963*c33452fbSAndroid Build Coastguard Worker }
964*c33452fbSAndroid Build Coastguard Worker
965*c33452fbSAndroid Build Coastguard Worker /// Value Space
setValueSpaceCommandProcess(const IRemoteCommand & remoteCommand,string &)966*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setValueSpaceCommandProcess(
967*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string & /*strResult*/)
968*c33452fbSAndroid Build Coastguard Worker {
969*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(0) == "raw") {
970*c33452fbSAndroid Build Coastguard Worker
971*c33452fbSAndroid Build Coastguard Worker setValueSpace(true);
972*c33452fbSAndroid Build Coastguard Worker
973*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
974*c33452fbSAndroid Build Coastguard Worker
975*c33452fbSAndroid Build Coastguard Worker } else if (remoteCommand.getArgument(0) == "real") {
976*c33452fbSAndroid Build Coastguard Worker
977*c33452fbSAndroid Build Coastguard Worker setValueSpace(false);
978*c33452fbSAndroid Build Coastguard Worker
979*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
980*c33452fbSAndroid Build Coastguard Worker
981*c33452fbSAndroid Build Coastguard Worker } else {
982*c33452fbSAndroid Build Coastguard Worker // Show usage
983*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
984*c33452fbSAndroid Build Coastguard Worker }
985*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
986*c33452fbSAndroid Build Coastguard Worker }
987*c33452fbSAndroid Build Coastguard Worker
getValueSpaceCommandProcess(const IRemoteCommand &,string & strResult)988*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getValueSpaceCommandProcess(
989*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
990*c33452fbSAndroid Build Coastguard Worker {
991*c33452fbSAndroid Build Coastguard Worker strResult = valueSpaceIsRaw() ? "raw" : "real";
992*c33452fbSAndroid Build Coastguard Worker
993*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
994*c33452fbSAndroid Build Coastguard Worker }
995*c33452fbSAndroid Build Coastguard Worker
996*c33452fbSAndroid Build Coastguard Worker /// Output Raw Format
setOutputRawFormatCommandProcess(const IRemoteCommand & remoteCommand,string &)997*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setOutputRawFormatCommandProcess(
998*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string & /*strResult*/)
999*c33452fbSAndroid Build Coastguard Worker {
1000*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(0) == "hex") {
1001*c33452fbSAndroid Build Coastguard Worker
1002*c33452fbSAndroid Build Coastguard Worker setOutputRawFormat(true);
1003*c33452fbSAndroid Build Coastguard Worker
1004*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1005*c33452fbSAndroid Build Coastguard Worker
1006*c33452fbSAndroid Build Coastguard Worker } else if (remoteCommand.getArgument(0) == "dec") {
1007*c33452fbSAndroid Build Coastguard Worker
1008*c33452fbSAndroid Build Coastguard Worker setOutputRawFormat(false);
1009*c33452fbSAndroid Build Coastguard Worker
1010*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1011*c33452fbSAndroid Build Coastguard Worker
1012*c33452fbSAndroid Build Coastguard Worker } else {
1013*c33452fbSAndroid Build Coastguard Worker // Show usage
1014*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1015*c33452fbSAndroid Build Coastguard Worker }
1016*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1017*c33452fbSAndroid Build Coastguard Worker }
1018*c33452fbSAndroid Build Coastguard Worker
getOutputRawFormatCommandProcess(const IRemoteCommand &,string & strResult)1019*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getOutputRawFormatCommandProcess(
1020*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1021*c33452fbSAndroid Build Coastguard Worker {
1022*c33452fbSAndroid Build Coastguard Worker strResult = outputRawFormatIsHex() ? "hex" : "dec";
1023*c33452fbSAndroid Build Coastguard Worker
1024*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1025*c33452fbSAndroid Build Coastguard Worker }
1026*c33452fbSAndroid Build Coastguard Worker
1027*c33452fbSAndroid Build Coastguard Worker /// Sync
setAutoSyncCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1028*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setAutoSyncCommandProcess(
1029*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1030*c33452fbSAndroid Build Coastguard Worker {
1031*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(0) == "on") {
1032*c33452fbSAndroid Build Coastguard Worker
1033*c33452fbSAndroid Build Coastguard Worker if (setAutoSync(true, strResult)) {
1034*c33452fbSAndroid Build Coastguard Worker
1035*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1036*c33452fbSAndroid Build Coastguard Worker }
1037*c33452fbSAndroid Build Coastguard Worker } else if (remoteCommand.getArgument(0) == "off") {
1038*c33452fbSAndroid Build Coastguard Worker
1039*c33452fbSAndroid Build Coastguard Worker if (setAutoSync(false, strResult)) {
1040*c33452fbSAndroid Build Coastguard Worker
1041*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1042*c33452fbSAndroid Build Coastguard Worker }
1043*c33452fbSAndroid Build Coastguard Worker } else {
1044*c33452fbSAndroid Build Coastguard Worker // Show usage
1045*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1046*c33452fbSAndroid Build Coastguard Worker }
1047*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1048*c33452fbSAndroid Build Coastguard Worker }
1049*c33452fbSAndroid Build Coastguard Worker
getAutoSyncCommandProcess(const IRemoteCommand &,string & strResult)1050*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getAutoSyncCommandProcess(
1051*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1052*c33452fbSAndroid Build Coastguard Worker {
1053*c33452fbSAndroid Build Coastguard Worker strResult = autoSyncOn() ? "on" : "off";
1054*c33452fbSAndroid Build Coastguard Worker
1055*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1056*c33452fbSAndroid Build Coastguard Worker }
1057*c33452fbSAndroid Build Coastguard Worker
syncCommandProcess(const IRemoteCommand &,string & strResult)1058*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::syncCommandProcess(
1059*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &, string &strResult)
1060*c33452fbSAndroid Build Coastguard Worker {
1061*c33452fbSAndroid Build Coastguard Worker return sync(strResult) ? CCommandHandler::EDone : CCommandHandler::EFailed;
1062*c33452fbSAndroid Build Coastguard Worker }
1063*c33452fbSAndroid Build Coastguard Worker
1064*c33452fbSAndroid Build Coastguard Worker /// Criteria
listCriteriaCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1065*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listCriteriaCommandProcess(
1066*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1067*c33452fbSAndroid Build Coastguard Worker {
1068*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgumentCount() > 1) {
1069*c33452fbSAndroid Build Coastguard Worker
1070*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1071*c33452fbSAndroid Build Coastguard Worker }
1072*c33452fbSAndroid Build Coastguard Worker
1073*c33452fbSAndroid Build Coastguard Worker string strOutputFormat;
1074*c33452fbSAndroid Build Coastguard Worker
1075*c33452fbSAndroid Build Coastguard Worker // Look for optional arguments
1076*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgumentCount() == 1) {
1077*c33452fbSAndroid Build Coastguard Worker
1078*c33452fbSAndroid Build Coastguard Worker // Get requested format
1079*c33452fbSAndroid Build Coastguard Worker strOutputFormat = remoteCommand.getArgument(0);
1080*c33452fbSAndroid Build Coastguard Worker
1081*c33452fbSAndroid Build Coastguard Worker // Capitalize
1082*c33452fbSAndroid Build Coastguard Worker std::transform(strOutputFormat.begin(), strOutputFormat.end(), strOutputFormat.begin(),
1083*c33452fbSAndroid Build Coastguard Worker ::toupper);
1084*c33452fbSAndroid Build Coastguard Worker
1085*c33452fbSAndroid Build Coastguard Worker if (strOutputFormat != "XML" && strOutputFormat != "CSV") {
1086*c33452fbSAndroid Build Coastguard Worker
1087*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1088*c33452fbSAndroid Build Coastguard Worker }
1089*c33452fbSAndroid Build Coastguard Worker }
1090*c33452fbSAndroid Build Coastguard Worker
1091*c33452fbSAndroid Build Coastguard Worker if (strOutputFormat == "XML") {
1092*c33452fbSAndroid Build Coastguard Worker // Get Root element where to export from
1093*c33452fbSAndroid Build Coastguard Worker const CSelectionCriteriaDefinition *pSelectionCriteriaDefinition =
1094*c33452fbSAndroid Build Coastguard Worker getConstSelectionCriteria()->getSelectionCriteriaDefinition();
1095*c33452fbSAndroid Build Coastguard Worker
1096*c33452fbSAndroid Build Coastguard Worker if (!exportElementToXMLString(pSelectionCriteriaDefinition, "SelectionCriteria",
1097*c33452fbSAndroid Build Coastguard Worker CXmlSerializingContext{strResult}, strResult)) {
1098*c33452fbSAndroid Build Coastguard Worker
1099*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1100*c33452fbSAndroid Build Coastguard Worker }
1101*c33452fbSAndroid Build Coastguard Worker
1102*c33452fbSAndroid Build Coastguard Worker // Succeeded
1103*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1104*c33452fbSAndroid Build Coastguard Worker } else {
1105*c33452fbSAndroid Build Coastguard Worker
1106*c33452fbSAndroid Build Coastguard Worker // Requested format will be either CSV or human readable based on strOutputFormat content
1107*c33452fbSAndroid Build Coastguard Worker bool bHumanReadable = strOutputFormat.empty();
1108*c33452fbSAndroid Build Coastguard Worker
1109*c33452fbSAndroid Build Coastguard Worker list<string> lstrResult;
1110*c33452fbSAndroid Build Coastguard Worker getSelectionCriteria()->listSelectionCriteria(lstrResult, true, bHumanReadable);
1111*c33452fbSAndroid Build Coastguard Worker
1112*c33452fbSAndroid Build Coastguard Worker // Concatenate the criterion list as the command result
1113*c33452fbSAndroid Build Coastguard Worker strResult += utility::asString(lstrResult);
1114*c33452fbSAndroid Build Coastguard Worker
1115*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1116*c33452fbSAndroid Build Coastguard Worker }
1117*c33452fbSAndroid Build Coastguard Worker }
1118*c33452fbSAndroid Build Coastguard Worker
1119*c33452fbSAndroid Build Coastguard Worker /// Domains
listDomainsCommandProcess(const IRemoteCommand &,string & strResult)1120*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listDomainsCommandProcess(
1121*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1122*c33452fbSAndroid Build Coastguard Worker {
1123*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->listDomains(strResult);
1124*c33452fbSAndroid Build Coastguard Worker
1125*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1126*c33452fbSAndroid Build Coastguard Worker }
1127*c33452fbSAndroid Build Coastguard Worker
createDomainCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1128*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::createDomainCommandProcess(
1129*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1130*c33452fbSAndroid Build Coastguard Worker {
1131*c33452fbSAndroid Build Coastguard Worker return createDomain(remoteCommand.getArgument(0), strResult) ? CCommandHandler::EDone
1132*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1133*c33452fbSAndroid Build Coastguard Worker }
1134*c33452fbSAndroid Build Coastguard Worker
deleteDomainCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1135*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::deleteDomainCommandProcess(
1136*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1137*c33452fbSAndroid Build Coastguard Worker {
1138*c33452fbSAndroid Build Coastguard Worker return deleteDomain(remoteCommand.getArgument(0), strResult) ? CCommandHandler::EDone
1139*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1140*c33452fbSAndroid Build Coastguard Worker }
1141*c33452fbSAndroid Build Coastguard Worker
deleteAllDomainsCommandProcess(const IRemoteCommand &,string & strResult)1142*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::deleteAllDomainsCommandProcess(
1143*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1144*c33452fbSAndroid Build Coastguard Worker {
1145*c33452fbSAndroid Build Coastguard Worker return deleteAllDomains(strResult) ? CCommandHandler::EDone : CCommandHandler::EFailed;
1146*c33452fbSAndroid Build Coastguard Worker }
1147*c33452fbSAndroid Build Coastguard Worker
renameDomainCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1148*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::renameDomainCommandProcess(
1149*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1150*c33452fbSAndroid Build Coastguard Worker {
1151*c33452fbSAndroid Build Coastguard Worker return renameDomain(remoteCommand.getArgument(0), remoteCommand.getArgument(1), strResult)
1152*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1153*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1154*c33452fbSAndroid Build Coastguard Worker }
1155*c33452fbSAndroid Build Coastguard Worker
setSequenceAwarenessCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1156*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setSequenceAwarenessCommandProcess(
1157*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1158*c33452fbSAndroid Build Coastguard Worker {
1159*c33452fbSAndroid Build Coastguard Worker // Set property
1160*c33452fbSAndroid Build Coastguard Worker bool bSequenceAware;
1161*c33452fbSAndroid Build Coastguard Worker
1162*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(1) == "true") {
1163*c33452fbSAndroid Build Coastguard Worker
1164*c33452fbSAndroid Build Coastguard Worker bSequenceAware = true;
1165*c33452fbSAndroid Build Coastguard Worker
1166*c33452fbSAndroid Build Coastguard Worker } else if (remoteCommand.getArgument(1) == "false") {
1167*c33452fbSAndroid Build Coastguard Worker
1168*c33452fbSAndroid Build Coastguard Worker bSequenceAware = false;
1169*c33452fbSAndroid Build Coastguard Worker
1170*c33452fbSAndroid Build Coastguard Worker } else {
1171*c33452fbSAndroid Build Coastguard Worker // Show usage
1172*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1173*c33452fbSAndroid Build Coastguard Worker }
1174*c33452fbSAndroid Build Coastguard Worker
1175*c33452fbSAndroid Build Coastguard Worker return setSequenceAwareness(remoteCommand.getArgument(0), bSequenceAware, strResult)
1176*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1177*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1178*c33452fbSAndroid Build Coastguard Worker }
1179*c33452fbSAndroid Build Coastguard Worker
getSequenceAwarenessCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1180*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getSequenceAwarenessCommandProcess(
1181*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1182*c33452fbSAndroid Build Coastguard Worker {
1183*c33452fbSAndroid Build Coastguard Worker // Get property
1184*c33452fbSAndroid Build Coastguard Worker bool bSequenceAware;
1185*c33452fbSAndroid Build Coastguard Worker
1186*c33452fbSAndroid Build Coastguard Worker if (!getSequenceAwareness(remoteCommand.getArgument(0), bSequenceAware, strResult)) {
1187*c33452fbSAndroid Build Coastguard Worker
1188*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1189*c33452fbSAndroid Build Coastguard Worker }
1190*c33452fbSAndroid Build Coastguard Worker
1191*c33452fbSAndroid Build Coastguard Worker strResult = bSequenceAware ? "true" : "false";
1192*c33452fbSAndroid Build Coastguard Worker
1193*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1194*c33452fbSAndroid Build Coastguard Worker }
1195*c33452fbSAndroid Build Coastguard Worker
listDomainElementsCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1196*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listDomainElementsCommandProcess(
1197*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1198*c33452fbSAndroid Build Coastguard Worker {
1199*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->listDomainElements(remoteCommand.getArgument(0), strResult)
1200*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::ESucceeded
1201*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1202*c33452fbSAndroid Build Coastguard Worker }
1203*c33452fbSAndroid Build Coastguard Worker
addElementCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1204*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::addElementCommandProcess(
1205*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1206*c33452fbSAndroid Build Coastguard Worker {
1207*c33452fbSAndroid Build Coastguard Worker return addConfigurableElementToDomain(remoteCommand.getArgument(0),
1208*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(1), strResult)
1209*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1210*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1211*c33452fbSAndroid Build Coastguard Worker }
1212*c33452fbSAndroid Build Coastguard Worker
removeElementCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1213*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::removeElementCommandProcess(
1214*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1215*c33452fbSAndroid Build Coastguard Worker {
1216*c33452fbSAndroid Build Coastguard Worker return removeConfigurableElementFromDomain(remoteCommand.getArgument(0),
1217*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(1), strResult)
1218*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1219*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1220*c33452fbSAndroid Build Coastguard Worker }
1221*c33452fbSAndroid Build Coastguard Worker
splitDomainCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1222*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::splitDomainCommandProcess(
1223*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1224*c33452fbSAndroid Build Coastguard Worker {
1225*c33452fbSAndroid Build Coastguard Worker return split(remoteCommand.getArgument(0), remoteCommand.getArgument(1), strResult)
1226*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1227*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1228*c33452fbSAndroid Build Coastguard Worker }
1229*c33452fbSAndroid Build Coastguard Worker
1230*c33452fbSAndroid Build Coastguard Worker /// Configurations
listConfigurationsCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1231*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listConfigurationsCommandProcess(
1232*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1233*c33452fbSAndroid Build Coastguard Worker {
1234*c33452fbSAndroid Build Coastguard Worker return getConstConfigurableDomains()->listConfigurations(remoteCommand.getArgument(0),
1235*c33452fbSAndroid Build Coastguard Worker strResult)
1236*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::ESucceeded
1237*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1238*c33452fbSAndroid Build Coastguard Worker }
1239*c33452fbSAndroid Build Coastguard Worker
dumpDomainsCommandProcess(const IRemoteCommand &,string & strResult)1240*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::dumpDomainsCommandProcess(
1241*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1242*c33452fbSAndroid Build Coastguard Worker {
1243*c33452fbSAndroid Build Coastguard Worker // Dummy error context
1244*c33452fbSAndroid Build Coastguard Worker string strError;
1245*c33452fbSAndroid Build Coastguard Worker utility::ErrorContext errorContext(strError);
1246*c33452fbSAndroid Build Coastguard Worker
1247*c33452fbSAndroid Build Coastguard Worker // Dump
1248*c33452fbSAndroid Build Coastguard Worker strResult = getConstConfigurableDomains()->dumpContent(errorContext);
1249*c33452fbSAndroid Build Coastguard Worker
1250*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1251*c33452fbSAndroid Build Coastguard Worker }
1252*c33452fbSAndroid Build Coastguard Worker
createConfigurationCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1253*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::createConfigurationCommandProcess(
1254*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1255*c33452fbSAndroid Build Coastguard Worker {
1256*c33452fbSAndroid Build Coastguard Worker return createConfiguration(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1257*c33452fbSAndroid Build Coastguard Worker strResult)
1258*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1259*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1260*c33452fbSAndroid Build Coastguard Worker }
1261*c33452fbSAndroid Build Coastguard Worker
deleteConfigurationCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1262*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::deleteConfigurationCommandProcess(
1263*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1264*c33452fbSAndroid Build Coastguard Worker {
1265*c33452fbSAndroid Build Coastguard Worker return deleteConfiguration(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1266*c33452fbSAndroid Build Coastguard Worker strResult)
1267*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1268*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1269*c33452fbSAndroid Build Coastguard Worker }
1270*c33452fbSAndroid Build Coastguard Worker
renameConfigurationCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1271*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::renameConfigurationCommandProcess(
1272*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1273*c33452fbSAndroid Build Coastguard Worker {
1274*c33452fbSAndroid Build Coastguard Worker return renameConfiguration(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1275*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(2), strResult)
1276*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1277*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1278*c33452fbSAndroid Build Coastguard Worker }
1279*c33452fbSAndroid Build Coastguard Worker
saveConfigurationCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1280*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::saveConfigurationCommandProcess(
1281*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1282*c33452fbSAndroid Build Coastguard Worker {
1283*c33452fbSAndroid Build Coastguard Worker return saveConfiguration(remoteCommand.getArgument(0), remoteCommand.getArgument(1), strResult)
1284*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1285*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1286*c33452fbSAndroid Build Coastguard Worker }
1287*c33452fbSAndroid Build Coastguard Worker
restoreConfigurationCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1288*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::restoreConfigurationCommandProcess(
1289*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1290*c33452fbSAndroid Build Coastguard Worker {
1291*c33452fbSAndroid Build Coastguard Worker core::Results result;
1292*c33452fbSAndroid Build Coastguard Worker if (!restoreConfiguration(remoteCommand.getArgument(0), remoteCommand.getArgument(1), result)) {
1293*c33452fbSAndroid Build Coastguard Worker // Concatenate the error list as the command result
1294*c33452fbSAndroid Build Coastguard Worker strResult = utility::asString(result);
1295*c33452fbSAndroid Build Coastguard Worker
1296*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1297*c33452fbSAndroid Build Coastguard Worker }
1298*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1299*c33452fbSAndroid Build Coastguard Worker }
1300*c33452fbSAndroid Build Coastguard Worker
setElementSequenceCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1301*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setElementSequenceCommandProcess(
1302*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1303*c33452fbSAndroid Build Coastguard Worker {
1304*c33452fbSAndroid Build Coastguard Worker // Build configurable element path list
1305*c33452fbSAndroid Build Coastguard Worker std::vector<string> astrNewElementSequence;
1306*c33452fbSAndroid Build Coastguard Worker
1307*c33452fbSAndroid Build Coastguard Worker for (size_t argument = 2; argument < remoteCommand.getArgumentCount(); argument++) {
1308*c33452fbSAndroid Build Coastguard Worker
1309*c33452fbSAndroid Build Coastguard Worker astrNewElementSequence.push_back(remoteCommand.getArgument(argument));
1310*c33452fbSAndroid Build Coastguard Worker }
1311*c33452fbSAndroid Build Coastguard Worker
1312*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
1313*c33452fbSAndroid Build Coastguard Worker return setElementSequence(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1314*c33452fbSAndroid Build Coastguard Worker astrNewElementSequence, strResult)
1315*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1316*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1317*c33452fbSAndroid Build Coastguard Worker }
1318*c33452fbSAndroid Build Coastguard Worker
getElementSequenceCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1319*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getElementSequenceCommandProcess(
1320*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1321*c33452fbSAndroid Build Coastguard Worker {
1322*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
1323*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->getElementSequence(remoteCommand.getArgument(0),
1324*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(1), strResult)
1325*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::ESucceeded
1326*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1327*c33452fbSAndroid Build Coastguard Worker }
1328*c33452fbSAndroid Build Coastguard Worker
setRuleCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1329*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setRuleCommandProcess(
1330*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1331*c33452fbSAndroid Build Coastguard Worker {
1332*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
1333*c33452fbSAndroid Build Coastguard Worker return setApplicationRule(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1334*c33452fbSAndroid Build Coastguard Worker remoteCommand.packArguments(2, remoteCommand.getArgumentCount() - 2),
1335*c33452fbSAndroid Build Coastguard Worker strResult)
1336*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1337*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1338*c33452fbSAndroid Build Coastguard Worker }
1339*c33452fbSAndroid Build Coastguard Worker
clearRuleCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1340*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::clearRuleCommandProcess(
1341*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1342*c33452fbSAndroid Build Coastguard Worker {
1343*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
1344*c33452fbSAndroid Build Coastguard Worker return clearApplicationRule(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1345*c33452fbSAndroid Build Coastguard Worker strResult)
1346*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1347*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1348*c33452fbSAndroid Build Coastguard Worker }
1349*c33452fbSAndroid Build Coastguard Worker
getRuleCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1350*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getRuleCommandProcess(
1351*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1352*c33452fbSAndroid Build Coastguard Worker {
1353*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
1354*c33452fbSAndroid Build Coastguard Worker return getApplicationRule(remoteCommand.getArgument(0), remoteCommand.getArgument(1), strResult)
1355*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::ESucceeded
1356*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1357*c33452fbSAndroid Build Coastguard Worker }
1358*c33452fbSAndroid Build Coastguard Worker
1359*c33452fbSAndroid Build Coastguard Worker /// Elements/Parameters
listElementsCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1360*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listElementsCommandProcess(
1361*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1362*c33452fbSAndroid Build Coastguard Worker {
1363*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass(), false);
1364*c33452fbSAndroid Build Coastguard Worker
1365*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1366*c33452fbSAndroid Build Coastguard Worker
1367*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1368*c33452fbSAndroid Build Coastguard Worker
1369*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1370*c33452fbSAndroid Build Coastguard Worker }
1371*c33452fbSAndroid Build Coastguard Worker
1372*c33452fbSAndroid Build Coastguard Worker if (!pLocatedElement) {
1373*c33452fbSAndroid Build Coastguard Worker
1374*c33452fbSAndroid Build Coastguard Worker // List from root folder
1375*c33452fbSAndroid Build Coastguard Worker
1376*c33452fbSAndroid Build Coastguard Worker // Return system class qualified name
1377*c33452fbSAndroid Build Coastguard Worker pLocatedElement = getSystemClass();
1378*c33452fbSAndroid Build Coastguard Worker }
1379*c33452fbSAndroid Build Coastguard Worker
1380*c33452fbSAndroid Build Coastguard Worker // Return sub-elements
1381*c33452fbSAndroid Build Coastguard Worker strResult += pLocatedElement->listQualifiedPaths(false);
1382*c33452fbSAndroid Build Coastguard Worker
1383*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1384*c33452fbSAndroid Build Coastguard Worker }
1385*c33452fbSAndroid Build Coastguard Worker
1386*c33452fbSAndroid Build Coastguard Worker /// Elements/Parameters
listParametersCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1387*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listParametersCommandProcess(
1388*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1389*c33452fbSAndroid Build Coastguard Worker {
1390*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass(), false);
1391*c33452fbSAndroid Build Coastguard Worker
1392*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1393*c33452fbSAndroid Build Coastguard Worker
1394*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1395*c33452fbSAndroid Build Coastguard Worker
1396*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1397*c33452fbSAndroid Build Coastguard Worker }
1398*c33452fbSAndroid Build Coastguard Worker
1399*c33452fbSAndroid Build Coastguard Worker if (!pLocatedElement) {
1400*c33452fbSAndroid Build Coastguard Worker
1401*c33452fbSAndroid Build Coastguard Worker // List from root folder
1402*c33452fbSAndroid Build Coastguard Worker
1403*c33452fbSAndroid Build Coastguard Worker // Return system class qualified name
1404*c33452fbSAndroid Build Coastguard Worker pLocatedElement = getSystemClass();
1405*c33452fbSAndroid Build Coastguard Worker }
1406*c33452fbSAndroid Build Coastguard Worker
1407*c33452fbSAndroid Build Coastguard Worker // Return sub-elements
1408*c33452fbSAndroid Build Coastguard Worker strResult += pLocatedElement->listQualifiedPaths(true);
1409*c33452fbSAndroid Build Coastguard Worker
1410*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1411*c33452fbSAndroid Build Coastguard Worker }
1412*c33452fbSAndroid Build Coastguard Worker
getElementStructureXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1413*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getElementStructureXMLCommandProcess(
1414*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1415*c33452fbSAndroid Build Coastguard Worker {
1416*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1417*c33452fbSAndroid Build Coastguard Worker
1418*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1419*c33452fbSAndroid Build Coastguard Worker
1420*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1421*c33452fbSAndroid Build Coastguard Worker
1422*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1423*c33452fbSAndroid Build Coastguard Worker }
1424*c33452fbSAndroid Build Coastguard Worker
1425*c33452fbSAndroid Build Coastguard Worker // Use default access context for structure export
1426*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext accessContext(strResult);
1427*c33452fbSAndroid Build Coastguard Worker if (!exportElementToXMLString(pLocatedElement, pLocatedElement->getXmlElementName(),
1428*c33452fbSAndroid Build Coastguard Worker CXmlParameterSerializingContext{accessContext, strResult},
1429*c33452fbSAndroid Build Coastguard Worker strResult)) {
1430*c33452fbSAndroid Build Coastguard Worker
1431*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1432*c33452fbSAndroid Build Coastguard Worker }
1433*c33452fbSAndroid Build Coastguard Worker
1434*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1435*c33452fbSAndroid Build Coastguard Worker }
1436*c33452fbSAndroid Build Coastguard Worker
getElementBytesCommandProcess(const IRemoteCommand & remoteCommand,std::string & strResult)1437*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getElementBytesCommandProcess(
1438*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, std::string &strResult)
1439*c33452fbSAndroid Build Coastguard Worker {
1440*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1441*c33452fbSAndroid Build Coastguard Worker
1442*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1443*c33452fbSAndroid Build Coastguard Worker
1444*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1445*c33452fbSAndroid Build Coastguard Worker
1446*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1447*c33452fbSAndroid Build Coastguard Worker }
1448*c33452fbSAndroid Build Coastguard Worker
1449*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1450*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(pLocatedElement);
1451*c33452fbSAndroid Build Coastguard Worker
1452*c33452fbSAndroid Build Coastguard Worker // Get the settings
1453*c33452fbSAndroid Build Coastguard Worker vector<uint8_t> bytes;
1454*c33452fbSAndroid Build Coastguard Worker getSettingsAsBytes(*pConfigurableElement, bytes);
1455*c33452fbSAndroid Build Coastguard Worker
1456*c33452fbSAndroid Build Coastguard Worker // Hexa formatting
1457*c33452fbSAndroid Build Coastguard Worker std::ostringstream ostream;
1458*c33452fbSAndroid Build Coastguard Worker ostream << std::hex << std::setfill('0');
1459*c33452fbSAndroid Build Coastguard Worker
1460*c33452fbSAndroid Build Coastguard Worker // Format bytes
1461*c33452fbSAndroid Build Coastguard Worker for (auto byte : bytes) {
1462*c33452fbSAndroid Build Coastguard Worker
1463*c33452fbSAndroid Build Coastguard Worker // Convert to an int in order to avoid the "char" overload that would
1464*c33452fbSAndroid Build Coastguard Worker // print characters instead of numbers.
1465*c33452fbSAndroid Build Coastguard Worker ostream << "0x" << std::setw(2) << int{byte} << " ";
1466*c33452fbSAndroid Build Coastguard Worker }
1467*c33452fbSAndroid Build Coastguard Worker
1468*c33452fbSAndroid Build Coastguard Worker strResult = ostream.str();
1469*c33452fbSAndroid Build Coastguard Worker if (not strResult.empty()) {
1470*c33452fbSAndroid Build Coastguard Worker // Remove the trailing space
1471*c33452fbSAndroid Build Coastguard Worker strResult.pop_back();
1472*c33452fbSAndroid Build Coastguard Worker }
1473*c33452fbSAndroid Build Coastguard Worker
1474*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1475*c33452fbSAndroid Build Coastguard Worker }
1476*c33452fbSAndroid Build Coastguard Worker
setElementBytesCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1477*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setElementBytesCommandProcess(
1478*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1479*c33452fbSAndroid Build Coastguard Worker {
1480*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
1481*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strResult)) {
1482*c33452fbSAndroid Build Coastguard Worker
1483*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1484*c33452fbSAndroid Build Coastguard Worker }
1485*c33452fbSAndroid Build Coastguard Worker
1486*c33452fbSAndroid Build Coastguard Worker // Retrieve configurable element
1487*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1488*c33452fbSAndroid Build Coastguard Worker
1489*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1490*c33452fbSAndroid Build Coastguard Worker
1491*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1492*c33452fbSAndroid Build Coastguard Worker
1493*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1494*c33452fbSAndroid Build Coastguard Worker }
1495*c33452fbSAndroid Build Coastguard Worker
1496*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1497*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(pLocatedElement);
1498*c33452fbSAndroid Build Coastguard Worker
1499*c33452fbSAndroid Build Coastguard Worker // Convert input data to binary
1500*c33452fbSAndroid Build Coastguard Worker vector<uint8_t> bytes;
1501*c33452fbSAndroid Build Coastguard Worker
1502*c33452fbSAndroid Build Coastguard Worker auto first = remoteCommand.getArguments().cbegin() + 1;
1503*c33452fbSAndroid Build Coastguard Worker auto last = remoteCommand.getArguments().cend();
1504*c33452fbSAndroid Build Coastguard Worker
1505*c33452fbSAndroid Build Coastguard Worker try {
1506*c33452fbSAndroid Build Coastguard Worker std::transform(first, last, begin(bytes), [](decltype(*first) input) {
1507*c33452fbSAndroid Build Coastguard Worker uint8_t byte;
1508*c33452fbSAndroid Build Coastguard Worker
1509*c33452fbSAndroid Build Coastguard Worker if (!convertTo(input, byte)) {
1510*c33452fbSAndroid Build Coastguard Worker throw std::domain_error("Some values out of byte range");
1511*c33452fbSAndroid Build Coastguard Worker }
1512*c33452fbSAndroid Build Coastguard Worker
1513*c33452fbSAndroid Build Coastguard Worker return byte;
1514*c33452fbSAndroid Build Coastguard Worker });
1515*c33452fbSAndroid Build Coastguard Worker } catch (const std::domain_error &e) {
1516*c33452fbSAndroid Build Coastguard Worker strResult = e.what();
1517*c33452fbSAndroid Build Coastguard Worker
1518*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1519*c33452fbSAndroid Build Coastguard Worker }
1520*c33452fbSAndroid Build Coastguard Worker
1521*c33452fbSAndroid Build Coastguard Worker // Set the settings
1522*c33452fbSAndroid Build Coastguard Worker if (!setSettingsAsBytes(*pConfigurableElement, bytes, strResult)) {
1523*c33452fbSAndroid Build Coastguard Worker
1524*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1525*c33452fbSAndroid Build Coastguard Worker }
1526*c33452fbSAndroid Build Coastguard Worker
1527*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1528*c33452fbSAndroid Build Coastguard Worker }
1529*c33452fbSAndroid Build Coastguard Worker
getSettingsAsXML(const CConfigurableElement * configurableElement,string & result) const1530*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getSettingsAsXML(const CConfigurableElement *configurableElement,
1531*c33452fbSAndroid Build Coastguard Worker string &result) const
1532*c33452fbSAndroid Build Coastguard Worker {
1533*c33452fbSAndroid Build Coastguard Worker string error;
1534*c33452fbSAndroid Build Coastguard Worker CConfigurationAccessContext configContext(error, _pMainParameterBlackboard, _bValueSpaceIsRaw,
1535*c33452fbSAndroid Build Coastguard Worker _bOutputRawFormatIsHex, true);
1536*c33452fbSAndroid Build Coastguard Worker
1537*c33452fbSAndroid Build Coastguard Worker CXmlParameterSerializingContext xmlParameterContext(configContext, error);
1538*c33452fbSAndroid Build Coastguard Worker
1539*c33452fbSAndroid Build Coastguard Worker // Use a doc source by loading data from instantiated Configurable Domains
1540*c33452fbSAndroid Build Coastguard Worker CXmlMemoryDocSource memorySource(configurableElement, false,
1541*c33452fbSAndroid Build Coastguard Worker configurableElement->getXmlElementName());
1542*c33452fbSAndroid Build Coastguard Worker
1543*c33452fbSAndroid Build Coastguard Worker // Use a doc sink that write the doc data in a string
1544*c33452fbSAndroid Build Coastguard Worker ostringstream output;
1545*c33452fbSAndroid Build Coastguard Worker CXmlStreamDocSink streamSink(output);
1546*c33452fbSAndroid Build Coastguard Worker
1547*c33452fbSAndroid Build Coastguard Worker if (not streamSink.process(memorySource, xmlParameterContext)) {
1548*c33452fbSAndroid Build Coastguard Worker result = error;
1549*c33452fbSAndroid Build Coastguard Worker return false;
1550*c33452fbSAndroid Build Coastguard Worker }
1551*c33452fbSAndroid Build Coastguard Worker result = output.str();
1552*c33452fbSAndroid Build Coastguard Worker return true;
1553*c33452fbSAndroid Build Coastguard Worker }
1554*c33452fbSAndroid Build Coastguard Worker
setSettingsAsXML(CConfigurableElement * configurableElement,const string & settings,string & error)1555*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setSettingsAsXML(CConfigurableElement *configurableElement,
1556*c33452fbSAndroid Build Coastguard Worker const string &settings, string &error)
1557*c33452fbSAndroid Build Coastguard Worker {
1558*c33452fbSAndroid Build Coastguard Worker CConfigurationAccessContext configContext(error, _pMainParameterBlackboard, _bValueSpaceIsRaw,
1559*c33452fbSAndroid Build Coastguard Worker _bOutputRawFormatIsHex, false);
1560*c33452fbSAndroid Build Coastguard Worker
1561*c33452fbSAndroid Build Coastguard Worker CXmlParameterSerializingContext xmlParameterContext(configContext, error);
1562*c33452fbSAndroid Build Coastguard Worker
1563*c33452fbSAndroid Build Coastguard Worker // It doesn't make sense to resolve XIncludes on an imported file because
1564*c33452fbSAndroid Build Coastguard Worker // we can't reliably decide of a "base url"
1565*c33452fbSAndroid Build Coastguard Worker _xmlDoc *doc = CXmlDocSource::mkXmlDoc(settings, false, false, xmlParameterContext);
1566*c33452fbSAndroid Build Coastguard Worker if (doc == nullptr) {
1567*c33452fbSAndroid Build Coastguard Worker return false;
1568*c33452fbSAndroid Build Coastguard Worker }
1569*c33452fbSAndroid Build Coastguard Worker if (not xmlParse(xmlParameterContext, configurableElement, doc, "",
1570*c33452fbSAndroid Build Coastguard Worker EParameterConfigurationLibrary, false)) {
1571*c33452fbSAndroid Build Coastguard Worker return false;
1572*c33452fbSAndroid Build Coastguard Worker }
1573*c33452fbSAndroid Build Coastguard Worker if (_bAutoSyncOn) {
1574*c33452fbSAndroid Build Coastguard Worker CSyncerSet syncerSet;
1575*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(configurableElement)->fillSyncerSet(syncerSet);
1576*c33452fbSAndroid Build Coastguard Worker core::Results errors;
1577*c33452fbSAndroid Build Coastguard Worker if (not syncerSet.sync(*_pMainParameterBlackboard, false, &errors)) {
1578*c33452fbSAndroid Build Coastguard Worker error = utility::asString(errors);
1579*c33452fbSAndroid Build Coastguard Worker
1580*c33452fbSAndroid Build Coastguard Worker return false;
1581*c33452fbSAndroid Build Coastguard Worker }
1582*c33452fbSAndroid Build Coastguard Worker }
1583*c33452fbSAndroid Build Coastguard Worker return true;
1584*c33452fbSAndroid Build Coastguard Worker }
1585*c33452fbSAndroid Build Coastguard Worker
getElementXMLCommandProcess(const IRemoteCommand & remoteCommand,string & result)1586*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getElementXMLCommandProcess(
1587*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &result)
1588*c33452fbSAndroid Build Coastguard Worker {
1589*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1590*c33452fbSAndroid Build Coastguard Worker
1591*c33452fbSAndroid Build Coastguard Worker CElement *locatedElement = nullptr;
1592*c33452fbSAndroid Build Coastguard Worker
1593*c33452fbSAndroid Build Coastguard Worker if (not elementLocator.locate(remoteCommand.getArgument(0), &locatedElement, result)) {
1594*c33452fbSAndroid Build Coastguard Worker
1595*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1596*c33452fbSAndroid Build Coastguard Worker }
1597*c33452fbSAndroid Build Coastguard Worker
1598*c33452fbSAndroid Build Coastguard Worker if (not getSettingsAsXML(static_cast<CConfigurableElement *>(locatedElement), result)) {
1599*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1600*c33452fbSAndroid Build Coastguard Worker }
1601*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1602*c33452fbSAndroid Build Coastguard Worker }
1603*c33452fbSAndroid Build Coastguard Worker
setElementXMLCommandProcess(const IRemoteCommand & remoteCommand,string & result)1604*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setElementXMLCommandProcess(
1605*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &result)
1606*c33452fbSAndroid Build Coastguard Worker {
1607*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(result)) {
1608*c33452fbSAndroid Build Coastguard Worker
1609*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1610*c33452fbSAndroid Build Coastguard Worker }
1611*c33452fbSAndroid Build Coastguard Worker
1612*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1613*c33452fbSAndroid Build Coastguard Worker
1614*c33452fbSAndroid Build Coastguard Worker CElement *locatedElement = nullptr;
1615*c33452fbSAndroid Build Coastguard Worker
1616*c33452fbSAndroid Build Coastguard Worker if (not elementLocator.locate(remoteCommand.getArgument(0), &locatedElement, result)) {
1617*c33452fbSAndroid Build Coastguard Worker
1618*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1619*c33452fbSAndroid Build Coastguard Worker }
1620*c33452fbSAndroid Build Coastguard Worker if (not setSettingsAsXML(static_cast<CConfigurableElement *>(locatedElement),
1621*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(1), result)) {
1622*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1623*c33452fbSAndroid Build Coastguard Worker }
1624*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EDone;
1625*c33452fbSAndroid Build Coastguard Worker }
1626*c33452fbSAndroid Build Coastguard Worker
dumpElementCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1627*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::dumpElementCommandProcess(
1628*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1629*c33452fbSAndroid Build Coastguard Worker {
1630*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1631*c33452fbSAndroid Build Coastguard Worker
1632*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1633*c33452fbSAndroid Build Coastguard Worker
1634*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1635*c33452fbSAndroid Build Coastguard Worker
1636*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1637*c33452fbSAndroid Build Coastguard Worker }
1638*c33452fbSAndroid Build Coastguard Worker
1639*c33452fbSAndroid Build Coastguard Worker string strError;
1640*c33452fbSAndroid Build Coastguard Worker
1641*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard,
1642*c33452fbSAndroid Build Coastguard Worker _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
1643*c33452fbSAndroid Build Coastguard Worker
1644*c33452fbSAndroid Build Coastguard Worker // Dump elements
1645*c33452fbSAndroid Build Coastguard Worker strResult = pLocatedElement->dumpContent(parameterAccessContext);
1646*c33452fbSAndroid Build Coastguard Worker
1647*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1648*c33452fbSAndroid Build Coastguard Worker }
1649*c33452fbSAndroid Build Coastguard Worker
getElementSizeCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1650*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getElementSizeCommandProcess(
1651*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1652*c33452fbSAndroid Build Coastguard Worker {
1653*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1654*c33452fbSAndroid Build Coastguard Worker
1655*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1656*c33452fbSAndroid Build Coastguard Worker
1657*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1658*c33452fbSAndroid Build Coastguard Worker
1659*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1660*c33452fbSAndroid Build Coastguard Worker }
1661*c33452fbSAndroid Build Coastguard Worker
1662*c33452fbSAndroid Build Coastguard Worker // Converted to actual sizable element
1663*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1664*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pLocatedElement);
1665*c33452fbSAndroid Build Coastguard Worker
1666*c33452fbSAndroid Build Coastguard Worker // Get size as string
1667*c33452fbSAndroid Build Coastguard Worker strResult = pConfigurableElement->getFootprintAsString();
1668*c33452fbSAndroid Build Coastguard Worker
1669*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1670*c33452fbSAndroid Build Coastguard Worker }
1671*c33452fbSAndroid Build Coastguard Worker
showPropertiesCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1672*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::showPropertiesCommandProcess(
1673*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1674*c33452fbSAndroid Build Coastguard Worker {
1675*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1676*c33452fbSAndroid Build Coastguard Worker
1677*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1678*c33452fbSAndroid Build Coastguard Worker
1679*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1680*c33452fbSAndroid Build Coastguard Worker
1681*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1682*c33452fbSAndroid Build Coastguard Worker }
1683*c33452fbSAndroid Build Coastguard Worker
1684*c33452fbSAndroid Build Coastguard Worker // Convert element
1685*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1686*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pLocatedElement);
1687*c33452fbSAndroid Build Coastguard Worker
1688*c33452fbSAndroid Build Coastguard Worker // Return element properties
1689*c33452fbSAndroid Build Coastguard Worker pConfigurableElement->showProperties(strResult);
1690*c33452fbSAndroid Build Coastguard Worker
1691*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1692*c33452fbSAndroid Build Coastguard Worker }
1693*c33452fbSAndroid Build Coastguard Worker
getParameterCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1694*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getParameterCommandProcess(
1695*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1696*c33452fbSAndroid Build Coastguard Worker {
1697*c33452fbSAndroid Build Coastguard Worker string strValue;
1698*c33452fbSAndroid Build Coastguard Worker
1699*c33452fbSAndroid Build Coastguard Worker if (!accessParameterValue(remoteCommand.getArgument(0), strValue, false, strResult)) {
1700*c33452fbSAndroid Build Coastguard Worker
1701*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1702*c33452fbSAndroid Build Coastguard Worker }
1703*c33452fbSAndroid Build Coastguard Worker // Succeeded
1704*c33452fbSAndroid Build Coastguard Worker strResult = strValue;
1705*c33452fbSAndroid Build Coastguard Worker
1706*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1707*c33452fbSAndroid Build Coastguard Worker }
1708*c33452fbSAndroid Build Coastguard Worker
setParameterCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1709*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setParameterCommandProcess(
1710*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1711*c33452fbSAndroid Build Coastguard Worker {
1712*c33452fbSAndroid Build Coastguard Worker // Get value to set
1713*c33452fbSAndroid Build Coastguard Worker string strValue = remoteCommand.packArguments(1, remoteCommand.getArgumentCount() - 1);
1714*c33452fbSAndroid Build Coastguard Worker
1715*c33452fbSAndroid Build Coastguard Worker return accessParameterValue(remoteCommand.getArgument(0), strValue, true, strResult)
1716*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1717*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1718*c33452fbSAndroid Build Coastguard Worker }
1719*c33452fbSAndroid Build Coastguard Worker
listBelongingDomainsCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1720*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listBelongingDomainsCommandProcess(
1721*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1722*c33452fbSAndroid Build Coastguard Worker {
1723*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1724*c33452fbSAndroid Build Coastguard Worker
1725*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1726*c33452fbSAndroid Build Coastguard Worker
1727*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1728*c33452fbSAndroid Build Coastguard Worker
1729*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1730*c33452fbSAndroid Build Coastguard Worker }
1731*c33452fbSAndroid Build Coastguard Worker
1732*c33452fbSAndroid Build Coastguard Worker // Convert element
1733*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1734*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pLocatedElement);
1735*c33452fbSAndroid Build Coastguard Worker
1736*c33452fbSAndroid Build Coastguard Worker // Return element belonging domains
1737*c33452fbSAndroid Build Coastguard Worker pConfigurableElement->listBelongingDomains(strResult);
1738*c33452fbSAndroid Build Coastguard Worker
1739*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1740*c33452fbSAndroid Build Coastguard Worker }
1741*c33452fbSAndroid Build Coastguard Worker
listAssociatedDomainsCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1742*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listAssociatedDomainsCommandProcess(
1743*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1744*c33452fbSAndroid Build Coastguard Worker {
1745*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
1746*c33452fbSAndroid Build Coastguard Worker
1747*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
1748*c33452fbSAndroid Build Coastguard Worker
1749*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(remoteCommand.getArgument(0), &pLocatedElement, strResult)) {
1750*c33452fbSAndroid Build Coastguard Worker
1751*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1752*c33452fbSAndroid Build Coastguard Worker }
1753*c33452fbSAndroid Build Coastguard Worker
1754*c33452fbSAndroid Build Coastguard Worker // Convert element
1755*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
1756*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pLocatedElement);
1757*c33452fbSAndroid Build Coastguard Worker
1758*c33452fbSAndroid Build Coastguard Worker // Return element belonging domains
1759*c33452fbSAndroid Build Coastguard Worker pConfigurableElement->listAssociatedDomains(strResult);
1760*c33452fbSAndroid Build Coastguard Worker
1761*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1762*c33452fbSAndroid Build Coastguard Worker }
1763*c33452fbSAndroid Build Coastguard Worker
listAssociatedElementsCommandProcess(const IRemoteCommand &,string & strResult)1764*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listAssociatedElementsCommandProcess(
1765*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1766*c33452fbSAndroid Build Coastguard Worker {
1767*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->listAssociatedElements(strResult);
1768*c33452fbSAndroid Build Coastguard Worker
1769*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1770*c33452fbSAndroid Build Coastguard Worker }
1771*c33452fbSAndroid Build Coastguard Worker
listConflictingElementsCommandProcess(const IRemoteCommand &,string & strResult)1772*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listConflictingElementsCommandProcess(
1773*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1774*c33452fbSAndroid Build Coastguard Worker {
1775*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->listConflictingElements(strResult);
1776*c33452fbSAndroid Build Coastguard Worker
1777*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1778*c33452fbSAndroid Build Coastguard Worker }
1779*c33452fbSAndroid Build Coastguard Worker
listRogueElementsCommandProcess(const IRemoteCommand &,string & strResult)1780*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::listRogueElementsCommandProcess(
1781*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1782*c33452fbSAndroid Build Coastguard Worker {
1783*c33452fbSAndroid Build Coastguard Worker getSystemClass()->listRogueElements(strResult);
1784*c33452fbSAndroid Build Coastguard Worker
1785*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1786*c33452fbSAndroid Build Coastguard Worker }
1787*c33452fbSAndroid Build Coastguard Worker
1788*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
getConfigurationParameterCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1789*c33452fbSAndroid Build Coastguard Worker getConfigurationParameterCommandProcess(const IRemoteCommand &remoteCommand, string &strResult)
1790*c33452fbSAndroid Build Coastguard Worker {
1791*c33452fbSAndroid Build Coastguard Worker string strOutputValue;
1792*c33452fbSAndroid Build Coastguard Worker string strError;
1793*c33452fbSAndroid Build Coastguard Worker
1794*c33452fbSAndroid Build Coastguard Worker if (!accessConfigurationValue(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1795*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(2), strOutputValue, false, strError)) {
1796*c33452fbSAndroid Build Coastguard Worker
1797*c33452fbSAndroid Build Coastguard Worker strResult = strError;
1798*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1799*c33452fbSAndroid Build Coastguard Worker }
1800*c33452fbSAndroid Build Coastguard Worker // Succeeded
1801*c33452fbSAndroid Build Coastguard Worker strResult = strOutputValue;
1802*c33452fbSAndroid Build Coastguard Worker
1803*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1804*c33452fbSAndroid Build Coastguard Worker }
1805*c33452fbSAndroid Build Coastguard Worker
1806*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
setConfigurationParameterCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1807*c33452fbSAndroid Build Coastguard Worker setConfigurationParameterCommandProcess(const IRemoteCommand &remoteCommand, string &strResult)
1808*c33452fbSAndroid Build Coastguard Worker {
1809*c33452fbSAndroid Build Coastguard Worker // Get value to set
1810*c33452fbSAndroid Build Coastguard Worker string strValue = remoteCommand.packArguments(3, remoteCommand.getArgumentCount() - 3);
1811*c33452fbSAndroid Build Coastguard Worker
1812*c33452fbSAndroid Build Coastguard Worker bool bSuccess =
1813*c33452fbSAndroid Build Coastguard Worker accessConfigurationValue(remoteCommand.getArgument(0), remoteCommand.getArgument(1),
1814*c33452fbSAndroid Build Coastguard Worker remoteCommand.getArgument(2), strValue, true, strResult);
1815*c33452fbSAndroid Build Coastguard Worker
1816*c33452fbSAndroid Build Coastguard Worker return bSuccess ? CCommandHandler::EDone : CCommandHandler::EFailed;
1817*c33452fbSAndroid Build Coastguard Worker }
1818*c33452fbSAndroid Build Coastguard Worker
showMappingCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1819*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::showMappingCommandProcess(
1820*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1821*c33452fbSAndroid Build Coastguard Worker {
1822*c33452fbSAndroid Build Coastguard Worker if (!getParameterMapping(remoteCommand.getArgument(0), strResult)) {
1823*c33452fbSAndroid Build Coastguard Worker
1824*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1825*c33452fbSAndroid Build Coastguard Worker }
1826*c33452fbSAndroid Build Coastguard Worker
1827*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1828*c33452fbSAndroid Build Coastguard Worker }
1829*c33452fbSAndroid Build Coastguard Worker
1830*c33452fbSAndroid Build Coastguard Worker /// Settings Import/Export
exportDomainsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1831*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::exportDomainsXMLCommandProcess(
1832*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1833*c33452fbSAndroid Build Coastguard Worker {
1834*c33452fbSAndroid Build Coastguard Worker string strFileName = remoteCommand.getArgument(0);
1835*c33452fbSAndroid Build Coastguard Worker return exportDomainsXml(strFileName, false, true, strResult) ? CCommandHandler::EDone
1836*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1837*c33452fbSAndroid Build Coastguard Worker }
1838*c33452fbSAndroid Build Coastguard Worker
importDomainsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1839*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::importDomainsXMLCommandProcess(
1840*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1841*c33452fbSAndroid Build Coastguard Worker {
1842*c33452fbSAndroid Build Coastguard Worker return importDomainsXml(remoteCommand.getArgument(0), false, true, strResult)
1843*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1844*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1845*c33452fbSAndroid Build Coastguard Worker }
1846*c33452fbSAndroid Build Coastguard Worker
1847*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
exportDomainsWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1848*c33452fbSAndroid Build Coastguard Worker exportDomainsWithSettingsXMLCommandProcess(const IRemoteCommand &remoteCommand,
1849*c33452fbSAndroid Build Coastguard Worker string &strResult)
1850*c33452fbSAndroid Build Coastguard Worker {
1851*c33452fbSAndroid Build Coastguard Worker string strFileName = remoteCommand.getArgument(0);
1852*c33452fbSAndroid Build Coastguard Worker return exportDomainsXml(strFileName, true, true, strResult) ? CCommandHandler::EDone
1853*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1854*c33452fbSAndroid Build Coastguard Worker }
1855*c33452fbSAndroid Build Coastguard Worker
1856*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
exportDomainWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & result)1857*c33452fbSAndroid Build Coastguard Worker exportDomainWithSettingsXMLCommandProcess(const IRemoteCommand &remoteCommand, string &result)
1858*c33452fbSAndroid Build Coastguard Worker {
1859*c33452fbSAndroid Build Coastguard Worker string domainName = remoteCommand.getArgument(0);
1860*c33452fbSAndroid Build Coastguard Worker string fileName = remoteCommand.getArgument(1);
1861*c33452fbSAndroid Build Coastguard Worker return exportSingleDomainXml(fileName, domainName, true, true, result)
1862*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1863*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1864*c33452fbSAndroid Build Coastguard Worker }
1865*c33452fbSAndroid Build Coastguard Worker
1866*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
importDomainsWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1867*c33452fbSAndroid Build Coastguard Worker importDomainsWithSettingsXMLCommandProcess(const IRemoteCommand &remoteCommand,
1868*c33452fbSAndroid Build Coastguard Worker string &strResult)
1869*c33452fbSAndroid Build Coastguard Worker {
1870*c33452fbSAndroid Build Coastguard Worker return importDomainsXml(remoteCommand.getArgument(0), true, true, strResult)
1871*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1872*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1873*c33452fbSAndroid Build Coastguard Worker }
1874*c33452fbSAndroid Build Coastguard Worker
1875*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
importDomainWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1876*c33452fbSAndroid Build Coastguard Worker importDomainWithSettingsXMLCommandProcess(const IRemoteCommand &remoteCommand,
1877*c33452fbSAndroid Build Coastguard Worker string &strResult)
1878*c33452fbSAndroid Build Coastguard Worker {
1879*c33452fbSAndroid Build Coastguard Worker bool bOverwrite = false;
1880*c33452fbSAndroid Build Coastguard Worker
1881*c33452fbSAndroid Build Coastguard Worker // Look for optional arguments
1882*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgumentCount() > 1) {
1883*c33452fbSAndroid Build Coastguard Worker
1884*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(1) == "overwrite") {
1885*c33452fbSAndroid Build Coastguard Worker
1886*c33452fbSAndroid Build Coastguard Worker bOverwrite = true;
1887*c33452fbSAndroid Build Coastguard Worker } else {
1888*c33452fbSAndroid Build Coastguard Worker // Show usage
1889*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1890*c33452fbSAndroid Build Coastguard Worker }
1891*c33452fbSAndroid Build Coastguard Worker }
1892*c33452fbSAndroid Build Coastguard Worker
1893*c33452fbSAndroid Build Coastguard Worker return importSingleDomainXml(remoteCommand.getArgument(0), bOverwrite, true, true, strResult)
1894*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1895*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1896*c33452fbSAndroid Build Coastguard Worker }
1897*c33452fbSAndroid Build Coastguard Worker
1898*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
getDomainsWithSettingsXMLCommandProcess(const IRemoteCommand &,string & strResult)1899*c33452fbSAndroid Build Coastguard Worker getDomainsWithSettingsXMLCommandProcess(const IRemoteCommand & /*command*/, string &strResult)
1900*c33452fbSAndroid Build Coastguard Worker {
1901*c33452fbSAndroid Build Coastguard Worker if (!exportDomainsXml(strResult, true, false, strResult)) {
1902*c33452fbSAndroid Build Coastguard Worker
1903*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1904*c33452fbSAndroid Build Coastguard Worker }
1905*c33452fbSAndroid Build Coastguard Worker // Succeeded
1906*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1907*c33452fbSAndroid Build Coastguard Worker }
1908*c33452fbSAndroid Build Coastguard Worker
getDomainWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1909*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getDomainWithSettingsXMLCommandProcess(
1910*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &strResult)
1911*c33452fbSAndroid Build Coastguard Worker {
1912*c33452fbSAndroid Build Coastguard Worker string strDomainName = remoteCommand.getArgument(0);
1913*c33452fbSAndroid Build Coastguard Worker
1914*c33452fbSAndroid Build Coastguard Worker return exportSingleDomainXml(strResult, strDomainName, true, false, strResult)
1915*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::ESucceeded
1916*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1917*c33452fbSAndroid Build Coastguard Worker }
1918*c33452fbSAndroid Build Coastguard Worker
1919*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::
setDomainsWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & strResult)1920*c33452fbSAndroid Build Coastguard Worker setDomainsWithSettingsXMLCommandProcess(const IRemoteCommand &remoteCommand, string &strResult)
1921*c33452fbSAndroid Build Coastguard Worker {
1922*c33452fbSAndroid Build Coastguard Worker return importDomainsXml(remoteCommand.getArgument(0), true, false, strResult)
1923*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1924*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1925*c33452fbSAndroid Build Coastguard Worker }
1926*c33452fbSAndroid Build Coastguard Worker
setDomainWithSettingsXMLCommandProcess(const IRemoteCommand & remoteCommand,string & result)1927*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::setDomainWithSettingsXMLCommandProcess(
1928*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand &remoteCommand, string &result)
1929*c33452fbSAndroid Build Coastguard Worker {
1930*c33452fbSAndroid Build Coastguard Worker bool overwrite = false;
1931*c33452fbSAndroid Build Coastguard Worker
1932*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgumentCount() > 1) {
1933*c33452fbSAndroid Build Coastguard Worker
1934*c33452fbSAndroid Build Coastguard Worker if (remoteCommand.getArgument(1) == "overwrite") {
1935*c33452fbSAndroid Build Coastguard Worker
1936*c33452fbSAndroid Build Coastguard Worker overwrite = true;
1937*c33452fbSAndroid Build Coastguard Worker } else {
1938*c33452fbSAndroid Build Coastguard Worker // Show usage
1939*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EShowUsage;
1940*c33452fbSAndroid Build Coastguard Worker }
1941*c33452fbSAndroid Build Coastguard Worker }
1942*c33452fbSAndroid Build Coastguard Worker
1943*c33452fbSAndroid Build Coastguard Worker return importSingleDomainXml(remoteCommand.getArgument(0), overwrite, true, false, result)
1944*c33452fbSAndroid Build Coastguard Worker ? CCommandHandler::EDone
1945*c33452fbSAndroid Build Coastguard Worker : CCommandHandler::EFailed;
1946*c33452fbSAndroid Build Coastguard Worker }
1947*c33452fbSAndroid Build Coastguard Worker
getSystemClassXMLCommandProcess(const IRemoteCommand &,string & strResult)1948*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getSystemClassXMLCommandProcess(
1949*c33452fbSAndroid Build Coastguard Worker const IRemoteCommand & /*command*/, string &strResult)
1950*c33452fbSAndroid Build Coastguard Worker {
1951*c33452fbSAndroid Build Coastguard Worker // Get Root element where to export from
1952*c33452fbSAndroid Build Coastguard Worker const CSystemClass *pSystemClass = getSystemClass();
1953*c33452fbSAndroid Build Coastguard Worker
1954*c33452fbSAndroid Build Coastguard Worker // Use default access context for structure export
1955*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext accessContext(strResult);
1956*c33452fbSAndroid Build Coastguard Worker if (!exportElementToXMLString(pSystemClass, pSystemClass->getXmlElementName(),
1957*c33452fbSAndroid Build Coastguard Worker CXmlParameterSerializingContext{accessContext, strResult},
1958*c33452fbSAndroid Build Coastguard Worker strResult)) {
1959*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::EFailed;
1960*c33452fbSAndroid Build Coastguard Worker }
1961*c33452fbSAndroid Build Coastguard Worker // Succeeded
1962*c33452fbSAndroid Build Coastguard Worker return CCommandHandler::ESucceeded;
1963*c33452fbSAndroid Build Coastguard Worker }
1964*c33452fbSAndroid Build Coastguard Worker
1965*c33452fbSAndroid Build Coastguard Worker // User set/get parameters in main BlackBoard
accessParameterValue(const string & strPath,string & strValue,bool bSet,string & strError)1966*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::accessParameterValue(const string &strPath, string &strValue, bool bSet,
1967*c33452fbSAndroid Build Coastguard Worker string &strError)
1968*c33452fbSAndroid Build Coastguard Worker {
1969*c33452fbSAndroid Build Coastguard Worker // Forbid write access when not in TuningMode
1970*c33452fbSAndroid Build Coastguard Worker if (bSet && !checkTuningModeOn(strError)) {
1971*c33452fbSAndroid Build Coastguard Worker
1972*c33452fbSAndroid Build Coastguard Worker return false;
1973*c33452fbSAndroid Build Coastguard Worker }
1974*c33452fbSAndroid Build Coastguard Worker
1975*c33452fbSAndroid Build Coastguard Worker // Define context
1976*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard,
1977*c33452fbSAndroid Build Coastguard Worker _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
1978*c33452fbSAndroid Build Coastguard Worker
1979*c33452fbSAndroid Build Coastguard Worker // Activate the auto synchronization with the hardware
1980*c33452fbSAndroid Build Coastguard Worker if (bSet) {
1981*c33452fbSAndroid Build Coastguard Worker
1982*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setAutoSync(_bAutoSyncOn);
1983*c33452fbSAndroid Build Coastguard Worker }
1984*c33452fbSAndroid Build Coastguard Worker
1985*c33452fbSAndroid Build Coastguard Worker return accessValue(parameterAccessContext, strPath, strValue, bSet, strError);
1986*c33452fbSAndroid Build Coastguard Worker }
1987*c33452fbSAndroid Build Coastguard Worker
1988*c33452fbSAndroid Build Coastguard Worker // User get parameter mapping
getParameterMapping(const string & strPath,string & strResult) const1989*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getParameterMapping(const string &strPath, string &strResult) const
1990*c33452fbSAndroid Build Coastguard Worker {
1991*c33452fbSAndroid Build Coastguard Worker // Get the ConfigurableElement corresponding to strPath
1992*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement = getConfigurableElement(strPath, strResult);
1993*c33452fbSAndroid Build Coastguard Worker if (!pConfigurableElement) {
1994*c33452fbSAndroid Build Coastguard Worker
1995*c33452fbSAndroid Build Coastguard Worker return false;
1996*c33452fbSAndroid Build Coastguard Worker }
1997*c33452fbSAndroid Build Coastguard Worker
1998*c33452fbSAndroid Build Coastguard Worker // Find the list of the ancestors of the current ConfigurableElement that have a mapping
1999*c33452fbSAndroid Build Coastguard Worker auto configurableElementPath = pConfigurableElement->getConfigurableElementContext();
2000*c33452fbSAndroid Build Coastguard Worker
2001*c33452fbSAndroid Build Coastguard Worker // Get the Subsystem containing the ConfigurableElement
2002*c33452fbSAndroid Build Coastguard Worker const CSubsystem *pSubsystem = pConfigurableElement->getBelongingSubsystem();
2003*c33452fbSAndroid Build Coastguard Worker if (!pSubsystem) {
2004*c33452fbSAndroid Build Coastguard Worker
2005*c33452fbSAndroid Build Coastguard Worker strResult = "Unable to find the Subsystem containing the parameter";
2006*c33452fbSAndroid Build Coastguard Worker return false;
2007*c33452fbSAndroid Build Coastguard Worker }
2008*c33452fbSAndroid Build Coastguard Worker
2009*c33452fbSAndroid Build Coastguard Worker // Fetch the mapping corresponding to the ConfigurableElement
2010*c33452fbSAndroid Build Coastguard Worker strResult = pSubsystem->getMapping(configurableElementPath);
2011*c33452fbSAndroid Build Coastguard Worker
2012*c33452fbSAndroid Build Coastguard Worker return true;
2013*c33452fbSAndroid Build Coastguard Worker }
2014*c33452fbSAndroid Build Coastguard Worker
2015*c33452fbSAndroid Build Coastguard Worker // User set/get parameters in specific Configuration BlackBoard
accessConfigurationValue(const string & strDomain,const string & strConfiguration,const string & strPath,string & strValue,bool bSet,string & strError)2016*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::accessConfigurationValue(const string &strDomain,
2017*c33452fbSAndroid Build Coastguard Worker const string &strConfiguration, const string &strPath,
2018*c33452fbSAndroid Build Coastguard Worker string &strValue, bool bSet, string &strError)
2019*c33452fbSAndroid Build Coastguard Worker {
2020*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
2021*c33452fbSAndroid Build Coastguard Worker
2022*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
2023*c33452fbSAndroid Build Coastguard Worker
2024*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(strPath, &pLocatedElement, strError)) {
2025*c33452fbSAndroid Build Coastguard Worker
2026*c33452fbSAndroid Build Coastguard Worker return false;
2027*c33452fbSAndroid Build Coastguard Worker }
2028*c33452fbSAndroid Build Coastguard Worker
2029*c33452fbSAndroid Build Coastguard Worker // Convert element
2030*c33452fbSAndroid Build Coastguard Worker const CConfigurableElement *pConfigurableElement =
2031*c33452fbSAndroid Build Coastguard Worker static_cast<const CConfigurableElement *>(pLocatedElement);
2032*c33452fbSAndroid Build Coastguard Worker
2033*c33452fbSAndroid Build Coastguard Worker // Get the Configuration blackboard and the Base Offset of the configurable element in this
2034*c33452fbSAndroid Build Coastguard Worker // blackboard
2035*c33452fbSAndroid Build Coastguard Worker size_t baseOffset;
2036*c33452fbSAndroid Build Coastguard Worker bool bIsLastApplied;
2037*c33452fbSAndroid Build Coastguard Worker
2038*c33452fbSAndroid Build Coastguard Worker CParameterBlackboard *pConfigurationBlackboard = nullptr;
2039*c33452fbSAndroid Build Coastguard Worker
2040*c33452fbSAndroid Build Coastguard Worker {
2041*c33452fbSAndroid Build Coastguard Worker pConfigurationBlackboard = getConstConfigurableDomains()->findConfigurationBlackboard(
2042*c33452fbSAndroid Build Coastguard Worker strDomain, strConfiguration, pConfigurableElement, baseOffset, bIsLastApplied,
2043*c33452fbSAndroid Build Coastguard Worker strError);
2044*c33452fbSAndroid Build Coastguard Worker if (!pConfigurationBlackboard) {
2045*c33452fbSAndroid Build Coastguard Worker
2046*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2047*c33452fbSAndroid Build Coastguard Worker return false;
2048*c33452fbSAndroid Build Coastguard Worker }
2049*c33452fbSAndroid Build Coastguard Worker }
2050*c33452fbSAndroid Build Coastguard Worker
2051*c33452fbSAndroid Build Coastguard Worker info() << "Element " << strPath << " in Domain " << strDomain
2052*c33452fbSAndroid Build Coastguard Worker << ", offset: " << pConfigurableElement->getOffset() << ", base offset: " << baseOffset;
2053*c33452fbSAndroid Build Coastguard Worker
2054*c33452fbSAndroid Build Coastguard Worker /// Update the Configuration Blackboard
2055*c33452fbSAndroid Build Coastguard Worker
2056*c33452fbSAndroid Build Coastguard Worker // Define Configuration context using Base Offset and keep Auto Sync off to prevent access to HW
2057*c33452fbSAndroid Build Coastguard Worker CParameterAccessContext parameterAccessContext(
2058*c33452fbSAndroid Build Coastguard Worker strError, pConfigurationBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex, baseOffset);
2059*c33452fbSAndroid Build Coastguard Worker
2060*c33452fbSAndroid Build Coastguard Worker // Deactivate the auto synchronization with the hardware during the Configuration Blackboard
2061*c33452fbSAndroid Build Coastguard Worker // access (only Main Blackboard shall be synchronized, Configurations Blackboards are copied
2062*c33452fbSAndroid Build Coastguard Worker // into the Main Blackboard each time a configuration is restored but they are not synchronized
2063*c33452fbSAndroid Build Coastguard Worker // directly).
2064*c33452fbSAndroid Build Coastguard Worker if (bSet) {
2065*c33452fbSAndroid Build Coastguard Worker
2066*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setAutoSync(false);
2067*c33452fbSAndroid Build Coastguard Worker }
2068*c33452fbSAndroid Build Coastguard Worker
2069*c33452fbSAndroid Build Coastguard Worker // Access Value in the Configuration Blackboard
2070*c33452fbSAndroid Build Coastguard Worker if (!accessValue(parameterAccessContext, strPath, strValue, bSet, strError)) {
2071*c33452fbSAndroid Build Coastguard Worker
2072*c33452fbSAndroid Build Coastguard Worker return false;
2073*c33452fbSAndroid Build Coastguard Worker }
2074*c33452fbSAndroid Build Coastguard Worker
2075*c33452fbSAndroid Build Coastguard Worker /// If the Configuration is the last one applied, update the Main Blackboard as well
2076*c33452fbSAndroid Build Coastguard Worker
2077*c33452fbSAndroid Build Coastguard Worker if (bIsLastApplied) {
2078*c33452fbSAndroid Build Coastguard Worker
2079*c33452fbSAndroid Build Coastguard Worker // Define Main context
2080*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setParameterBlackboard(_pMainParameterBlackboard);
2081*c33452fbSAndroid Build Coastguard Worker
2082*c33452fbSAndroid Build Coastguard Worker // Activate the auto synchronization with the hardware
2083*c33452fbSAndroid Build Coastguard Worker if (bSet) {
2084*c33452fbSAndroid Build Coastguard Worker
2085*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setAutoSync(_bAutoSyncOn);
2086*c33452fbSAndroid Build Coastguard Worker }
2087*c33452fbSAndroid Build Coastguard Worker
2088*c33452fbSAndroid Build Coastguard Worker // Access Value in the Main Blackboard
2089*c33452fbSAndroid Build Coastguard Worker return accessValue(parameterAccessContext, strPath, strValue, bSet, strError);
2090*c33452fbSAndroid Build Coastguard Worker }
2091*c33452fbSAndroid Build Coastguard Worker
2092*c33452fbSAndroid Build Coastguard Worker return true;
2093*c33452fbSAndroid Build Coastguard Worker }
2094*c33452fbSAndroid Build Coastguard Worker
2095*c33452fbSAndroid Build Coastguard Worker // User set/get parameters
accessValue(CParameterAccessContext & parameterAccessContext,const string & strPath,string & strValue,bool bSet,string & strError)2096*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::accessValue(CParameterAccessContext ¶meterAccessContext,
2097*c33452fbSAndroid Build Coastguard Worker const string &strPath, string &strValue, bool bSet,
2098*c33452fbSAndroid Build Coastguard Worker string &strError)
2099*c33452fbSAndroid Build Coastguard Worker {
2100*c33452fbSAndroid Build Coastguard Worker // Lock state
2101*c33452fbSAndroid Build Coastguard Worker lock_guard<mutex> autoLock(getBlackboardMutex());
2102*c33452fbSAndroid Build Coastguard Worker
2103*c33452fbSAndroid Build Coastguard Worker CPathNavigator pathNavigator(strPath);
2104*c33452fbSAndroid Build Coastguard Worker
2105*c33452fbSAndroid Build Coastguard Worker // Nagivate through system class
2106*c33452fbSAndroid Build Coastguard Worker if (!pathNavigator.navigateThrough(getConstSystemClass()->getName(), strError)) {
2107*c33452fbSAndroid Build Coastguard Worker
2108*c33452fbSAndroid Build Coastguard Worker parameterAccessContext.setError(strError);
2109*c33452fbSAndroid Build Coastguard Worker
2110*c33452fbSAndroid Build Coastguard Worker return false;
2111*c33452fbSAndroid Build Coastguard Worker }
2112*c33452fbSAndroid Build Coastguard Worker
2113*c33452fbSAndroid Build Coastguard Worker // Do the get
2114*c33452fbSAndroid Build Coastguard Worker return getConstSystemClass()->accessValue(pathNavigator, strValue, bSet,
2115*c33452fbSAndroid Build Coastguard Worker parameterAccessContext);
2116*c33452fbSAndroid Build Coastguard Worker }
2117*c33452fbSAndroid Build Coastguard Worker
2118*c33452fbSAndroid Build Coastguard Worker // Tuning mode
setTuningMode(bool bOn,string & strError)2119*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setTuningMode(bool bOn, string &strError)
2120*c33452fbSAndroid Build Coastguard Worker {
2121*c33452fbSAndroid Build Coastguard Worker if (bOn == tuningModeOn()) {
2122*c33452fbSAndroid Build Coastguard Worker strError = "Tuning mode is already in the state requested";
2123*c33452fbSAndroid Build Coastguard Worker return false;
2124*c33452fbSAndroid Build Coastguard Worker }
2125*c33452fbSAndroid Build Coastguard Worker // Lock state
2126*c33452fbSAndroid Build Coastguard Worker lock_guard<mutex> autoLock(getBlackboardMutex());
2127*c33452fbSAndroid Build Coastguard Worker
2128*c33452fbSAndroid Build Coastguard Worker // Warn domains about exiting tuning mode
2129*c33452fbSAndroid Build Coastguard Worker if (!bOn) {
2130*c33452fbSAndroid Build Coastguard Worker
2131*c33452fbSAndroid Build Coastguard Worker // Ensure application of currently selected configurations
2132*c33452fbSAndroid Build Coastguard Worker // Force-apply configurations
2133*c33452fbSAndroid Build Coastguard Worker doApplyConfigurations(true);
2134*c33452fbSAndroid Build Coastguard Worker }
2135*c33452fbSAndroid Build Coastguard Worker
2136*c33452fbSAndroid Build Coastguard Worker // Store
2137*c33452fbSAndroid Build Coastguard Worker _bTuningModeIsOn = bOn;
2138*c33452fbSAndroid Build Coastguard Worker
2139*c33452fbSAndroid Build Coastguard Worker return true;
2140*c33452fbSAndroid Build Coastguard Worker }
2141*c33452fbSAndroid Build Coastguard Worker
tuningModeOn() const2142*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::tuningModeOn() const
2143*c33452fbSAndroid Build Coastguard Worker {
2144*c33452fbSAndroid Build Coastguard Worker return _bTuningModeIsOn;
2145*c33452fbSAndroid Build Coastguard Worker }
2146*c33452fbSAndroid Build Coastguard Worker
2147*c33452fbSAndroid Build Coastguard Worker // Current value space for user set/get value interpretation
setValueSpace(bool bIsRaw)2148*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setValueSpace(bool bIsRaw)
2149*c33452fbSAndroid Build Coastguard Worker {
2150*c33452fbSAndroid Build Coastguard Worker _bValueSpaceIsRaw = bIsRaw;
2151*c33452fbSAndroid Build Coastguard Worker }
2152*c33452fbSAndroid Build Coastguard Worker
valueSpaceIsRaw()2153*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::valueSpaceIsRaw()
2154*c33452fbSAndroid Build Coastguard Worker {
2155*c33452fbSAndroid Build Coastguard Worker return _bValueSpaceIsRaw;
2156*c33452fbSAndroid Build Coastguard Worker }
2157*c33452fbSAndroid Build Coastguard Worker
2158*c33452fbSAndroid Build Coastguard Worker // Current Output Raw Format for user get value interpretation
setOutputRawFormat(bool bIsHex)2159*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setOutputRawFormat(bool bIsHex)
2160*c33452fbSAndroid Build Coastguard Worker {
2161*c33452fbSAndroid Build Coastguard Worker _bOutputRawFormatIsHex = bIsHex;
2162*c33452fbSAndroid Build Coastguard Worker }
2163*c33452fbSAndroid Build Coastguard Worker
outputRawFormatIsHex()2164*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::outputRawFormatIsHex()
2165*c33452fbSAndroid Build Coastguard Worker {
2166*c33452fbSAndroid Build Coastguard Worker return _bOutputRawFormatIsHex;
2167*c33452fbSAndroid Build Coastguard Worker }
2168*c33452fbSAndroid Build Coastguard Worker
2169*c33452fbSAndroid Build Coastguard Worker /// Sync
2170*c33452fbSAndroid Build Coastguard Worker // Automatic hardware synchronization control (during tuning session)
setAutoSync(bool bAutoSyncOn,string & strError)2171*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setAutoSync(bool bAutoSyncOn, string &strError)
2172*c33452fbSAndroid Build Coastguard Worker {
2173*c33452fbSAndroid Build Coastguard Worker // Warn domains about turning auto sync back on
2174*c33452fbSAndroid Build Coastguard Worker if (bAutoSyncOn && !_bAutoSyncOn) {
2175*c33452fbSAndroid Build Coastguard Worker
2176*c33452fbSAndroid Build Coastguard Worker // Do the synchronization at system class level (could be optimized by keeping track of all
2177*c33452fbSAndroid Build Coastguard Worker // modified parameters)
2178*c33452fbSAndroid Build Coastguard Worker if (!sync(strError)) {
2179*c33452fbSAndroid Build Coastguard Worker
2180*c33452fbSAndroid Build Coastguard Worker return false;
2181*c33452fbSAndroid Build Coastguard Worker }
2182*c33452fbSAndroid Build Coastguard Worker }
2183*c33452fbSAndroid Build Coastguard Worker
2184*c33452fbSAndroid Build Coastguard Worker // Set Auto sync
2185*c33452fbSAndroid Build Coastguard Worker _bAutoSyncOn = bAutoSyncOn;
2186*c33452fbSAndroid Build Coastguard Worker
2187*c33452fbSAndroid Build Coastguard Worker return true;
2188*c33452fbSAndroid Build Coastguard Worker }
2189*c33452fbSAndroid Build Coastguard Worker
autoSyncOn() const2190*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::autoSyncOn() const
2191*c33452fbSAndroid Build Coastguard Worker {
2192*c33452fbSAndroid Build Coastguard Worker return _bAutoSyncOn;
2193*c33452fbSAndroid Build Coastguard Worker }
2194*c33452fbSAndroid Build Coastguard Worker
2195*c33452fbSAndroid Build Coastguard Worker // Manual hardware synchronization control (during tuning session)
sync(string & strError)2196*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::sync(string &strError)
2197*c33452fbSAndroid Build Coastguard Worker {
2198*c33452fbSAndroid Build Coastguard Worker // Warn domains about turning auto sync back on
2199*c33452fbSAndroid Build Coastguard Worker if (_bAutoSyncOn) {
2200*c33452fbSAndroid Build Coastguard Worker
2201*c33452fbSAndroid Build Coastguard Worker strError = "Feature unavailable when Auto Sync is on";
2202*c33452fbSAndroid Build Coastguard Worker
2203*c33452fbSAndroid Build Coastguard Worker return false;
2204*c33452fbSAndroid Build Coastguard Worker }
2205*c33452fbSAndroid Build Coastguard Worker
2206*c33452fbSAndroid Build Coastguard Worker // Get syncer set
2207*c33452fbSAndroid Build Coastguard Worker CSyncerSet syncerSet;
2208*c33452fbSAndroid Build Coastguard Worker // ... from system class
2209*c33452fbSAndroid Build Coastguard Worker getConstSystemClass()->fillSyncerSet(syncerSet);
2210*c33452fbSAndroid Build Coastguard Worker
2211*c33452fbSAndroid Build Coastguard Worker // Sync
2212*c33452fbSAndroid Build Coastguard Worker core::Results error;
2213*c33452fbSAndroid Build Coastguard Worker if (!syncerSet.sync(*_pMainParameterBlackboard, false, &error)) {
2214*c33452fbSAndroid Build Coastguard Worker
2215*c33452fbSAndroid Build Coastguard Worker strError = utility::asString(error);
2216*c33452fbSAndroid Build Coastguard Worker return false;
2217*c33452fbSAndroid Build Coastguard Worker };
2218*c33452fbSAndroid Build Coastguard Worker
2219*c33452fbSAndroid Build Coastguard Worker return true;
2220*c33452fbSAndroid Build Coastguard Worker }
2221*c33452fbSAndroid Build Coastguard Worker
2222*c33452fbSAndroid Build Coastguard Worker // Configuration/Domains handling
createDomain(const string & strName,string & strError)2223*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::createDomain(const string &strName, string &strError)
2224*c33452fbSAndroid Build Coastguard Worker {
2225*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Creating configurable domain " + strName);
2226*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2227*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2228*c33452fbSAndroid Build Coastguard Worker
2229*c33452fbSAndroid Build Coastguard Worker return false;
2230*c33452fbSAndroid Build Coastguard Worker }
2231*c33452fbSAndroid Build Coastguard Worker
2232*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2233*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->createDomain(strName, strError), strError);
2234*c33452fbSAndroid Build Coastguard Worker }
2235*c33452fbSAndroid Build Coastguard Worker
deleteDomain(const string & strName,string & strError)2236*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::deleteDomain(const string &strName, string &strError)
2237*c33452fbSAndroid Build Coastguard Worker {
2238*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Deleting configurable domain '" + strName + "'");
2239*c33452fbSAndroid Build Coastguard Worker
2240*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2241*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2242*c33452fbSAndroid Build Coastguard Worker
2243*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2244*c33452fbSAndroid Build Coastguard Worker return false;
2245*c33452fbSAndroid Build Coastguard Worker }
2246*c33452fbSAndroid Build Coastguard Worker
2247*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2248*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->deleteDomain(strName, strError), strError);
2249*c33452fbSAndroid Build Coastguard Worker }
2250*c33452fbSAndroid Build Coastguard Worker
renameDomain(const string & strName,const string & strNewName,string & strError)2251*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::renameDomain(const string &strName, const string &strNewName, string &strError)
2252*c33452fbSAndroid Build Coastguard Worker {
2253*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Renaming configurable domain '" + strName + "' to '" + strNewName + "'");
2254*c33452fbSAndroid Build Coastguard Worker
2255*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2256*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->renameDomain(strName, strNewName, strError),
2257*c33452fbSAndroid Build Coastguard Worker strError);
2258*c33452fbSAndroid Build Coastguard Worker }
2259*c33452fbSAndroid Build Coastguard Worker
deleteAllDomains(string & strError)2260*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::deleteAllDomains(string &strError)
2261*c33452fbSAndroid Build Coastguard Worker {
2262*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Deleting all configurable domains");
2263*c33452fbSAndroid Build Coastguard Worker
2264*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2265*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2266*c33452fbSAndroid Build Coastguard Worker
2267*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2268*c33452fbSAndroid Build Coastguard Worker return false;
2269*c33452fbSAndroid Build Coastguard Worker }
2270*c33452fbSAndroid Build Coastguard Worker
2271*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2272*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->deleteAllDomains();
2273*c33452fbSAndroid Build Coastguard Worker
2274*c33452fbSAndroid Build Coastguard Worker info() << "Success";
2275*c33452fbSAndroid Build Coastguard Worker return true;
2276*c33452fbSAndroid Build Coastguard Worker }
2277*c33452fbSAndroid Build Coastguard Worker
setSequenceAwareness(const string & strName,bool bSequenceAware,string & strResult)2278*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setSequenceAwareness(const string &strName, bool bSequenceAware,
2279*c33452fbSAndroid Build Coastguard Worker string &strResult)
2280*c33452fbSAndroid Build Coastguard Worker {
2281*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Making domain '" + strName + "' sequence " +
2282*c33452fbSAndroid Build Coastguard Worker (bSequenceAware ? "aware" : "unaware"));
2283*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2284*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strResult)) {
2285*c33452fbSAndroid Build Coastguard Worker
2286*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strResult;
2287*c33452fbSAndroid Build Coastguard Worker return false;
2288*c33452fbSAndroid Build Coastguard Worker }
2289*c33452fbSAndroid Build Coastguard Worker
2290*c33452fbSAndroid Build Coastguard Worker return logResult(
2291*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->setSequenceAwareness(strName, bSequenceAware, strResult),
2292*c33452fbSAndroid Build Coastguard Worker strResult);
2293*c33452fbSAndroid Build Coastguard Worker }
2294*c33452fbSAndroid Build Coastguard Worker
getSequenceAwareness(const string & strName,bool & bSequenceAware,string & strResult)2295*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getSequenceAwareness(const string &strName, bool &bSequenceAware,
2296*c33452fbSAndroid Build Coastguard Worker string &strResult)
2297*c33452fbSAndroid Build Coastguard Worker {
2298*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->getSequenceAwareness(strName, bSequenceAware, strResult);
2299*c33452fbSAndroid Build Coastguard Worker }
2300*c33452fbSAndroid Build Coastguard Worker
createConfiguration(const string & strDomain,const string & strConfiguration,string & strError)2301*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::createConfiguration(const string &strDomain, const string &strConfiguration,
2302*c33452fbSAndroid Build Coastguard Worker string &strError)
2303*c33452fbSAndroid Build Coastguard Worker {
2304*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Creating domain configuration '" + strConfiguration + "' into domain '" +
2305*c33452fbSAndroid Build Coastguard Worker strDomain + "'");
2306*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2307*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2308*c33452fbSAndroid Build Coastguard Worker
2309*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2310*c33452fbSAndroid Build Coastguard Worker return false;
2311*c33452fbSAndroid Build Coastguard Worker }
2312*c33452fbSAndroid Build Coastguard Worker
2313*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2314*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->createConfiguration(
2315*c33452fbSAndroid Build Coastguard Worker strDomain, strConfiguration, _pMainParameterBlackboard, strError),
2316*c33452fbSAndroid Build Coastguard Worker strError);
2317*c33452fbSAndroid Build Coastguard Worker }
renameConfiguration(const string & strDomain,const string & strConfiguration,const string & strNewConfiguration,string & strError)2318*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::renameConfiguration(const string &strDomain, const string &strConfiguration,
2319*c33452fbSAndroid Build Coastguard Worker const string &strNewConfiguration, string &strError)
2320*c33452fbSAndroid Build Coastguard Worker {
2321*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Renaming domain '" + strDomain + "''s configuration '" + strConfiguration +
2322*c33452fbSAndroid Build Coastguard Worker "' to '" + strNewConfiguration + "'");
2323*c33452fbSAndroid Build Coastguard Worker
2324*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->renameConfiguration(strDomain, strConfiguration,
2325*c33452fbSAndroid Build Coastguard Worker strNewConfiguration, strError),
2326*c33452fbSAndroid Build Coastguard Worker strError);
2327*c33452fbSAndroid Build Coastguard Worker }
2328*c33452fbSAndroid Build Coastguard Worker
deleteConfiguration(const string & strDomain,const string & strConfiguration,string & strError)2329*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::deleteConfiguration(const string &strDomain, const string &strConfiguration,
2330*c33452fbSAndroid Build Coastguard Worker string &strError)
2331*c33452fbSAndroid Build Coastguard Worker {
2332*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Deleting configuration '" + strConfiguration + "' from domain '" + strDomain +
2333*c33452fbSAndroid Build Coastguard Worker "'");
2334*c33452fbSAndroid Build Coastguard Worker
2335*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2336*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2337*c33452fbSAndroid Build Coastguard Worker
2338*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2339*c33452fbSAndroid Build Coastguard Worker return false;
2340*c33452fbSAndroid Build Coastguard Worker }
2341*c33452fbSAndroid Build Coastguard Worker
2342*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2343*c33452fbSAndroid Build Coastguard Worker return logResult(
2344*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->deleteConfiguration(strDomain, strConfiguration, strError),
2345*c33452fbSAndroid Build Coastguard Worker strError);
2346*c33452fbSAndroid Build Coastguard Worker }
2347*c33452fbSAndroid Build Coastguard Worker
restoreConfiguration(const string & strDomain,const string & strConfiguration,core::Results & errors)2348*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::restoreConfiguration(const string &strDomain, const string &strConfiguration,
2349*c33452fbSAndroid Build Coastguard Worker core::Results &errors)
2350*c33452fbSAndroid Build Coastguard Worker {
2351*c33452fbSAndroid Build Coastguard Worker string strError;
2352*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Restoring domain '" + strDomain + "''s configuration '" + strConfiguration +
2353*c33452fbSAndroid Build Coastguard Worker "' to parameter blackboard");
2354*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2355*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2356*c33452fbSAndroid Build Coastguard Worker
2357*c33452fbSAndroid Build Coastguard Worker errors.push_back(strError);
2358*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2359*c33452fbSAndroid Build Coastguard Worker return false;
2360*c33452fbSAndroid Build Coastguard Worker }
2361*c33452fbSAndroid Build Coastguard Worker
2362*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2363*c33452fbSAndroid Build Coastguard Worker return logResult(
2364*c33452fbSAndroid Build Coastguard Worker getConstConfigurableDomains()->restoreConfiguration(
2365*c33452fbSAndroid Build Coastguard Worker strDomain, strConfiguration, _pMainParameterBlackboard, _bAutoSyncOn, errors),
2366*c33452fbSAndroid Build Coastguard Worker strError);
2367*c33452fbSAndroid Build Coastguard Worker }
2368*c33452fbSAndroid Build Coastguard Worker
saveConfiguration(const string & strDomain,const string & strConfiguration,string & strError)2369*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::saveConfiguration(const string &strDomain, const string &strConfiguration,
2370*c33452fbSAndroid Build Coastguard Worker string &strError)
2371*c33452fbSAndroid Build Coastguard Worker {
2372*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Saving domain '" + strDomain + "' configuration '" + strConfiguration +
2373*c33452fbSAndroid Build Coastguard Worker "' from parameter blackboard");
2374*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2375*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2376*c33452fbSAndroid Build Coastguard Worker
2377*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2378*c33452fbSAndroid Build Coastguard Worker return false;
2379*c33452fbSAndroid Build Coastguard Worker }
2380*c33452fbSAndroid Build Coastguard Worker
2381*c33452fbSAndroid Build Coastguard Worker // Delegate to configurable domains
2382*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->saveConfiguration(
2383*c33452fbSAndroid Build Coastguard Worker strDomain, strConfiguration, _pMainParameterBlackboard, strError),
2384*c33452fbSAndroid Build Coastguard Worker strError);
2385*c33452fbSAndroid Build Coastguard Worker }
2386*c33452fbSAndroid Build Coastguard Worker
2387*c33452fbSAndroid Build Coastguard Worker // Configurable element - domain association
addConfigurableElementToDomain(const string & strDomain,const string & strConfigurableElementPath,string & strError)2388*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::addConfigurableElementToDomain(const string &strDomain,
2389*c33452fbSAndroid Build Coastguard Worker const string &strConfigurableElementPath,
2390*c33452fbSAndroid Build Coastguard Worker string &strError)
2391*c33452fbSAndroid Build Coastguard Worker {
2392*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Adding configurable element '" + strConfigurableElementPath + "' to domain '" +
2393*c33452fbSAndroid Build Coastguard Worker strDomain + "'");
2394*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2395*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2396*c33452fbSAndroid Build Coastguard Worker
2397*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2398*c33452fbSAndroid Build Coastguard Worker return false;
2399*c33452fbSAndroid Build Coastguard Worker }
2400*c33452fbSAndroid Build Coastguard Worker
2401*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
2402*c33452fbSAndroid Build Coastguard Worker
2403*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
2404*c33452fbSAndroid Build Coastguard Worker
2405*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(strConfigurableElementPath, &pLocatedElement, strError)) {
2406*c33452fbSAndroid Build Coastguard Worker
2407*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2408*c33452fbSAndroid Build Coastguard Worker return false;
2409*c33452fbSAndroid Build Coastguard Worker }
2410*c33452fbSAndroid Build Coastguard Worker
2411*c33452fbSAndroid Build Coastguard Worker // Convert element
2412*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *pConfigurableElement =
2413*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(pLocatedElement);
2414*c33452fbSAndroid Build Coastguard Worker
2415*c33452fbSAndroid Build Coastguard Worker // Delegate
2416*c33452fbSAndroid Build Coastguard Worker core::Results infos;
2417*c33452fbSAndroid Build Coastguard Worker bool isSuccess = getConfigurableDomains()->addConfigurableElementToDomain(
2418*c33452fbSAndroid Build Coastguard Worker strDomain, pConfigurableElement, _pMainParameterBlackboard, infos);
2419*c33452fbSAndroid Build Coastguard Worker
2420*c33452fbSAndroid Build Coastguard Worker if (isSuccess) {
2421*c33452fbSAndroid Build Coastguard Worker info() << infos;
2422*c33452fbSAndroid Build Coastguard Worker } else {
2423*c33452fbSAndroid Build Coastguard Worker warning() << infos;
2424*c33452fbSAndroid Build Coastguard Worker }
2425*c33452fbSAndroid Build Coastguard Worker
2426*c33452fbSAndroid Build Coastguard Worker strError = utility::asString(infos);
2427*c33452fbSAndroid Build Coastguard Worker return isSuccess;
2428*c33452fbSAndroid Build Coastguard Worker }
2429*c33452fbSAndroid Build Coastguard Worker
removeConfigurableElementFromDomain(const string & strDomain,const string & strConfigurableElementPath,string & strError)2430*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::removeConfigurableElementFromDomain(const string &strDomain,
2431*c33452fbSAndroid Build Coastguard Worker const string &strConfigurableElementPath,
2432*c33452fbSAndroid Build Coastguard Worker string &strError)
2433*c33452fbSAndroid Build Coastguard Worker {
2434*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Removing configurable element '" + strConfigurableElementPath + "' from domain '" +
2435*c33452fbSAndroid Build Coastguard Worker strDomain + "'");
2436*c33452fbSAndroid Build Coastguard Worker
2437*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2438*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2439*c33452fbSAndroid Build Coastguard Worker
2440*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2441*c33452fbSAndroid Build Coastguard Worker return false;
2442*c33452fbSAndroid Build Coastguard Worker }
2443*c33452fbSAndroid Build Coastguard Worker
2444*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
2445*c33452fbSAndroid Build Coastguard Worker
2446*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
2447*c33452fbSAndroid Build Coastguard Worker
2448*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(strConfigurableElementPath, &pLocatedElement, strError)) {
2449*c33452fbSAndroid Build Coastguard Worker
2450*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2451*c33452fbSAndroid Build Coastguard Worker return false;
2452*c33452fbSAndroid Build Coastguard Worker }
2453*c33452fbSAndroid Build Coastguard Worker
2454*c33452fbSAndroid Build Coastguard Worker // Convert element
2455*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *pConfigurableElement =
2456*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(pLocatedElement);
2457*c33452fbSAndroid Build Coastguard Worker
2458*c33452fbSAndroid Build Coastguard Worker // Delegate
2459*c33452fbSAndroid Build Coastguard Worker return logResult(getConfigurableDomains()->removeConfigurableElementFromDomain(
2460*c33452fbSAndroid Build Coastguard Worker strDomain, pConfigurableElement, strError),
2461*c33452fbSAndroid Build Coastguard Worker strError);
2462*c33452fbSAndroid Build Coastguard Worker }
2463*c33452fbSAndroid Build Coastguard Worker
split(const string & strDomain,const string & strConfigurableElementPath,string & strError)2464*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::split(const string &strDomain, const string &strConfigurableElementPath,
2465*c33452fbSAndroid Build Coastguard Worker string &strError)
2466*c33452fbSAndroid Build Coastguard Worker {
2467*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Splitting configurable element '" + strConfigurableElementPath + "' domain '" +
2468*c33452fbSAndroid Build Coastguard Worker strDomain + "'");
2469*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2470*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2471*c33452fbSAndroid Build Coastguard Worker
2472*c33452fbSAndroid Build Coastguard Worker warning() << "Fail:" << strError;
2473*c33452fbSAndroid Build Coastguard Worker return false;
2474*c33452fbSAndroid Build Coastguard Worker }
2475*c33452fbSAndroid Build Coastguard Worker
2476*c33452fbSAndroid Build Coastguard Worker CElementLocator elementLocator(getSystemClass());
2477*c33452fbSAndroid Build Coastguard Worker
2478*c33452fbSAndroid Build Coastguard Worker CElement *pLocatedElement = nullptr;
2479*c33452fbSAndroid Build Coastguard Worker
2480*c33452fbSAndroid Build Coastguard Worker if (!elementLocator.locate(strConfigurableElementPath, &pLocatedElement, strError)) {
2481*c33452fbSAndroid Build Coastguard Worker
2482*c33452fbSAndroid Build Coastguard Worker warning() << "Fail: " << strError;
2483*c33452fbSAndroid Build Coastguard Worker return false;
2484*c33452fbSAndroid Build Coastguard Worker }
2485*c33452fbSAndroid Build Coastguard Worker
2486*c33452fbSAndroid Build Coastguard Worker // Convert element
2487*c33452fbSAndroid Build Coastguard Worker CConfigurableElement *pConfigurableElement =
2488*c33452fbSAndroid Build Coastguard Worker static_cast<CConfigurableElement *>(pLocatedElement);
2489*c33452fbSAndroid Build Coastguard Worker
2490*c33452fbSAndroid Build Coastguard Worker // Delegate
2491*c33452fbSAndroid Build Coastguard Worker core::Results infos;
2492*c33452fbSAndroid Build Coastguard Worker bool isSuccess = getConfigurableDomains()->split(strDomain, pConfigurableElement, infos);
2493*c33452fbSAndroid Build Coastguard Worker
2494*c33452fbSAndroid Build Coastguard Worker if (isSuccess) {
2495*c33452fbSAndroid Build Coastguard Worker info() << infos;
2496*c33452fbSAndroid Build Coastguard Worker } else {
2497*c33452fbSAndroid Build Coastguard Worker warning() << infos;
2498*c33452fbSAndroid Build Coastguard Worker }
2499*c33452fbSAndroid Build Coastguard Worker
2500*c33452fbSAndroid Build Coastguard Worker strError = utility::asString(infos);
2501*c33452fbSAndroid Build Coastguard Worker return isSuccess;
2502*c33452fbSAndroid Build Coastguard Worker }
2503*c33452fbSAndroid Build Coastguard Worker
setElementSequence(const string & strDomain,const string & strConfiguration,const std::vector<string> & astrNewElementSequence,string & strError)2504*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setElementSequence(const string &strDomain, const string &strConfiguration,
2505*c33452fbSAndroid Build Coastguard Worker const std::vector<string> &astrNewElementSequence,
2506*c33452fbSAndroid Build Coastguard Worker string &strError)
2507*c33452fbSAndroid Build Coastguard Worker {
2508*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2509*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(strError)) {
2510*c33452fbSAndroid Build Coastguard Worker
2511*c33452fbSAndroid Build Coastguard Worker return false;
2512*c33452fbSAndroid Build Coastguard Worker }
2513*c33452fbSAndroid Build Coastguard Worker
2514*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->setElementSequence(strDomain, strConfiguration,
2515*c33452fbSAndroid Build Coastguard Worker astrNewElementSequence, strError);
2516*c33452fbSAndroid Build Coastguard Worker }
2517*c33452fbSAndroid Build Coastguard Worker
getApplicationRule(const string & strDomain,const string & strConfiguration,string & strResult)2518*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getApplicationRule(const string &strDomain, const string &strConfiguration,
2519*c33452fbSAndroid Build Coastguard Worker string &strResult)
2520*c33452fbSAndroid Build Coastguard Worker {
2521*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->getApplicationRule(strDomain, strConfiguration, strResult);
2522*c33452fbSAndroid Build Coastguard Worker }
2523*c33452fbSAndroid Build Coastguard Worker
setApplicationRule(const string & strDomain,const string & strConfiguration,const string & strApplicationRule,string & strError)2524*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::setApplicationRule(const string &strDomain, const string &strConfiguration,
2525*c33452fbSAndroid Build Coastguard Worker const string &strApplicationRule, string &strError)
2526*c33452fbSAndroid Build Coastguard Worker {
2527*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->setApplicationRule(
2528*c33452fbSAndroid Build Coastguard Worker strDomain, strConfiguration, strApplicationRule,
2529*c33452fbSAndroid Build Coastguard Worker getConstSelectionCriteria()->getSelectionCriteriaDefinition(), strError);
2530*c33452fbSAndroid Build Coastguard Worker }
2531*c33452fbSAndroid Build Coastguard Worker
clearApplicationRule(const string & strDomain,const string & strConfiguration,string & strError)2532*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::clearApplicationRule(const string &strDomain, const string &strConfiguration,
2533*c33452fbSAndroid Build Coastguard Worker string &strError)
2534*c33452fbSAndroid Build Coastguard Worker {
2535*c33452fbSAndroid Build Coastguard Worker return getConfigurableDomains()->clearApplicationRule(strDomain, strConfiguration, strError);
2536*c33452fbSAndroid Build Coastguard Worker }
2537*c33452fbSAndroid Build Coastguard Worker
importDomainsXml(const string & xmlSource,bool withSettings,bool fromFile,string & errorMsg)2538*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::importDomainsXml(const string &xmlSource, bool withSettings, bool fromFile,
2539*c33452fbSAndroid Build Coastguard Worker string &errorMsg)
2540*c33452fbSAndroid Build Coastguard Worker {
2541*c33452fbSAndroid Build Coastguard Worker // Check tuning mode
2542*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(errorMsg)) {
2543*c33452fbSAndroid Build Coastguard Worker
2544*c33452fbSAndroid Build Coastguard Worker return false;
2545*c33452fbSAndroid Build Coastguard Worker }
2546*c33452fbSAndroid Build Coastguard Worker
2547*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Importing domains from " +
2548*c33452fbSAndroid Build Coastguard Worker (fromFile ? ("\"" + xmlSource + "\"") : "a user-provided buffer"));
2549*c33452fbSAndroid Build Coastguard Worker
2550*c33452fbSAndroid Build Coastguard Worker // Root element
2551*c33452fbSAndroid Build Coastguard Worker CConfigurableDomains *pConfigurableDomains = getConfigurableDomains();
2552*c33452fbSAndroid Build Coastguard Worker
2553*c33452fbSAndroid Build Coastguard Worker bool importSuccess = wrapLegacyXmlImport(xmlSource, fromFile, withSettings,
2554*c33452fbSAndroid Build Coastguard Worker *pConfigurableDomains, "SystemClassName", errorMsg);
2555*c33452fbSAndroid Build Coastguard Worker
2556*c33452fbSAndroid Build Coastguard Worker if (importSuccess) {
2557*c33452fbSAndroid Build Coastguard Worker
2558*c33452fbSAndroid Build Coastguard Worker // Validate domains after XML import
2559*c33452fbSAndroid Build Coastguard Worker pConfigurableDomains->validate(_pMainParameterBlackboard);
2560*c33452fbSAndroid Build Coastguard Worker }
2561*c33452fbSAndroid Build Coastguard Worker
2562*c33452fbSAndroid Build Coastguard Worker return importSuccess;
2563*c33452fbSAndroid Build Coastguard Worker }
2564*c33452fbSAndroid Build Coastguard Worker
importSingleDomainXml(const string & xmlSource,bool overwrite,bool withSettings,bool fromFile,string & errorMsg)2565*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::importSingleDomainXml(const string &xmlSource, bool overwrite,
2566*c33452fbSAndroid Build Coastguard Worker bool withSettings, bool fromFile, string &errorMsg)
2567*c33452fbSAndroid Build Coastguard Worker {
2568*c33452fbSAndroid Build Coastguard Worker if (!checkTuningModeOn(errorMsg)) {
2569*c33452fbSAndroid Build Coastguard Worker
2570*c33452fbSAndroid Build Coastguard Worker return false;
2571*c33452fbSAndroid Build Coastguard Worker }
2572*c33452fbSAndroid Build Coastguard Worker
2573*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Importing a single domain from " +
2574*c33452fbSAndroid Build Coastguard Worker (fromFile ? ('"' + xmlSource + '"') : "a user-provided buffer"));
2575*c33452fbSAndroid Build Coastguard Worker
2576*c33452fbSAndroid Build Coastguard Worker // We initialize the domain with an empty name but since we have set the isDomainStandalone
2577*c33452fbSAndroid Build Coastguard Worker // context, the name will be retrieved during de-serialization
2578*c33452fbSAndroid Build Coastguard Worker auto standaloneDomain = utility::make_unique<CConfigurableDomain>();
2579*c33452fbSAndroid Build Coastguard Worker
2580*c33452fbSAndroid Build Coastguard Worker if (!wrapLegacyXmlImport(xmlSource, fromFile, withSettings, *standaloneDomain, "", errorMsg)) {
2581*c33452fbSAndroid Build Coastguard Worker return false;
2582*c33452fbSAndroid Build Coastguard Worker }
2583*c33452fbSAndroid Build Coastguard Worker
2584*c33452fbSAndroid Build Coastguard Worker if (!getConfigurableDomains()->addDomain(*standaloneDomain, overwrite, errorMsg)) {
2585*c33452fbSAndroid Build Coastguard Worker return false;
2586*c33452fbSAndroid Build Coastguard Worker }
2587*c33452fbSAndroid Build Coastguard Worker
2588*c33452fbSAndroid Build Coastguard Worker // ownership has been transfered to the ConfigurableDomains object
2589*c33452fbSAndroid Build Coastguard Worker standaloneDomain.release();
2590*c33452fbSAndroid Build Coastguard Worker return true;
2591*c33452fbSAndroid Build Coastguard Worker }
2592*c33452fbSAndroid Build Coastguard Worker
wrapLegacyXmlImport(const string & xmlSource,bool fromFile,bool withSettings,CElement & element,const string & nameAttributeName,string & errorMsg)2593*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::wrapLegacyXmlImport(const string &xmlSource, bool fromFile, bool withSettings,
2594*c33452fbSAndroid Build Coastguard Worker CElement &element, const string &nameAttributeName,
2595*c33452fbSAndroid Build Coastguard Worker string &errorMsg)
2596*c33452fbSAndroid Build Coastguard Worker {
2597*c33452fbSAndroid Build Coastguard Worker CXmlDomainImportContext xmlDomainImportContext(errorMsg, withSettings, *getSystemClass());
2598*c33452fbSAndroid Build Coastguard Worker
2599*c33452fbSAndroid Build Coastguard Worker // Selection criteria definition for rule creation
2600*c33452fbSAndroid Build Coastguard Worker xmlDomainImportContext.setSelectionCriteriaDefinition(
2601*c33452fbSAndroid Build Coastguard Worker getConstSelectionCriteria()->getSelectionCriteriaDefinition());
2602*c33452fbSAndroid Build Coastguard Worker
2603*c33452fbSAndroid Build Coastguard Worker // It doesn't make sense to resolve XIncludes on an imported file because
2604*c33452fbSAndroid Build Coastguard Worker // we can't reliably decide of a "base url"
2605*c33452fbSAndroid Build Coastguard Worker _xmlDoc *doc = CXmlDocSource::mkXmlDoc(xmlSource, fromFile, false, xmlDomainImportContext);
2606*c33452fbSAndroid Build Coastguard Worker if (doc == nullptr) {
2607*c33452fbSAndroid Build Coastguard Worker return false;
2608*c33452fbSAndroid Build Coastguard Worker }
2609*c33452fbSAndroid Build Coastguard Worker
2610*c33452fbSAndroid Build Coastguard Worker return xmlParse(xmlDomainImportContext, &element, doc, "", EParameterConfigurationLibrary, true,
2611*c33452fbSAndroid Build Coastguard Worker nameAttributeName);
2612*c33452fbSAndroid Build Coastguard Worker }
2613*c33452fbSAndroid Build Coastguard Worker
serializeElement(std::ostream & output,CXmlSerializingContext & xmlSerializingContext,const CElement & element) const2614*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::serializeElement(std::ostream &output,
2615*c33452fbSAndroid Build Coastguard Worker CXmlSerializingContext &xmlSerializingContext,
2616*c33452fbSAndroid Build Coastguard Worker const CElement &element) const
2617*c33452fbSAndroid Build Coastguard Worker {
2618*c33452fbSAndroid Build Coastguard Worker if (!output.good()) {
2619*c33452fbSAndroid Build Coastguard Worker xmlSerializingContext.setError("Can't write XML: the output is in a bad state.");
2620*c33452fbSAndroid Build Coastguard Worker return false;
2621*c33452fbSAndroid Build Coastguard Worker }
2622*c33452fbSAndroid Build Coastguard Worker
2623*c33452fbSAndroid Build Coastguard Worker // Use a doc source by loading data from instantiated Configurable Domains
2624*c33452fbSAndroid Build Coastguard Worker CXmlMemoryDocSource memorySource(&element, _bValidateSchemasOnStart,
2625*c33452fbSAndroid Build Coastguard Worker element.getXmlElementName(), "parameter-framework",
2626*c33452fbSAndroid Build Coastguard Worker getVersion());
2627*c33452fbSAndroid Build Coastguard Worker
2628*c33452fbSAndroid Build Coastguard Worker // Use a doc sink to write the doc data in a stream
2629*c33452fbSAndroid Build Coastguard Worker CXmlStreamDocSink sink(output);
2630*c33452fbSAndroid Build Coastguard Worker
2631*c33452fbSAndroid Build Coastguard Worker bool processSuccess = sink.process(memorySource, xmlSerializingContext);
2632*c33452fbSAndroid Build Coastguard Worker
2633*c33452fbSAndroid Build Coastguard Worker return processSuccess;
2634*c33452fbSAndroid Build Coastguard Worker }
2635*c33452fbSAndroid Build Coastguard Worker
exportDomainsXml(string & xmlDest,bool withSettings,bool toFile,string & errorMsg) const2636*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::exportDomainsXml(string &xmlDest, bool withSettings, bool toFile,
2637*c33452fbSAndroid Build Coastguard Worker string &errorMsg) const
2638*c33452fbSAndroid Build Coastguard Worker {
2639*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Exporting domains to " +
2640*c33452fbSAndroid Build Coastguard Worker (toFile ? ('"' + xmlDest + '"') : "a user-provided buffer"));
2641*c33452fbSAndroid Build Coastguard Worker
2642*c33452fbSAndroid Build Coastguard Worker const CConfigurableDomains *configurableDomains = getConstConfigurableDomains();
2643*c33452fbSAndroid Build Coastguard Worker
2644*c33452fbSAndroid Build Coastguard Worker return wrapLegacyXmlExport(xmlDest, toFile, withSettings, *configurableDomains, errorMsg);
2645*c33452fbSAndroid Build Coastguard Worker }
2646*c33452fbSAndroid Build Coastguard Worker
exportSingleDomainXml(string & xmlDest,const string & domainName,bool withSettings,bool toFile,string & errorMsg) const2647*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::exportSingleDomainXml(string &xmlDest, const string &domainName,
2648*c33452fbSAndroid Build Coastguard Worker bool withSettings, bool toFile, string &errorMsg) const
2649*c33452fbSAndroid Build Coastguard Worker {
2650*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Exporting single domain '" + domainName + "' to " +
2651*c33452fbSAndroid Build Coastguard Worker (toFile ? ('"' + xmlDest + '"') : "a user-provided buffer"));
2652*c33452fbSAndroid Build Coastguard Worker
2653*c33452fbSAndroid Build Coastguard Worker // Element to be serialized
2654*c33452fbSAndroid Build Coastguard Worker const CConfigurableDomain *requestedDomain =
2655*c33452fbSAndroid Build Coastguard Worker getConstConfigurableDomains()->findConfigurableDomain(domainName, errorMsg);
2656*c33452fbSAndroid Build Coastguard Worker
2657*c33452fbSAndroid Build Coastguard Worker if (requestedDomain == nullptr) {
2658*c33452fbSAndroid Build Coastguard Worker return false;
2659*c33452fbSAndroid Build Coastguard Worker }
2660*c33452fbSAndroid Build Coastguard Worker
2661*c33452fbSAndroid Build Coastguard Worker return wrapLegacyXmlExport(xmlDest, toFile, withSettings, *requestedDomain, errorMsg);
2662*c33452fbSAndroid Build Coastguard Worker }
2663*c33452fbSAndroid Build Coastguard Worker
wrapLegacyXmlExport(string & xmlDest,bool toFile,bool withSettings,const CElement & element,string & errorMsg) const2664*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::wrapLegacyXmlExport(string &xmlDest, bool toFile, bool withSettings,
2665*c33452fbSAndroid Build Coastguard Worker const CElement &element, string &errorMsg) const
2666*c33452fbSAndroid Build Coastguard Worker {
2667*c33452fbSAndroid Build Coastguard Worker CXmlDomainExportContext context(errorMsg, withSettings, _bValueSpaceIsRaw,
2668*c33452fbSAndroid Build Coastguard Worker _bOutputRawFormatIsHex);
2669*c33452fbSAndroid Build Coastguard Worker
2670*c33452fbSAndroid Build Coastguard Worker if (toFile) {
2671*c33452fbSAndroid Build Coastguard Worker return wrapLegacyXmlExportToFile(xmlDest, element, context);
2672*c33452fbSAndroid Build Coastguard Worker } else {
2673*c33452fbSAndroid Build Coastguard Worker return wrapLegacyXmlExportToString(xmlDest, element, context);
2674*c33452fbSAndroid Build Coastguard Worker }
2675*c33452fbSAndroid Build Coastguard Worker }
2676*c33452fbSAndroid Build Coastguard Worker
wrapLegacyXmlExportToFile(string & xmlDest,const CElement & element,CXmlDomainExportContext & context) const2677*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::wrapLegacyXmlExportToFile(string &xmlDest, const CElement &element,
2678*c33452fbSAndroid Build Coastguard Worker CXmlDomainExportContext &context) const
2679*c33452fbSAndroid Build Coastguard Worker {
2680*c33452fbSAndroid Build Coastguard Worker try {
2681*c33452fbSAndroid Build Coastguard Worker std::ofstream output;
2682*c33452fbSAndroid Build Coastguard Worker // Force stream to throw instead of using fail/bad bit
2683*c33452fbSAndroid Build Coastguard Worker // in order to retreive an error message.
2684*c33452fbSAndroid Build Coastguard Worker output.exceptions(~std::ifstream::goodbit);
2685*c33452fbSAndroid Build Coastguard Worker
2686*c33452fbSAndroid Build Coastguard Worker output.open(xmlDest.c_str());
2687*c33452fbSAndroid Build Coastguard Worker bool status = serializeElement(output, context, element);
2688*c33452fbSAndroid Build Coastguard Worker output.close(); // Explicit close to detect errors
2689*c33452fbSAndroid Build Coastguard Worker
2690*c33452fbSAndroid Build Coastguard Worker return status;
2691*c33452fbSAndroid Build Coastguard Worker
2692*c33452fbSAndroid Build Coastguard Worker } catch (std::ofstream::failure &e) {
2693*c33452fbSAndroid Build Coastguard Worker context.setError("Failed to open \"" + xmlDest + "\" for writing: " + e.what());
2694*c33452fbSAndroid Build Coastguard Worker return false;
2695*c33452fbSAndroid Build Coastguard Worker }
2696*c33452fbSAndroid Build Coastguard Worker }
2697*c33452fbSAndroid Build Coastguard Worker
wrapLegacyXmlExportToString(string & xmlDest,const CElement & element,CXmlDomainExportContext & context) const2698*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::wrapLegacyXmlExportToString(string &xmlDest, const CElement &element,
2699*c33452fbSAndroid Build Coastguard Worker CXmlDomainExportContext &context) const
2700*c33452fbSAndroid Build Coastguard Worker {
2701*c33452fbSAndroid Build Coastguard Worker std::ostringstream output;
2702*c33452fbSAndroid Build Coastguard Worker
2703*c33452fbSAndroid Build Coastguard Worker if (!serializeElement(output, context, element)) {
2704*c33452fbSAndroid Build Coastguard Worker return false;
2705*c33452fbSAndroid Build Coastguard Worker }
2706*c33452fbSAndroid Build Coastguard Worker
2707*c33452fbSAndroid Build Coastguard Worker xmlDest = output.str();
2708*c33452fbSAndroid Build Coastguard Worker
2709*c33452fbSAndroid Build Coastguard Worker return true;
2710*c33452fbSAndroid Build Coastguard Worker }
2711*c33452fbSAndroid Build Coastguard Worker
2712*c33452fbSAndroid Build Coastguard Worker // For tuning, check we're in tuning mode
checkTuningModeOn(string & strError) const2713*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::checkTuningModeOn(string &strError) const
2714*c33452fbSAndroid Build Coastguard Worker {
2715*c33452fbSAndroid Build Coastguard Worker // Tuning Mode on?
2716*c33452fbSAndroid Build Coastguard Worker if (!_bTuningModeIsOn) {
2717*c33452fbSAndroid Build Coastguard Worker
2718*c33452fbSAndroid Build Coastguard Worker strError = "Tuning Mode must be on";
2719*c33452fbSAndroid Build Coastguard Worker
2720*c33452fbSAndroid Build Coastguard Worker return false;
2721*c33452fbSAndroid Build Coastguard Worker }
2722*c33452fbSAndroid Build Coastguard Worker return true;
2723*c33452fbSAndroid Build Coastguard Worker }
2724*c33452fbSAndroid Build Coastguard Worker
2725*c33452fbSAndroid Build Coastguard Worker // Tuning mutex dynamic parameter handling
getBlackboardMutex()2726*c33452fbSAndroid Build Coastguard Worker std::mutex &CParameterMgr::getBlackboardMutex()
2727*c33452fbSAndroid Build Coastguard Worker {
2728*c33452fbSAndroid Build Coastguard Worker return _blackboardMutex;
2729*c33452fbSAndroid Build Coastguard Worker }
2730*c33452fbSAndroid Build Coastguard Worker
2731*c33452fbSAndroid Build Coastguard Worker // Blackboard reference (dynamic parameter handling)
getParameterBlackboard()2732*c33452fbSAndroid Build Coastguard Worker CParameterBlackboard *CParameterMgr::getParameterBlackboard()
2733*c33452fbSAndroid Build Coastguard Worker {
2734*c33452fbSAndroid Build Coastguard Worker return _pMainParameterBlackboard;
2735*c33452fbSAndroid Build Coastguard Worker }
2736*c33452fbSAndroid Build Coastguard Worker
2737*c33452fbSAndroid Build Coastguard Worker // Dynamic creation library feeding
feedElementLibraries()2738*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::feedElementLibraries()
2739*c33452fbSAndroid Build Coastguard Worker {
2740*c33452fbSAndroid Build Coastguard Worker // Global Configuration handling
2741*c33452fbSAndroid Build Coastguard Worker auto pFrameworkConfigurationLibrary = new CElementLibrary;
2742*c33452fbSAndroid Build Coastguard Worker
2743*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2744*c33452fbSAndroid Build Coastguard Worker "ParameterFrameworkConfiguration",
2745*c33452fbSAndroid Build Coastguard Worker new TElementBuilderTemplate<CParameterFrameworkConfiguration>());
2746*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2747*c33452fbSAndroid Build Coastguard Worker "SubsystemPlugins", new TKindElementBuilderTemplate<CSubsystemPlugins>());
2748*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2749*c33452fbSAndroid Build Coastguard Worker "Location", new TKindElementBuilderTemplate<CPluginLocation>());
2750*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2751*c33452fbSAndroid Build Coastguard Worker "StructureDescriptionFileLocation",
2752*c33452fbSAndroid Build Coastguard Worker new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>());
2753*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2754*c33452fbSAndroid Build Coastguard Worker "SettingsConfiguration", new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>());
2755*c33452fbSAndroid Build Coastguard Worker pFrameworkConfigurationLibrary->addElementBuilder(
2756*c33452fbSAndroid Build Coastguard Worker "ConfigurableDomainsFileLocation",
2757*c33452fbSAndroid Build Coastguard Worker new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>());
2758*c33452fbSAndroid Build Coastguard Worker
2759*c33452fbSAndroid Build Coastguard Worker _pElementLibrarySet->addElementLibrary(pFrameworkConfigurationLibrary);
2760*c33452fbSAndroid Build Coastguard Worker
2761*c33452fbSAndroid Build Coastguard Worker // Parameter creation
2762*c33452fbSAndroid Build Coastguard Worker auto pParameterCreationLibrary = new CElementLibrary;
2763*c33452fbSAndroid Build Coastguard Worker
2764*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2765*c33452fbSAndroid Build Coastguard Worker "Subsystem", new CSubsystemElementBuilder(getSystemClass()->getSubsystemLibrary()));
2766*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2767*c33452fbSAndroid Build Coastguard Worker "ComponentType", new TNamedElementBuilderTemplate<CComponentType>());
2768*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2769*c33452fbSAndroid Build Coastguard Worker "Component", new TNamedElementBuilderTemplate<CComponentInstance>());
2770*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2771*c33452fbSAndroid Build Coastguard Worker "BitParameter", new TNamedElementBuilderTemplate<CBitParameterType>());
2772*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2773*c33452fbSAndroid Build Coastguard Worker "BitParameterBlock", new TNamedElementBuilderTemplate<CBitParameterBlockType>());
2774*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2775*c33452fbSAndroid Build Coastguard Worker "StringParameter", new TNamedElementBuilderTemplate<CStringParameterType>());
2776*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2777*c33452fbSAndroid Build Coastguard Worker "ParameterBlock", new TNamedElementBuilderTemplate<CParameterBlockType>());
2778*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2779*c33452fbSAndroid Build Coastguard Worker "BooleanParameter", new TNamedElementBuilderTemplate<CBooleanParameterType>());
2780*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder("IntegerParameter", new IntegerParameterBuilder());
2781*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2782*c33452fbSAndroid Build Coastguard Worker "LinearAdaptation", new TElementBuilderTemplate<CLinearParameterAdaptation>());
2783*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2784*c33452fbSAndroid Build Coastguard Worker "LogarithmicAdaptation", new TElementBuilderTemplate<CLogarithmicParameterAdaptation>());
2785*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2786*c33452fbSAndroid Build Coastguard Worker "EnumParameter", new TNamedElementBuilderTemplate<CEnumParameterType>());
2787*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder("ValuePair",
2788*c33452fbSAndroid Build Coastguard Worker new TElementBuilderTemplate<CEnumValuePair>());
2789*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2790*c33452fbSAndroid Build Coastguard Worker "FixedPointParameter", new TNamedElementBuilderTemplate<CFixedPointParameterType>());
2791*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2792*c33452fbSAndroid Build Coastguard Worker "FloatingPointParameter", new TNamedElementBuilderTemplate<CFloatingPointParameterType>);
2793*c33452fbSAndroid Build Coastguard Worker pParameterCreationLibrary->addElementBuilder(
2794*c33452fbSAndroid Build Coastguard Worker "SubsystemInclude",
2795*c33452fbSAndroid Build Coastguard Worker new CFileIncluderElementBuilder(_bValidateSchemasOnStart, getSchemaUri()));
2796*c33452fbSAndroid Build Coastguard Worker
2797*c33452fbSAndroid Build Coastguard Worker _pElementLibrarySet->addElementLibrary(pParameterCreationLibrary);
2798*c33452fbSAndroid Build Coastguard Worker
2799*c33452fbSAndroid Build Coastguard Worker // Parameter Configuration Domains creation
2800*c33452fbSAndroid Build Coastguard Worker auto pParameterConfigurationLibrary = new CElementLibrary;
2801*c33452fbSAndroid Build Coastguard Worker
2802*c33452fbSAndroid Build Coastguard Worker pParameterConfigurationLibrary->addElementBuilder(
2803*c33452fbSAndroid Build Coastguard Worker "ConfigurableDomain", new TElementBuilderTemplate<CConfigurableDomain>());
2804*c33452fbSAndroid Build Coastguard Worker pParameterConfigurationLibrary->addElementBuilder(
2805*c33452fbSAndroid Build Coastguard Worker "Configuration", new TNamedElementBuilderTemplate<CDomainConfiguration>());
2806*c33452fbSAndroid Build Coastguard Worker pParameterConfigurationLibrary->addElementBuilder("CompoundRule",
2807*c33452fbSAndroid Build Coastguard Worker new TElementBuilderTemplate<CCompoundRule>());
2808*c33452fbSAndroid Build Coastguard Worker pParameterConfigurationLibrary->addElementBuilder(
2809*c33452fbSAndroid Build Coastguard Worker "SelectionCriterionRule", new TElementBuilderTemplate<CSelectionCriterionRule>());
2810*c33452fbSAndroid Build Coastguard Worker
2811*c33452fbSAndroid Build Coastguard Worker _pElementLibrarySet->addElementLibrary(pParameterConfigurationLibrary);
2812*c33452fbSAndroid Build Coastguard Worker }
2813*c33452fbSAndroid Build Coastguard Worker
getForceNoRemoteInterface() const2814*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::getForceNoRemoteInterface() const
2815*c33452fbSAndroid Build Coastguard Worker {
2816*c33452fbSAndroid Build Coastguard Worker return _bForceNoRemoteInterface;
2817*c33452fbSAndroid Build Coastguard Worker }
2818*c33452fbSAndroid Build Coastguard Worker
setForceNoRemoteInterface(bool bForceNoRemoteInterface)2819*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::setForceNoRemoteInterface(bool bForceNoRemoteInterface)
2820*c33452fbSAndroid Build Coastguard Worker {
2821*c33452fbSAndroid Build Coastguard Worker _bForceNoRemoteInterface = bForceNoRemoteInterface;
2822*c33452fbSAndroid Build Coastguard Worker }
2823*c33452fbSAndroid Build Coastguard Worker
createCommandHandler()2824*c33452fbSAndroid Build Coastguard Worker CParameterMgr::CommandHandler CParameterMgr::createCommandHandler()
2825*c33452fbSAndroid Build Coastguard Worker {
2826*c33452fbSAndroid Build Coastguard Worker auto commandHandler = utility::make_unique<CCommandHandler>(this);
2827*c33452fbSAndroid Build Coastguard Worker
2828*c33452fbSAndroid Build Coastguard Worker // Add command parsers
2829*c33452fbSAndroid Build Coastguard Worker for (const auto &remoteCommandParserItem : gastRemoteCommandParserItems) {
2830*c33452fbSAndroid Build Coastguard Worker commandHandler->addCommandParser(
2831*c33452fbSAndroid Build Coastguard Worker remoteCommandParserItem._pcCommandName, remoteCommandParserItem._pfnParser,
2832*c33452fbSAndroid Build Coastguard Worker remoteCommandParserItem._minArgumentCount, remoteCommandParserItem._pcHelp,
2833*c33452fbSAndroid Build Coastguard Worker remoteCommandParserItem._pcDescription);
2834*c33452fbSAndroid Build Coastguard Worker }
2835*c33452fbSAndroid Build Coastguard Worker
2836*c33452fbSAndroid Build Coastguard Worker return commandHandler;
2837*c33452fbSAndroid Build Coastguard Worker }
2838*c33452fbSAndroid Build Coastguard Worker
isRemoteInterfaceRequired()2839*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::isRemoteInterfaceRequired()
2840*c33452fbSAndroid Build Coastguard Worker {
2841*c33452fbSAndroid Build Coastguard Worker // The remote interface should only be started if the client didn't
2842*c33452fbSAndroid Build Coastguard Worker // explicitly forbid it and if the configuration file allows it.
2843*c33452fbSAndroid Build Coastguard Worker return (not _bForceNoRemoteInterface) and getConstFrameworkConfiguration()->isTuningAllowed();
2844*c33452fbSAndroid Build Coastguard Worker }
2845*c33452fbSAndroid Build Coastguard Worker
2846*c33452fbSAndroid Build Coastguard Worker // Remote Processor Server connection handling
handleRemoteProcessingInterface(string & strError)2847*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::handleRemoteProcessingInterface(string &strError)
2848*c33452fbSAndroid Build Coastguard Worker {
2849*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Handling remote processing interface");
2850*c33452fbSAndroid Build Coastguard Worker
2851*c33452fbSAndroid Build Coastguard Worker if (not isRemoteInterfaceRequired()) {
2852*c33452fbSAndroid Build Coastguard Worker return true;
2853*c33452fbSAndroid Build Coastguard Worker }
2854*c33452fbSAndroid Build Coastguard Worker
2855*c33452fbSAndroid Build Coastguard Worker auto bindAddress = getConstFrameworkConfiguration()->getServerBindAddress();
2856*c33452fbSAndroid Build Coastguard Worker
2857*c33452fbSAndroid Build Coastguard Worker try {
2858*c33452fbSAndroid Build Coastguard Worker // The ownership of remoteComandHandler is given to Bg remote processor server.
2859*c33452fbSAndroid Build Coastguard Worker _pRemoteProcessorServer =
2860*c33452fbSAndroid Build Coastguard Worker new BackgroundRemoteProcessorServer(bindAddress, createCommandHandler());
2861*c33452fbSAndroid Build Coastguard Worker } catch (std::runtime_error &e) {
2862*c33452fbSAndroid Build Coastguard Worker strError = string("ParameterMgr: Unable to create Remote Processor Server: ") + e.what();
2863*c33452fbSAndroid Build Coastguard Worker return false;
2864*c33452fbSAndroid Build Coastguard Worker }
2865*c33452fbSAndroid Build Coastguard Worker
2866*c33452fbSAndroid Build Coastguard Worker if (_pRemoteProcessorServer == nullptr) {
2867*c33452fbSAndroid Build Coastguard Worker strError = "ParameterMgr: Unable to create Remote Processor Server";
2868*c33452fbSAndroid Build Coastguard Worker return false;
2869*c33452fbSAndroid Build Coastguard Worker }
2870*c33452fbSAndroid Build Coastguard Worker
2871*c33452fbSAndroid Build Coastguard Worker if (!_pRemoteProcessorServer->start(strError)) {
2872*c33452fbSAndroid Build Coastguard Worker ostringstream oss;
2873*c33452fbSAndroid Build Coastguard Worker oss << "ParameterMgr: Unable to start remote processor server on " << bindAddress;
2874*c33452fbSAndroid Build Coastguard Worker strError = oss.str() + ": " + strError;
2875*c33452fbSAndroid Build Coastguard Worker return false;
2876*c33452fbSAndroid Build Coastguard Worker }
2877*c33452fbSAndroid Build Coastguard Worker info() << "Remote Processor Server started on " << bindAddress;
2878*c33452fbSAndroid Build Coastguard Worker return true;
2879*c33452fbSAndroid Build Coastguard Worker }
2880*c33452fbSAndroid Build Coastguard Worker
2881*c33452fbSAndroid Build Coastguard Worker // Children typwise access
getFrameworkConfiguration()2882*c33452fbSAndroid Build Coastguard Worker CParameterFrameworkConfiguration *CParameterMgr::getFrameworkConfiguration()
2883*c33452fbSAndroid Build Coastguard Worker {
2884*c33452fbSAndroid Build Coastguard Worker return static_cast<CParameterFrameworkConfiguration *>(getChild(EFrameworkConfiguration));
2885*c33452fbSAndroid Build Coastguard Worker }
2886*c33452fbSAndroid Build Coastguard Worker
getConstFrameworkConfiguration()2887*c33452fbSAndroid Build Coastguard Worker const CParameterFrameworkConfiguration *CParameterMgr::getConstFrameworkConfiguration()
2888*c33452fbSAndroid Build Coastguard Worker {
2889*c33452fbSAndroid Build Coastguard Worker return getFrameworkConfiguration();
2890*c33452fbSAndroid Build Coastguard Worker }
2891*c33452fbSAndroid Build Coastguard Worker
getSelectionCriteria()2892*c33452fbSAndroid Build Coastguard Worker CSelectionCriteria *CParameterMgr::getSelectionCriteria()
2893*c33452fbSAndroid Build Coastguard Worker {
2894*c33452fbSAndroid Build Coastguard Worker return static_cast<CSelectionCriteria *>(getChild(ESelectionCriteria));
2895*c33452fbSAndroid Build Coastguard Worker }
2896*c33452fbSAndroid Build Coastguard Worker
getConstSelectionCriteria()2897*c33452fbSAndroid Build Coastguard Worker const CSelectionCriteria *CParameterMgr::getConstSelectionCriteria()
2898*c33452fbSAndroid Build Coastguard Worker {
2899*c33452fbSAndroid Build Coastguard Worker return static_cast<const CSelectionCriteria *>(getChild(ESelectionCriteria));
2900*c33452fbSAndroid Build Coastguard Worker }
2901*c33452fbSAndroid Build Coastguard Worker
getSystemClass()2902*c33452fbSAndroid Build Coastguard Worker CSystemClass *CParameterMgr::getSystemClass()
2903*c33452fbSAndroid Build Coastguard Worker {
2904*c33452fbSAndroid Build Coastguard Worker return static_cast<CSystemClass *>(getChild(ESystemClass));
2905*c33452fbSAndroid Build Coastguard Worker }
2906*c33452fbSAndroid Build Coastguard Worker
getConstSystemClass() const2907*c33452fbSAndroid Build Coastguard Worker const CSystemClass *CParameterMgr::getConstSystemClass() const
2908*c33452fbSAndroid Build Coastguard Worker {
2909*c33452fbSAndroid Build Coastguard Worker return static_cast<const CSystemClass *>(getChild(ESystemClass));
2910*c33452fbSAndroid Build Coastguard Worker }
2911*c33452fbSAndroid Build Coastguard Worker
2912*c33452fbSAndroid Build Coastguard Worker // Configurable Domains
getConfigurableDomains()2913*c33452fbSAndroid Build Coastguard Worker CConfigurableDomains *CParameterMgr::getConfigurableDomains()
2914*c33452fbSAndroid Build Coastguard Worker {
2915*c33452fbSAndroid Build Coastguard Worker return static_cast<CConfigurableDomains *>(getChild(EConfigurableDomains));
2916*c33452fbSAndroid Build Coastguard Worker }
2917*c33452fbSAndroid Build Coastguard Worker
getConstConfigurableDomains()2918*c33452fbSAndroid Build Coastguard Worker const CConfigurableDomains *CParameterMgr::getConstConfigurableDomains()
2919*c33452fbSAndroid Build Coastguard Worker {
2920*c33452fbSAndroid Build Coastguard Worker return static_cast<const CConfigurableDomains *>(getChild(EConfigurableDomains));
2921*c33452fbSAndroid Build Coastguard Worker }
2922*c33452fbSAndroid Build Coastguard Worker
getConstConfigurableDomains() const2923*c33452fbSAndroid Build Coastguard Worker const CConfigurableDomains *CParameterMgr::getConstConfigurableDomains() const
2924*c33452fbSAndroid Build Coastguard Worker {
2925*c33452fbSAndroid Build Coastguard Worker return static_cast<const CConfigurableDomains *>(getChild(EConfigurableDomains));
2926*c33452fbSAndroid Build Coastguard Worker }
2927*c33452fbSAndroid Build Coastguard Worker
2928*c33452fbSAndroid Build Coastguard Worker // Apply configurations
doApplyConfigurations(bool bForce)2929*c33452fbSAndroid Build Coastguard Worker void CParameterMgr::doApplyConfigurations(bool bForce)
2930*c33452fbSAndroid Build Coastguard Worker {
2931*c33452fbSAndroid Build Coastguard Worker LOG_CONTEXT("Applying configurations");
2932*c33452fbSAndroid Build Coastguard Worker
2933*c33452fbSAndroid Build Coastguard Worker CSyncerSet syncerSet;
2934*c33452fbSAndroid Build Coastguard Worker
2935*c33452fbSAndroid Build Coastguard Worker core::Results infos;
2936*c33452fbSAndroid Build Coastguard Worker // Check subsystems that need resync
2937*c33452fbSAndroid Build Coastguard Worker getSystemClass()->checkForSubsystemsToResync(syncerSet, infos);
2938*c33452fbSAndroid Build Coastguard Worker
2939*c33452fbSAndroid Build Coastguard Worker // Ensure application of currently selected configurations
2940*c33452fbSAndroid Build Coastguard Worker getConfigurableDomains()->apply(_pMainParameterBlackboard, syncerSet, bForce, infos);
2941*c33452fbSAndroid Build Coastguard Worker info() << infos;
2942*c33452fbSAndroid Build Coastguard Worker
2943*c33452fbSAndroid Build Coastguard Worker // Reset the modified status of the current criteria to indicate that a new configuration has
2944*c33452fbSAndroid Build Coastguard Worker // been applied
2945*c33452fbSAndroid Build Coastguard Worker getSelectionCriteria()->resetModifiedStatus();
2946*c33452fbSAndroid Build Coastguard Worker }
2947*c33452fbSAndroid Build Coastguard Worker
2948*c33452fbSAndroid Build Coastguard Worker // Export to XML string
exportElementToXMLString(const IXmlSource * pXmlSource,const string & strRootElementType,CXmlSerializingContext && xmlSerializingContext,string & strResult) const2949*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::exportElementToXMLString(const IXmlSource *pXmlSource,
2950*c33452fbSAndroid Build Coastguard Worker const string &strRootElementType,
2951*c33452fbSAndroid Build Coastguard Worker CXmlSerializingContext &&xmlSerializingContext,
2952*c33452fbSAndroid Build Coastguard Worker string &strResult) const
2953*c33452fbSAndroid Build Coastguard Worker {
2954*c33452fbSAndroid Build Coastguard Worker // Use a doc source by loading data from instantiated Configurable Domains
2955*c33452fbSAndroid Build Coastguard Worker CXmlMemoryDocSource memorySource(pXmlSource, false, strRootElementType);
2956*c33452fbSAndroid Build Coastguard Worker
2957*c33452fbSAndroid Build Coastguard Worker // Use a doc sink that write the doc data in a string
2958*c33452fbSAndroid Build Coastguard Worker ostringstream output;
2959*c33452fbSAndroid Build Coastguard Worker CXmlStreamDocSink streamSink(output);
2960*c33452fbSAndroid Build Coastguard Worker
2961*c33452fbSAndroid Build Coastguard Worker // Do the export
2962*c33452fbSAndroid Build Coastguard Worker bool bProcessSuccess = streamSink.process(memorySource, xmlSerializingContext);
2963*c33452fbSAndroid Build Coastguard Worker
2964*c33452fbSAndroid Build Coastguard Worker strResult = output.str();
2965*c33452fbSAndroid Build Coastguard Worker
2966*c33452fbSAndroid Build Coastguard Worker return bProcessSuccess;
2967*c33452fbSAndroid Build Coastguard Worker }
2968*c33452fbSAndroid Build Coastguard Worker
logResult(bool isSuccess,const std::string & result)2969*c33452fbSAndroid Build Coastguard Worker bool CParameterMgr::logResult(bool isSuccess, const std::string &result)
2970*c33452fbSAndroid Build Coastguard Worker {
2971*c33452fbSAndroid Build Coastguard Worker std::string log = result.empty() ? "" : ": " + result;
2972*c33452fbSAndroid Build Coastguard Worker
2973*c33452fbSAndroid Build Coastguard Worker if (isSuccess) {
2974*c33452fbSAndroid Build Coastguard Worker info() << "Success" << log;
2975*c33452fbSAndroid Build Coastguard Worker } else {
2976*c33452fbSAndroid Build Coastguard Worker warning() << "Fail" << log;
2977*c33452fbSAndroid Build Coastguard Worker }
2978*c33452fbSAndroid Build Coastguard Worker
2979*c33452fbSAndroid Build Coastguard Worker return isSuccess;
2980*c33452fbSAndroid Build Coastguard Worker }
2981*c33452fbSAndroid Build Coastguard Worker
info()2982*c33452fbSAndroid Build Coastguard Worker log::details::Info CParameterMgr::info()
2983*c33452fbSAndroid Build Coastguard Worker {
2984*c33452fbSAndroid Build Coastguard Worker return _logger.info();
2985*c33452fbSAndroid Build Coastguard Worker }
2986*c33452fbSAndroid Build Coastguard Worker
warning()2987*c33452fbSAndroid Build Coastguard Worker log::details::Warning CParameterMgr::warning()
2988*c33452fbSAndroid Build Coastguard Worker {
2989*c33452fbSAndroid Build Coastguard Worker return _logger.warning();
2990*c33452fbSAndroid Build Coastguard Worker }
2991