uuu
uuu (Universal Update Utility), mfgtools 3.0
Loading...
Searching...
No Matches
cmd.h
Go to the documentation of this file.
1/*
2* Copyright 2018 NXP.
3*
4* Redistribution and use in source and binary forms, with or without modification,
5* are permitted provided that the following conditions are met:
6*
7* Redistributions of source code must retain the above copyright notice, this
8* list of conditions and the following disclaimer.
9*
10* Redistributions in binary form must reproduce the above copyright notice, this
11* list of conditions and the following disclaimer in the documentation and/or
12* other materials provided with the distribution.
13*
14* Neither the name of the NXP Semiconductor nor the names of its
15* contributors may be used to endorse or promote products derived from this
16* software without specific prior written permission.
17*
18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28* POSSIBILITY OF SUCH DAMAGE.
29*
30*/
31
32#pragma once
33
34#include <map>
35#include <memory>
36#include <string>
37#include <vector>
38#include "trans.h"
39
40class ConfigItem;
41
42std::string get_next_param(const std::string &cmd, size_t &pos, char separate = ' ');
43
44class CmdCtx
45{
46public:
47 CmdCtx() = default;
48 CmdCtx(const CmdCtx&) = delete;
49 CmdCtx& operator=(const CmdCtx&) = delete;
50 virtual ~CmdCtx();
51
55};
56
57class CmdUsbCtx : public CmdCtx
58{
59public:
60 ~CmdUsbCtx() override;
61 int look_for_match_device(const char * protocol);
62};
63
64struct Param
65{
75
76 const char * const key;
77 const char * const Error;
78 void *pData;
79 const Type type;
80 const bool ignore_case;
81 Param(const char *ky, void *pD, Type tp, bool ignore = true, const char *error = nullptr) :
82 key{ky}, Error{error}, pData{pD}, type{tp}, ignore_case{ignore}
83 {
84 }
85};
86
88{
89public:
90 CmdBase() = default;
91 CmdBase(const char *p) { if (p) m_cmd = p; }
92 virtual ~CmdBase();
93
94 virtual int dump();
95 const std::string& get_cmd() const noexcept { return m_cmd; }
96 bool get_lastcmd() const noexcept { return m_lastcmd; }
97 void insert_param_info(const char *key, void *pD, Param::Type tp, bool ignore_case = true, const char* err = nullptr)
98 {
99 m_param.emplace_back(Param{key, pD, tp, ignore_case, err});
100 }
101 virtual int parser_protocol(char *p, size_t &pos);
102 virtual int parser(char *p = nullptr);
103 virtual int run(CmdCtx *p) = 0;
104
105protected:
106 bool m_bCheckTotalParam = false;
107 std::string m_cmd;
108 bool m_lastcmd = false;
109 bool m_NoKeyParam = false;
110 int m_timeout = 10000;
111
112private:
113 std::vector<Param> m_param;
114};
115
116using CreateCmdObj = std::shared_ptr<CmdBase> (*) (char *);
117
118class CmdObjCreateMap:public std::map<std::string, CreateCmdObj>
119{
120public:
122};
123
124class CmdDone :public CmdBase
125{
126public:
127 CmdDone(const char *p) :CmdBase(p) { m_lastcmd = true; }
128
129 int run(CmdCtx *p) override;
130};
131
132class CmdDelay :public CmdBase
133{
134public:
135 CmdDelay(const char *p) :CmdBase(p) {}
136
137 int parser(char *p = nullptr) override;
138 int run(CmdCtx *p) override;
139
140private:
141 int m_ms = 0;
142};
143
144class CmdError : public CmdBase
145{
146public:
147 CmdError(const char *p) :CmdBase(p) {}
148 int parser(char *p = nullptr) override;
149 int run(CmdCtx *p) override;
150
151private:
152 std::string m_error;
153};
154
155class CmdShell : public CmdBase
156{
157public:
158 CmdShell(const char *p) : CmdBase(p) {}
159
160 int parser(char *p = nullptr) override;
161 int run(CmdCtx *p) override;
162
163private:
164 bool m_dyn = false;
165 std::string m_protocol;
166 std::string m_shellcmd;
167};
168
169class CmdIf : public CmdBase
170{
171public:
172 CmdIf(const char *p) : CmdBase(p) {}
173
174 int parser(char *p = nullptr) override;
175 int run(CmdCtx *p) override;
176
177private:
178 std::string m_condition;
179 std::string m_protocol;
180 std::string m_true_cmd;
181 void build_map(CmdCtx *p);
182};
183
184class CmdEnv : public CmdBase
185{
186public:
187 using CmdBase::CmdBase;
188
189 int parser(char *p = nullptr) override;
190 int run(CmdCtx *p) override;
191
192private:
193 std::string m_unfold_cmd;
194};
195
196class CmdList : public std::vector<std::shared_ptr<CmdBase>>
197{
198public:
199 int run_all(CmdCtx *p, bool dry_run = false);
200};
201
202class CmdMap : public std::map<std::string, std::shared_ptr<CmdList>>
203{
204public:
205 int run_all(const std::string &protocol, CmdCtx *p, bool dry_run = false);
206};
207
208class CfgCmd :public CmdBase
209{
210public:
211 CfgCmd(const char *cmd) :CmdBase(cmd) {}
212
213 int parser(char * /*p*/) override { return 0; }
214 int run(CmdCtx *p) override;
215};
216
217int run_cmds(const char *protocol, CmdCtx *p);
218int run_cmd(CmdCtx *pCtx, const char * cmd, int dry);
219
220int insert_env_variable(const std::string &key, const std::string &value);
221std::string get_env_variable(std::string key);
222int clear_env();
223bool is_evn_exist(std::string key);
int run(CmdCtx *p) override
Definition config.cpp:126
int parser(char *) override
Definition cmd.h:213
CfgCmd(const char *cmd)
Definition cmd.h:211
bool m_bCheckTotalParam
Definition cmd.h:106
std::vector< Param > m_param
Definition cmd.h:113
bool m_NoKeyParam
Definition cmd.h:109
virtual int parser(char *p=nullptr)
Definition cmd.cpp:99
int m_timeout
Definition cmd.h:110
virtual ~CmdBase()
Definition cmd.cpp:95
bool m_lastcmd
Definition cmd.h:108
CmdBase(const char *p)
Definition cmd.h:91
const std::string & get_cmd() const noexcept
Definition cmd.h:95
virtual int run(CmdCtx *p)=0
std::string m_cmd
Definition cmd.h:107
virtual int parser_protocol(char *p, size_t &pos)
Definition cmd.cpp:205
virtual int dump()
Definition cmd.cpp:240
CmdBase()=default
void insert_param_info(const char *key, void *pD, Param::Type tp, bool ignore_case=true, const char *err=nullptr)
Definition cmd.h:97
bool get_lastcmd() const noexcept
Definition cmd.h:96
Definition cmd.h:45
CmdCtx()=default
virtual ~CmdCtx()
Definition cmd.cpp:91
CmdCtx(const CmdCtx &)=delete
ConfigItem * m_config_item
Definition cmd.h:52
TransHandle m_dev
Definition cmd.h:53
CmdCtx & operator=(const CmdCtx &)=delete
short m_current_bcd
Definition cmd.h:54
int m_ms
Definition cmd.h:141
CmdDelay(const char *p)
Definition cmd.h:135
int parser(char *p=nullptr) override
Definition cmd.cpp:608
int run(CmdCtx *p) override
Definition cmd.cpp:629
CmdDone(const char *p)
Definition cmd.h:127
int run(CmdCtx *p) override
Definition cmd.cpp:600
Definition cmd.h:185
std::string m_unfold_cmd
Definition cmd.h:193
int parser(char *p=nullptr) override
Definition cmd.cpp:743
int run(CmdCtx *p) override
Definition cmd.cpp:915
CmdBase()=default
int parser(char *p=nullptr) override
Definition cmd.cpp:635
CmdError(const char *p)
Definition cmd.h:147
std::string m_error
Definition cmd.h:152
int run(CmdCtx *p) override
Definition cmd.cpp:653
void build_map(CmdCtx *p)
Definition cmd.cpp:850
std::string m_condition
Definition cmd.h:178
CmdIf(const char *p)
Definition cmd.h:172
std::string m_protocol
Definition cmd.h:179
int parser(char *p=nullptr) override
Definition cmd.cpp:809
std::string m_true_cmd
Definition cmd.h:180
int run(CmdCtx *p) override
Definition cmd.cpp:867
Definition cmd.h:197
int run_all(CmdCtx *p, bool dry_run=false)
Definition cmd.cpp:253
Definition cmd.h:203
int run_all(const std::string &protocol, CmdCtx *p, bool dry_run=false)
Definition cmd.cpp:294
CmdObjCreateMap()
Definition cmd.cpp:420
std::string m_protocol
Definition cmd.h:165
bool m_dyn
Definition cmd.h:164
int run(CmdCtx *p) override
Definition cmd.cpp:682
CmdShell(const char *p)
Definition cmd.h:158
std::string m_shellcmd
Definition cmd.h:166
int parser(char *p=nullptr) override
Definition cmd.cpp:659
Definition cmd.h:58
~CmdUsbCtx() override
Definition usbhotplug.cpp:514
int look_for_match_device(const char *protocol)
Definition usbhotplug.cpp:524
Definition config.h:39
int run_cmds(const char *protocol, CmdCtx *p)
Definition cmd.cpp:920
int clear_env()
Definition cmd.cpp:70
bool is_evn_exist(std::string key)
std::shared_ptr< CmdBase >(*)(char *) CreateCmdObj
Definition cmd.h:116
std::string get_env_variable(std::string key)
Definition cmd.cpp:65
std::string get_next_param(const std::string &cmd, size_t &pos, char separate=' ')
Definition cmd.cpp:308
int insert_env_variable(const std::string &key, const std::string &value)
Definition cmd.cpp:59
int run_cmd(CmdCtx *pCtx, const char *cmd, int dry)
Definition cmd.cpp:538
Definition cmd.h:65
void * pData
Definition cmd.h:78
Param(const char *ky, void *pD, Type tp, bool ignore=true, const char *error=nullptr)
Definition cmd.h:81
const char *const key
Definition cmd.h:76
const Type type
Definition cmd.h:79
const char *const Error
Definition cmd.h:77
Type
Definition cmd.h:67
@ e_string_filename
Definition cmd.h:73
@ e_uint32
Definition cmd.h:68
@ e_null
Definition cmd.h:72
@ e_string
Definition cmd.h:71
@ e_bool
Definition cmd.h:70
@ e_uint64
Definition cmd.h:69
const bool ignore_case
Definition cmd.h:80
Definition trans.h:38
auto pos
Definition usbhotplug.cpp:160