1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <string.h>
17 #include <unistd.h>
18
19 #include "hnp_base.h"
20 #include "hnp_pack.h"
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 extern int HnpCliShowHelp(int argc, char *argv[]);
27
28 typedef int (*HNP_CMD_PROCESS_FUNC)(int argc, char *argv[]);
29
30 typedef struct NativeManagerCmdInfoStru {
31 char *cmd;
32 HNP_CMD_PROCESS_FUNC process;
33 } NativeManagerCmdInfo;
34
35 NativeManagerCmdInfo g_nativeManagerCmd[] = {
36 {"help", HnpCliShowHelp},
37 {"-h", HnpCliShowHelp},
38 {"pack", HnpCmdPack}
39 };
40
HnpCliShowHelp(int argc,char * argv[])41 int HnpCliShowHelp(int argc, char *argv[])
42 {
43 (void)argc;
44 (void)argv;
45
46 HNP_LOGI("\r\nusage:hnpcli <command> <args> [-i <software package dir>][-o <hnp output path>]"
47 "[-n <native package name>][-v <native package version>]\r\n"
48 "\r\nThese are common hnpcli commands used in various situations:\r\n"
49 "\r\npack: packet native software package to .hnp file"
50 "\r\n hnpcli pack <-i [source path]> <-o [dst path]> <-n [software name]> <-v [software version]>"
51 "\r\n -i : [required] input path of software package dir"
52 "\r\n -o : [optional] output path of hnp file. if not set then ouput to current directory"
53 "\r\n -n : [optional] software name. if not hnp.json in input dir then must set"
54 "\r\n -v : [optional] software version. if not hnp.json in input dir then must set\r\n"
55 "\r\nfor example:\r\n"
56 "\r\n hnpcli pack -i /usr1/native_sample -o /usr1/output -n native_sample -v 1.1\r\n");
57
58 return 0;
59 }
60
HnpCmdCheck(const char * cmd)61 static NativeManagerCmdInfo* HnpCmdCheck(const char *cmd)
62 {
63 int i;
64 int cmdNum = sizeof(g_nativeManagerCmd) / sizeof(NativeManagerCmdInfo);
65
66 for (i = 0; i < cmdNum; i++) {
67 if (!strcmp(cmd, g_nativeManagerCmd[i].cmd)) {
68 return &g_nativeManagerCmd[i];
69 }
70 }
71 return NULL;
72 }
73
main(int argc,char * argv[])74 int main(int argc, char *argv[])
75 {
76 int ret;
77 NativeManagerCmdInfo *cmdInfo = NULL;
78
79 if (argc < HNP_INDEX_2) {
80 HnpCliShowHelp(argc, argv);
81 return HNP_ERRNO_OPERATOR_ARGV_MISS;
82 }
83
84 HNP_LOGI("native manager process start.");
85
86 /* 检验用户命令,获取对应的处理函数 */
87 cmdInfo = HnpCmdCheck(argv[HNP_INDEX_1]);
88 if (cmdInfo == NULL) {
89 HNP_LOGE("invalid cmd!. cmd:%{public}s", argv[HNP_INDEX_1]);
90 return HNP_ERRNO_OPERATOR_TYPE_INVALID;
91 }
92
93 /* 执行命令 */
94 ret = cmdInfo->process(argc, argv);
95 if (ret == HNP_ERRNO_OPERATOR_ARGV_MISS) {
96 HnpCliShowHelp(argc, argv);
97 }
98
99 HNP_LOGI("native manager process exit. ret=%{public}d ", ret);
100 return ret;
101 }
102
103 #ifdef __cplusplus
104 }
105 #endif