1 /* 2 * Copyright (c) 2022 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 #ifndef BSHELL_BAS_H 16 #define BSHELL_BAS_H 17 #include <stdint.h> 18 #include <stdlib.h> 19 #include "shell.h" 20 21 #define BSH_VERSION "0.0.1" 22 #define BSH_KEY_LF 0x0A 23 #define BSH_KEY_CR 0x0D 24 #define BSH_KEY_TAB 0x09 25 #define BSH_KEY_BACKSPACE 0x08 26 #define BSH_KEY_DELETE 0x7F 27 #define BSH_KEY_CTRLC 0x03 // ctr + c 28 #define BSH_KEY_ESC 0x1B // ecs 29 30 #define BSH_COMMAND_MAX_LENGTH (5 * 1024) 31 #define BSH_PARAMETER_MAX_NUMBER 10 32 #define BSH_CMD_NAME_END 48 33 #define BSH_CMD_MAX_KEY 5 34 35 #ifdef __cplusplus 36 #if __cplusplus 37 extern "C" { 38 #endif 39 #endif 40 41 #ifdef STARTUP_INIT_TEST 42 #define SHELLSTATIC 43 #else 44 #define SHELLSTATIC static 45 #endif 46 47 typedef enum { 48 BSH_IN_NORMAL = 0, 49 BSH_ANSI_ESC, 50 BSH_ANSI_CSI, 51 } BShellState; 52 53 typedef enum { 54 BSH_EXEC_TASK = 0, 55 BSH_EXEC_INDEPENDENT, 56 } BShellExecMode; 57 58 typedef struct BShellCommand_ { 59 char *desc; 60 char *help; 61 BShellCmdExecuter_ executer; 62 struct BShellCommand_ *next; 63 char *multikey; 64 char *multikeys[BSH_CMD_MAX_KEY]; 65 uint8_t argStart; 66 char name[0]; 67 } BShellCommand; 68 69 typedef struct { 70 uint8_t shellState : 2; 71 uint8_t tabFlag : 1; 72 } BShellStatus; 73 74 typedef struct BShellKey_ { 75 uint8_t keyCode; 76 BShellkeyHandle keyHandle; 77 struct BShellKey_ *next; 78 } BShellKey; 79 80 typedef struct BShellEnv_ { 81 char *prompt; 82 char buffer[BSH_COMMAND_MAX_LENGTH]; 83 uint16_t length; 84 uint16_t cursor; 85 char *args[BSH_PARAMETER_MAX_NUMBER]; 86 uint8_t argc; 87 uint8_t shellState : 3; 88 uint8_t execMode : 2; 89 BShellCommand *command; 90 BShellParam *param; 91 BShellKey *keyHandle; 92 BShellStatus status; 93 BShellInput_ input; 94 char data[BSH_COMMAND_MAX_LENGTH]; 95 } BShellEnv; 96 97 BShellKey *BShellEnvGetKey(BShellHandle handle, uint8_t code); 98 BShellCommand *BShellEnvGetCmd(BShellHandle handle, int32_t argc, char *argv[]); 99 int32_t BShellEnvOutputString(BShellHandle handle, const char *string); 100 void BShellEnvOutputByte(BShellHandle handle, char data); 101 void BShellEnvOutputResult(BShellHandle handle, int32_t result); 102 char *BShellEnvErrString(BShellHandle handle, int32_t err); 103 const char *BShellEnvGetStringParam(BShellHandle handle, const char *name); 104 105 #ifdef STARTUP_INIT_TEST 106 void BShellEnvProcessInput(BShellHandle handle, char data); 107 BShellKey *BShellEnvGetDefaultKey(uint8_t code); 108 #endif 109 110 #ifdef __cplusplus 111 #if __cplusplus 112 } 113 #endif 114 #endif 115 #endif