123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2021-06-05 WillianChan first version
- */
- #include <var_export.h>
- static int ve_cmd_help(int argc, char **argv);
- static int ve_find_module(int argc, char **argv);
- static int ve_find_value(int argc, char **argv);
- struct ve_cmd_des
- {
- const char *cmd;
- int (*fun)(int argc, char **argv);
- };
- /* dcm cmd table */
- static const struct ve_cmd_des cmd_tab[] =
- {
- {"module", ve_find_module},
- {"value", ve_find_value},
- };
- static int ve_cmd_help(int argc, char **argv)
- {
- rt_kprintf("Usage:\n");
- rt_kprintf("ve_find module <module> - Find by module name\n");
- rt_kprintf("ve_find value <module> <identifier> - Find accurately\n");
- return RT_EOK;
- }
- rt_inline void ve_object_split(int len)
- {
- while (len--) rt_kprintf("-");
- }
- static int ve_find_module(int argc, char **argv)
- {
- ve_iterator_t iter;
- const ve_exporter_t *exporter;
- ve_module_t module;
- int maxlen = (RT_NAME_MAX * 2);
- const char *item_title = "ve_module";
- rt_kprintf("%-*.s identifier value\n", maxlen, item_title); ve_object_split(maxlen);
- rt_kprintf(" ---------------- -----\n");
- if (!ve_module_init(&module, argv[2]))
- {
- ve_iter_init(&module, &iter);
- }
- else
- {
- return -RT_ERROR;
- }
- while (1)
- {
- exporter = ve_iter_next(&iter);
- if (exporter == RT_NULL)
- {
- return -RT_ERROR;
- }
- else
- {
- rt_kprintf("%-*.s %-*.s %d\n",
- maxlen, exporter->module,
- maxlen, exporter->identifier,
- exporter->value);
- }
- }
- }
- static int ve_find_value(int argc, char **argv)
- {
- ve_iterator_t iter;
- const ve_exporter_t *exporter;
- ve_module_t module;
- int maxlen = (RT_NAME_MAX * 2);
- const char *item_title = "ve_module";
- rt_kprintf("%-*.s identifier value\n", maxlen, item_title); ve_object_split(maxlen);
- rt_kprintf(" ---------------- -----\n");
- if (!ve_module_init(&module, argv[2]))
- {
- ve_iter_init(&module, &iter);
- }
- else
- {
- return -RT_ERROR;
- }
- while (1)
- {
- exporter = ve_iter_next(&iter);
- if (exporter == RT_NULL)
- {
- return -RT_ERROR;
- }
- else
- {
- if (!rt_strcmp(exporter->identifier, argv[3]))
- {
- rt_kprintf("%-*.s %-*.s %d\n",
- maxlen, exporter->module,
- maxlen, exporter->identifier,
- exporter->value);
- return RT_EOK;
- }
- }
- }
- }
- static int ve_find(int argc, char **argv)
- {
- int i, resule = RT_EOK;
- const struct ve_cmd_des *run_cmd = RT_NULL;
- if (argc == 1)
- {
- ve_cmd_help(argc, argv);
- return RT_EOK;
- }
- /* find command function */
- for (i = 0; i < sizeof(cmd_tab) / sizeof(cmd_tab[0]); i++)
- {
- if (rt_strcmp(cmd_tab[i].cmd, argv[1]) == 0)
- {
- run_cmd = &cmd_tab[i];
- break;
- }
- }
- /* not find command function, print help information */
- if (run_cmd == RT_NULL)
- {
- rt_kprintf("There is no command option named %s.\n", argv[1]);
- ve_cmd_help(argc, argv);
- return RT_EOK;
- }
- /* run command function */
- if (run_cmd->fun != RT_NULL)
- {
- resule = run_cmd->fun(argc, argv);
- }
- if (resule)
- {
- ve_cmd_help(argc, argv);
- }
- return RT_EOK;
- }
- MSH_CMD_EXPORT(ve_find, find the specified export variable);
|