xref: /aosp_15_r20/external/openthread/tools/ot-fct/cli.hpp (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
1*cfb92d14SAndroid Build Coastguard Worker /*
2*cfb92d14SAndroid Build Coastguard Worker  *  Copyright (c) 2022, The OpenThread Authors.
3*cfb92d14SAndroid Build Coastguard Worker  *  All rights reserved.
4*cfb92d14SAndroid Build Coastguard Worker  *
5*cfb92d14SAndroid Build Coastguard Worker  *  Redistribution and use in source and binary forms, with or without
6*cfb92d14SAndroid Build Coastguard Worker  *  modification, are permitted provided that the following conditions are met:
7*cfb92d14SAndroid Build Coastguard Worker  *  1. Redistributions of source code must strain the above copyright
8*cfb92d14SAndroid Build Coastguard Worker  *     notice, this list of conditions and the following disclaimer.
9*cfb92d14SAndroid Build Coastguard Worker  *  2. Redistributions in binary form must reproduce the above copyright
10*cfb92d14SAndroid Build Coastguard Worker  *     notice, this list of conditions and the following disclaimer in the
11*cfb92d14SAndroid Build Coastguard Worker  *     documentation and/or other materials provided with the distribution.
12*cfb92d14SAndroid Build Coastguard Worker  *  3. Neither the name of the copyright holder nor the
13*cfb92d14SAndroid Build Coastguard Worker  *     names of its contributors may be used to endorse or promote products
14*cfb92d14SAndroid Build Coastguard Worker  *     derived from this software without specific prior written permission.
15*cfb92d14SAndroid Build Coastguard Worker  *
16*cfb92d14SAndroid Build Coastguard Worker  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*cfb92d14SAndroid Build Coastguard Worker  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*cfb92d14SAndroid Build Coastguard Worker  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*cfb92d14SAndroid Build Coastguard Worker  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20*cfb92d14SAndroid Build Coastguard Worker  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*cfb92d14SAndroid Build Coastguard Worker  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*cfb92d14SAndroid Build Coastguard Worker  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*cfb92d14SAndroid Build Coastguard Worker  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*cfb92d14SAndroid Build Coastguard Worker  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*cfb92d14SAndroid Build Coastguard Worker  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*cfb92d14SAndroid Build Coastguard Worker  *  POSSIBILITY OF SUCH DAMAGE.
27*cfb92d14SAndroid Build Coastguard Worker  */
28*cfb92d14SAndroid Build Coastguard Worker 
29*cfb92d14SAndroid Build Coastguard Worker #ifndef CLI_H
30*cfb92d14SAndroid Build Coastguard Worker #define CLI_H
31*cfb92d14SAndroid Build Coastguard Worker 
32*cfb92d14SAndroid Build Coastguard Worker #include "openthread-posix-config.h"
33*cfb92d14SAndroid Build Coastguard Worker 
34*cfb92d14SAndroid Build Coastguard Worker #include <stdint.h>
35*cfb92d14SAndroid Build Coastguard Worker #include <stdio.h>
36*cfb92d14SAndroid Build Coastguard Worker 
37*cfb92d14SAndroid Build Coastguard Worker #include "config_file.hpp"
38*cfb92d14SAndroid Build Coastguard Worker #include "power.hpp"
39*cfb92d14SAndroid Build Coastguard Worker #include "utils/parse_cmdline.hpp"
40*cfb92d14SAndroid Build Coastguard Worker 
41*cfb92d14SAndroid Build Coastguard Worker #include <openthread/error.h>
42*cfb92d14SAndroid Build Coastguard Worker #include <openthread/platform/radio.h>
43*cfb92d14SAndroid Build Coastguard Worker 
44*cfb92d14SAndroid Build Coastguard Worker namespace ot {
45*cfb92d14SAndroid Build Coastguard Worker namespace Fct {
46*cfb92d14SAndroid Build Coastguard Worker 
47*cfb92d14SAndroid Build Coastguard Worker class Cli;
48*cfb92d14SAndroid Build Coastguard Worker 
49*cfb92d14SAndroid Build Coastguard Worker /**
50*cfb92d14SAndroid Build Coastguard Worker  * Implements the factory CLI.
51*cfb92d14SAndroid Build Coastguard Worker  *
52*cfb92d14SAndroid Build Coastguard Worker  */
53*cfb92d14SAndroid Build Coastguard Worker class Cli
54*cfb92d14SAndroid Build Coastguard Worker {
55*cfb92d14SAndroid Build Coastguard Worker public:
Cli(void)56*cfb92d14SAndroid Build Coastguard Worker     Cli(void)
57*cfb92d14SAndroid Build Coastguard Worker         : mFactoryConfigFile(OPENTHREAD_POSIX_CONFIG_FACTORY_CONFIG_FILE)
58*cfb92d14SAndroid Build Coastguard Worker         , mProductConfigFile(OPENTHREAD_POSIX_CONFIG_PRODUCT_CONFIG_FILE)
59*cfb92d14SAndroid Build Coastguard Worker     {
60*cfb92d14SAndroid Build Coastguard Worker     }
61*cfb92d14SAndroid Build Coastguard Worker 
62*cfb92d14SAndroid Build Coastguard Worker     /**
63*cfb92d14SAndroid Build Coastguard Worker      * Processes a factory command.
64*cfb92d14SAndroid Build Coastguard Worker      *
65*cfb92d14SAndroid Build Coastguard Worker      * @param[in]   aArgs          The arguments of command line.
66*cfb92d14SAndroid Build Coastguard Worker      * @param[in]   aArgsLength    The number of args in @p aArgs.
67*cfb92d14SAndroid Build Coastguard Worker      *
68*cfb92d14SAndroid Build Coastguard Worker      */
69*cfb92d14SAndroid Build Coastguard Worker     void ProcessCommand(Utils::CmdLineParser::Arg aArgs[]);
70*cfb92d14SAndroid Build Coastguard Worker 
71*cfb92d14SAndroid Build Coastguard Worker     /**
72*cfb92d14SAndroid Build Coastguard Worker      * Processes the command line.
73*cfb92d14SAndroid Build Coastguard Worker      *
74*cfb92d14SAndroid Build Coastguard Worker      * @param[in]  aLine   A pointer to a command line string.
75*cfb92d14SAndroid Build Coastguard Worker      *
76*cfb92d14SAndroid Build Coastguard Worker      */
77*cfb92d14SAndroid Build Coastguard Worker     void ProcessLine(char *aLine);
78*cfb92d14SAndroid Build Coastguard Worker 
79*cfb92d14SAndroid Build Coastguard Worker     /**
80*cfb92d14SAndroid Build Coastguard Worker      * Outputs the prompt.
81*cfb92d14SAndroid Build Coastguard Worker      *
82*cfb92d14SAndroid Build Coastguard Worker      */
83*cfb92d14SAndroid Build Coastguard Worker     void OutputPrompt(void);
84*cfb92d14SAndroid Build Coastguard Worker 
85*cfb92d14SAndroid Build Coastguard Worker private:
86*cfb92d14SAndroid Build Coastguard Worker     static constexpr uint16_t kMaxValueSize           = 512;
87*cfb92d14SAndroid Build Coastguard Worker     const char               *kKeyCalibratedPower     = "calibrated_power";
88*cfb92d14SAndroid Build Coastguard Worker     const char               *kKeyTargetPower         = "target_power";
89*cfb92d14SAndroid Build Coastguard Worker     const char               *kKeyRegionDomainMapping = "region_domain_mapping";
90*cfb92d14SAndroid Build Coastguard Worker     const char               *kCommaDelimiter         = ",";
91*cfb92d14SAndroid Build Coastguard Worker 
92*cfb92d14SAndroid Build Coastguard Worker     struct Command
93*cfb92d14SAndroid Build Coastguard Worker     {
94*cfb92d14SAndroid Build Coastguard Worker         const char *mName;
95*cfb92d14SAndroid Build Coastguard Worker         otError (Cli::*mCommand)(Utils::CmdLineParser::Arg aArgs[]);
96*cfb92d14SAndroid Build Coastguard Worker     };
97*cfb92d14SAndroid Build Coastguard Worker 
98*cfb92d14SAndroid Build Coastguard Worker     otError ParseNextCalibratedPower(char                   *aCalibratedPowerString,
99*cfb92d14SAndroid Build Coastguard Worker                                      uint16_t                aLength,
100*cfb92d14SAndroid Build Coastguard Worker                                      uint16_t               &aIterator,
101*cfb92d14SAndroid Build Coastguard Worker                                      Power::CalibratedPower &aCalibratedPower);
102*cfb92d14SAndroid Build Coastguard Worker     otError ProcessCalibrationTable(Utils::CmdLineParser::Arg aArgs[]);
103*cfb92d14SAndroid Build Coastguard Worker     otError ProcessTargetPowerTable(Utils::CmdLineParser::Arg aArgs[]);
104*cfb92d14SAndroid Build Coastguard Worker     otError ProcessRegionDomainTable(Utils::CmdLineParser::Arg aArgs[]);
105*cfb92d14SAndroid Build Coastguard Worker     otError GetNextDomain(int &aIterator, Power::Domain &aDomain);
106*cfb92d14SAndroid Build Coastguard Worker     otError GetNextTargetPower(const Power::Domain &aDomain, int &aIterator, Power::TargetPower &aTargetPower);
107*cfb92d14SAndroid Build Coastguard Worker 
108*cfb92d14SAndroid Build Coastguard Worker     void AppendErrorResult(otError aError);
109*cfb92d14SAndroid Build Coastguard Worker 
110*cfb92d14SAndroid Build Coastguard Worker     static const struct Command sCommands[];
111*cfb92d14SAndroid Build Coastguard Worker 
112*cfb92d14SAndroid Build Coastguard Worker     ot::Posix::ConfigFile mFactoryConfigFile;
113*cfb92d14SAndroid Build Coastguard Worker     ot::Posix::ConfigFile mProductConfigFile;
114*cfb92d14SAndroid Build Coastguard Worker };
115*cfb92d14SAndroid Build Coastguard Worker } // namespace Fct
116*cfb92d14SAndroid Build Coastguard Worker } // namespace ot
117*cfb92d14SAndroid Build Coastguard Worker #endif
118