blob: 8dd16e98f4d251ff3f283d50c5a7f05dd6a08bed [file] [log] [blame]
developere5e687d2023-08-08 16:05:33 +08001// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2023 MediaTek Inc. All Rights Reserved.
4 *
5 * Author: Alvin Kuo <Alvin.Kuo@mediatek.com>
6 */
7
8#include <string.h>
9#include <stdio.h>
10#include <errno.h>
11
developer1d312742023-09-11 11:05:46 +080012#include "common.h"
13#include "tops-tool.h"
14
15static struct tops_tool_cmd cmds[] = {
16 TOPS_TOOL_CMD(SAVE_DUMP)
17 TOPS_TOOL_CMD(SAVE_LOG)
18};
developere5e687d2023-08-08 16:05:33 +080019
20static void print_usage(void)
21{
developer1d312742023-09-11 11:05:46 +080022 unsigned int idx;
23
developere5e687d2023-08-08 16:05:33 +080024 printf("Usage:\n");
developer1d312742023-09-11 11:05:46 +080025 printf("tops-tool [CMD]\n");
26 printf("[CMD] are:\n");
27 for (idx = 0; idx < ARRAY_SIZE(cmds); idx++)
28 printf("\t%s\n\t%s\n\n", cmds[idx].usage, cmds[idx].desc);
developere5e687d2023-08-08 16:05:33 +080029}
30
developer1d312742023-09-11 11:05:46 +080031static int verify_parameters(int argc, char *argv[], unsigned int *cmd_idx)
developere5e687d2023-08-08 16:05:33 +080032{
developer1d312742023-09-11 11:05:46 +080033 unsigned int idx;
developere5e687d2023-08-08 16:05:33 +080034 char *cmd;
35
36 if (argc < 2) {
developer1d312742023-09-11 11:05:46 +080037 fprintf(stderr, LOG_FMT("CMD missing\n"));
developere5e687d2023-08-08 16:05:33 +080038 return -EINVAL;
39 }
40
41 cmd = argv[1];
developer1d312742023-09-11 11:05:46 +080042 for (idx = 0; idx < ARRAY_SIZE(cmds); idx++) {
43 if (!strncmp(cmds[idx].name, cmd, strlen(cmds[idx].name))) {
44 if (argc - 2 < cmds[idx].num_of_parms) {
45 fprintf(stderr,
46 LOG_FMT("CMD(%s) needs %d parameter(s)\n"),
47 cmds[idx].name,
48 cmds[idx].num_of_parms);
49 return -EINVAL;
50 }
51
52 *cmd_idx = idx;
53
54 return 0;
developere5e687d2023-08-08 16:05:33 +080055 }
56 }
57
developer1d312742023-09-11 11:05:46 +080058 fprintf(stderr, LOG_FMT("CMD(%s) not support\n"), cmd);
59
60 return -EINVAL;
developere5e687d2023-08-08 16:05:33 +080061}
62
63int main(int argc, char *argv[])
64{
developer1d312742023-09-11 11:05:46 +080065 unsigned int cmd_idx;
developere5e687d2023-08-08 16:05:33 +080066 int ret = 0;
developere5e687d2023-08-08 16:05:33 +080067
developer1d312742023-09-11 11:05:46 +080068 ret = verify_parameters(argc, argv, &cmd_idx);
developere5e687d2023-08-08 16:05:33 +080069 if (ret) {
70 print_usage();
71 goto error;
72 }
73
developer1d312742023-09-11 11:05:46 +080074 ret = cmds[cmd_idx].func(argc, argv);
75 if (ret) {
76 fprintf(stderr,
77 LOG_FMT("CMD(%s) execution failed(%d)\n"),
78 cmds[cmd_idx].name, ret);
developere5e687d2023-08-08 16:05:33 +080079 goto error;
80 }
81
82error:
83 return ret;
84}