diff options
| author | xfwangqiang <[email protected]> | 2022-05-30 18:00:26 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-05-30 18:00:26 +0800 |
| commit | e8d775f888f14e4fe3cc7bd57740fda0caaf4ece (patch) | |
| tree | 9bc4bb197e278e971390de0ca04d5283774815c0 /components/finsh | |
| parent | 04a17d469a686282254f038f78d634a7420a1e0d (diff) | |
[componnets][pin]add pin operate command in MSH (#5892)
* 1. 在AT32的BSP的drv_gpio中增加了at32_pin_get函数,用于实现rt_pin_ops对象中的pin_get
2. 在MSH中增加了PIN的操作命令
3. 为了方便在MSH命令中解析字符串,增加了一些字符串相关的函数
Diffstat (limited to 'components/finsh')
| -rw-r--r-- | components/finsh/SConscript | 1 | ||||
| -rw-r--r-- | components/finsh/finsh.h | 12 | ||||
| -rw-r--r-- | components/finsh/msh_parse.c | 96 | ||||
| -rw-r--r-- | components/finsh/msh_parse.h | 20 |
4 files changed, 123 insertions, 6 deletions
diff --git a/components/finsh/SConscript b/components/finsh/SConscript index 9b2faa2283..70f8e5608c 100644 --- a/components/finsh/SConscript +++ b/components/finsh/SConscript @@ -4,6 +4,7 @@ cwd = GetCurrentDir() src = Split(''' shell.c msh.c +msh_parse.c ''') if GetDepend('MSH_USING_BUILT_IN_COMMANDS'): diff --git a/components/finsh/finsh.h b/components/finsh/finsh.h index 05399e1863..a26b26fb7e 100644 --- a/components/finsh/finsh.h +++ b/components/finsh/finsh.h @@ -10,17 +10,17 @@ #ifndef __FINSH_H__ #define __FINSH_H__ -#include <rtthread.h> +#include <rtdef.h> -#if defined(_MSC_VER) - #pragma section("FSymTab$f",read) -#endif +#ifdef _MSC_VER +#pragma section("FSymTab$f",read) +#endif /* _MSC_VER */ typedef long (*syscall_func)(void); #ifdef FINSH_USING_SYMTAB #ifdef __TI_COMPILER_VERSION__ - #define __TI_FINSH_EXPORT_FUNCTION(f) PRAGMA(DATA_SECTION(f,"FSymTab")) -#endif +#define __TI_FINSH_EXPORT_FUNCTION(f) PRAGMA(DATA_SECTION(f,"FSymTab")) +#endif /* __TI_COMPILER_VERSION__ */ #ifdef FINSH_USING_DESCRIPTION #ifdef _MSC_VER #define MSH_FUNCTION_EXPORT_CMD(name, cmd, desc) \ diff --git a/components/finsh/msh_parse.c b/components/finsh/msh_parse.c new file mode 100644 index 0000000000..a0f5f5e96d --- /dev/null +++ b/components/finsh/msh_parse.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-05-25 WangQiang the first verion for msh parse + */ + +#include <rtthread.h> +#include <ctype.h> + +#define forstrloop(str) for (; '\0' != *(str); (str)++) + +/** + * This function will check integer. + * + * @param strvalue string + * + * @return true or false + */ +rt_bool_t msh_isint(char *strvalue) +{ + if ((RT_NULL == strvalue) || ('\0' == strvalue[0])) + { + return RT_FALSE; + } + if (('+' == *strvalue) || ('-' == *strvalue)) + { + strvalue++; + } + forstrloop(strvalue) + { + if (!isdigit((int)(*strvalue))) + { + return RT_FALSE; + } + } + return RT_TRUE; +} + +/** + * This function will check hex. + * + * @param strvalue string + * + * @return true or false + */ +rt_bool_t msh_ishex(char *strvalue) +{ + int c; + if ((RT_NULL == strvalue) || ('\0' == strvalue[0])) + { + return RT_FALSE; + } + if ('0' != *(strvalue++)) + { + return RT_FALSE; + } + if ('x' != *(strvalue++)) + { + return RT_FALSE; + } + + forstrloop(strvalue) + { + c = tolower(*strvalue); + if (!isxdigit(c)) + { + return RT_FALSE; + } + } + return RT_TRUE; +} + +/** + * This function will transform for string to hex. + * + * @param strvalue string + * + * @return true or false + */ +int msh_strtohex(char *strvalue) +{ + char c = 0; + int value = 0; + strvalue += 2; + forstrloop(strvalue) + { + value *= 16; + c = tolower(*strvalue); + value += isdigit(c) ? c - '0' : c - 'a' + 10; + } + return value; +} diff --git a/components/finsh/msh_parse.h b/components/finsh/msh_parse.h new file mode 100644 index 0000000000..ba14625e92 --- /dev/null +++ b/components/finsh/msh_parse.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-05-25 WangQiang the first verion for msh parse + */ + +#ifndef MSH_PARSE_H +#define MSH_PARSE_H + +#include <rtdef.h> + +rt_bool_t msh_isint(char *strvalue); +rt_bool_t msh_ishex(char *strvalue); +int msh_strtohex(char *strvalue); + +#endif /* MSH_PARSE_H */ |
