shell_cfg.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. /**
  2. * @file shell_cfg.h
  3. * @author Letter (nevermindzzt@gmail.com)
  4. * @brief shell config
  5. * @version 3.0.0
  6. * @date 2019-12-31
  7. *
  8. * @copyright (c) 2019 Letter
  9. *
  10. */
  11. #ifndef __SHELL_CFG_H__
  12. #define __SHELL_CFG_H__
  13. #ifdef SHELL_CFG_USER
  14. #include SHELL_CFG_USER
  15. #endif
  16. #ifndef SHELL_TASK_WHILE
  17. /**
  18. * @brief 是否使用默认shell任务while循环
  19. * 使能此宏,则`shellTask()`函数会一直循环读取输入,一般使用操作系统建立shell
  20. * 任务时使能此宏,关闭此宏的情况下,一般适用于无操作系统,在主循环中调用`shellTask()`
  21. */
  22. #define SHELL_TASK_WHILE 1
  23. #endif /** SHELL_TASK_WHILE */
  24. #ifndef SHELL_USING_CMD_EXPORT
  25. /**
  26. * @brief 是否使用命令导出方式
  27. * 使能此宏后,可以使用`SHELL_EXPORT_CMD()`等导出命令
  28. * 定义shell命令,关闭此宏的情况下,需要使用命令表的方式
  29. */
  30. #define SHELL_USING_CMD_EXPORT 0
  31. #endif /** SHELL_USING_CMD_EXPORT */
  32. #ifndef SHELL_USING_COMPANION
  33. /**
  34. * @brief 是否使用shell伴生对象
  35. * 一些扩展的组件(文件系统支持,日志工具等)需要使用伴生对象
  36. */
  37. #define SHELL_USING_COMPANION 0
  38. #endif /** SHELL_USING_COMPANION */
  39. #ifndef SHELL_SUPPORT_END_LINE
  40. /**
  41. * @brief 支持shell尾行模式
  42. */
  43. #define SHELL_SUPPORT_END_LINE 0
  44. #endif /** SHELL_SUPPORT_END_LINE */
  45. #ifndef SHELL_HELP_LIST_USER
  46. /**
  47. * @brief 是否在输出命令列表中列出用户
  48. */
  49. #define SHELL_HELP_LIST_USER 0
  50. #endif /** SHELL_HELP_LIST_USER */
  51. #ifndef SHELL_HELP_LIST_VAR
  52. /**
  53. * @brief 是否在输出命令列表中列出变量
  54. */
  55. #define SHELL_HELP_LIST_VAR 0
  56. #endif /** SHELL_HELP_LIST_VAR */
  57. #ifndef SHELL_HELP_LIST_KEY
  58. /**
  59. * @brief 是否在输出命令列表中列出按键
  60. */
  61. #define SHELL_HELP_LIST_KEY 0
  62. #endif /** SHELL_HELP_LIST_KEY */
  63. #ifndef SHELL_HELP_SHOW_PERMISSION
  64. /**
  65. * @brief 是否在输出命令列表中展示命令权限
  66. */
  67. #define SHELL_HELP_SHOW_PERMISSION 1
  68. #endif /** SHELL_HELP_SHOW_PERMISSION */
  69. #ifndef SHELL_ENTER_LF
  70. /**
  71. * @brief 使用LF作为命令行回车触发
  72. * 可以和SHELL_ENTER_CR同时开启
  73. */
  74. #define SHELL_ENTER_LF 1
  75. #endif /** SHELL_ENTER_LF */
  76. #ifndef SHELL_ENTER_CR
  77. /**
  78. * @brief 使用CR作为命令行回车触发
  79. * 可以和SHELL_ENTER_LF同时开启
  80. */
  81. #define SHELL_ENTER_CR 1
  82. #endif /** SHELL_ENTER_CR */
  83. #ifndef SHELL_ENTER_CRLF
  84. /**
  85. * @brief 使用CRLF作为命令行回车触发
  86. * 不可以和SHELL_ENTER_LF或SHELL_ENTER_CR同时开启
  87. */
  88. #define SHELL_ENTER_CRLF 0
  89. #endif /** SHELL_ENTER_CRLF */
  90. #ifndef SHELL_EXEC_UNDEF_FUNC
  91. /**
  92. * @brief 使用执行未导出函数的功能
  93. * 启用后,可以通过`exec [addr] [args]`直接执行对应地址的函数
  94. * @attention 如果地址错误,可能会直接引起程序崩溃
  95. */
  96. #define SHELL_EXEC_UNDEF_FUNC 0
  97. #endif /** SHELL_EXEC_UNDEF_FUNC */
  98. #ifndef SHELL_PARAMETER_MAX_NUMBER
  99. /**
  100. * @brief shell命令参数最大数量
  101. * 包含命令名在内,超过16个参数并且使用了参数自动转换的情况下,需要修改源码
  102. */
  103. #define SHELL_PARAMETER_MAX_NUMBER 8
  104. #endif /** SHELL_PARAMETER_MAX_NUMBER */
  105. #ifndef SHELL_HISTORY_MAX_NUMBER
  106. /**
  107. * @brief 历史命令记录数量
  108. */
  109. #define SHELL_HISTORY_MAX_NUMBER 5
  110. #endif /** SHELL_HISTORY_MAX_NUMBER */
  111. #ifndef SHELL_DOUBLE_CLICK_TIME
  112. /**
  113. * @brief 双击间隔(ms)
  114. * 使能宏`SHELL_LONG_HELP`后此宏生效,定义双击tab补全help的时间间隔
  115. */
  116. #define SHELL_DOUBLE_CLICK_TIME 200
  117. #endif /** SHELL_DOUBLE_CLICK_TIME */
  118. #ifndef SHELL_QUICK_HELP
  119. /**
  120. * @brief 快速帮助
  121. * 作用于双击tab的场景,当使能此宏时,双击tab不会对命令进行help补全,而是直接显示对应命令的帮助信息
  122. */
  123. #define SHELL_QUICK_HELP 1
  124. #endif /** SHELL_QUICK_HELP */
  125. #ifndef SHELL_KEEP_RETURN_VALUE
  126. /**
  127. * @brief 保存命令返回值
  128. * 开启后会默认定义一个`RETVAL`变量,会保存上一次命令执行的返回值,可以在随后的命令中进行调用
  129. * 如果命令的`SHELL_CMD_DISABLE_RETURN`标志被设置,则该命令不会更新`RETVAL`
  130. */
  131. #define SHELL_KEEP_RETURN_VALUE 0
  132. #endif /** SHELL_KEEP_RETURN_VALUE */
  133. #ifndef SHELL_MAX_NUMBER
  134. /**
  135. * @brief 管理的最大shell数量
  136. */
  137. #define SHELL_MAX_NUMBER 5
  138. #endif /** SHELL_MAX_NUMBER */
  139. #ifndef SHELL_PRINT_BUFFER
  140. /**
  141. * @brief shell格式化输出的缓冲大小
  142. * 为0时不使用shell格式化输出
  143. */
  144. #define SHELL_PRINT_BUFFER 128
  145. #endif /** SHELL_PRINT_BUFFER */
  146. #ifndef SHELL_SCAN_BUFFER
  147. /**
  148. * @brief shell格式化输入的缓冲大小
  149. * 为0时不使用shell格式化输入
  150. * @note shell格式化输入会阻塞shellTask, 仅适用于在有操作系统的情况下使用
  151. */
  152. #define SHELL_SCAN_BUFFER 0
  153. #endif /** SHELL_SCAN_BUFFER */
  154. #ifndef SHELL_GET_TICK
  155. /**
  156. * @brief 获取系统时间(ms)
  157. * 定义此宏为获取系统Tick,如`HAL_GetTick()`
  158. * @note 此宏不定义时无法使用双击tab补全命令help,无法使用shell超时锁定
  159. */
  160. #define SHELL_GET_TICK() 0
  161. #endif /** SHELL_GET_TICK */
  162. #ifndef SHELL_USING_LOCK
  163. /**
  164. * @brief 使用锁
  165. * @note 使用shell锁时,需要对加锁和解锁进行实现
  166. */
  167. #define SHELL_USING_LOCK 0
  168. #endif /** SHELL_USING_LOCK */
  169. #ifndef SHELL_MALLOC
  170. /**
  171. * @brief shell内存分配
  172. * shell本身不需要此接口,若使用shell伴生对象,需要进行定义
  173. */
  174. #define SHELL_MALLOC(size) 0
  175. #endif /** SHELL_MALLOC */
  176. #ifndef SHELL_FREE
  177. /**
  178. * @brief shell内存释放
  179. * shell本身不需要此接口,若使用shell伴生对象,需要进行定义
  180. */
  181. #define SHELL_FREE(obj) 0
  182. #endif /** SHELL_FREE */
  183. #ifndef SHELL_SHOW_INFO
  184. /**
  185. * @brief 是否显示shell信息
  186. */
  187. #define SHELL_SHOW_INFO 1
  188. #endif /** SHELL_SHOW_INFO */
  189. #ifndef SHELL_CLS_WHEN_LOGIN
  190. /**
  191. * @brief 是否在登录后清除命令行
  192. */
  193. #define SHELL_CLS_WHEN_LOGIN 1
  194. #endif /** SHELL_CLS_WHEN_LOGIN */
  195. #ifndef SHELL_DEFAULT_USER
  196. /**
  197. * @brief shell默认用户
  198. */
  199. #define SHELL_DEFAULT_USER "letter"
  200. #endif /** SHELL_DEFAULT_USER */
  201. #ifndef SHELL_DEFAULT_USER_PASSWORD
  202. /**
  203. * @brief shell默认用户密码
  204. * 若默认用户不需要密码,设为""
  205. */
  206. #define SHELL_DEFAULT_USER_PASSWORD ""
  207. #endif /** SHELL_DEFAULT_USER_PASSWORD */
  208. #ifndef SHELL_LOCK_TIMEOUT
  209. /**
  210. * @brief shell自动锁定超时
  211. * shell当前用户密码有效的时候生效,超时后会自动重新锁定shell
  212. * 设置为0时关闭自动锁定功能,时间单位为`SHELL_GET_TICK()`单位
  213. * @note 使用超时锁定必须保证`SHELL_GET_TICK()`有效
  214. */
  215. #define SHELL_LOCK_TIMEOUT 0 * 60 * 1000
  216. #endif /** SHELL_LOCK_TIMEOUT */
  217. #ifndef SHELL_USING_FUNC_SIGNATURE
  218. /**
  219. * @brief 使用函数签名
  220. * 使能后,可以在声明命令时,指定函数的签名,shell 会根据函数签名进行参数转换,
  221. * 而不是自动判断参数的类型,如果参数和函数签名不匹配,会停止执行命令
  222. */
  223. #define SHELL_USING_FUNC_SIGNATURE 0
  224. #endif /** SHELL_USING_FUNC_SIGNATURE */
  225. #ifndef SHELL_SUPPORT_ARRAY_PARAM
  226. /**
  227. * @brief 支持数组参数
  228. * 使能后,可以在命令中使用数组参数,如`cmd [1,2,3]`
  229. * 需要使能 `SHELL_USING_FUNC_SIGNATURE` 宏,并且配置 `SHELL_MALLOC`, `SHELL_FREE`
  230. */
  231. #define SHELL_SUPPORT_ARRAY_PARAM 0
  232. #endif /** SHELL_SUPPORT_ARRAY_PARAM */
  233. #endif