1 /* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _SHELL_H 33 #define _SHELL_H 34 35 #include "pthread.h" 36 #include "semaphore.h" 37 38 #ifdef __cplusplus 39 #if __cplusplus 40 extern "C" { 41 #endif /* __cplusplus */ 42 #endif /* __cplusplus */ 43 44 /* Max len of show str */ 45 #define SHOW_MAX_LEN CMD_MAX_LEN 46 47 #define SHELL_PROCESS_PRIORITY_INIT 15 48 49 #define PATH_MAX 256 50 #define CMD_MAX_PARAS 32 51 #define CMD_KEY_LEN 16U 52 #define CMD_MAX_LEN (256U + CMD_KEY_LEN) 53 #define CMD_KEY_NUM 32 54 #define CMD_HISTORY_LEN 10 55 #define CMD_MAX_PATH 256 56 #define DEFAULT_SCREEN_WIDTH 80 57 #define DEFAULT_SCREEN_HEIGHT 24 58 59 #define SWITCH_QUOTES_STATUS(qu) do { \ 60 if ((qu) == TRUE) { \ 61 (qu) = FALSE; \ 62 } else { \ 63 (qu) = TRUE; \ 64 } \ 65 } while (0) 66 67 #define QUOTES_STATUS_CLOSE(qu) ((qu) == FALSE) 68 #define QUOTES_STATUS_OPEN(qu) ((qu) == TRUE) 69 70 71 typedef struct { 72 unsigned int consoleID; 73 pthread_t shellTaskHandle; 74 pthread_t shellEntryHandle; 75 void *cmdKeyLink; 76 void *cmdHistoryKeyLink; 77 void *cmdMaskKeyLink; 78 unsigned int shellBufOffset; 79 unsigned int shellKeyType; 80 sem_t shellSem; 81 pthread_mutex_t keyMutex; 82 pthread_mutex_t historyMutex; 83 char shellBuf[SHOW_MAX_LEN]; 84 char shellWorkingDirectory[PATH_MAX]; 85 } ShellCB; 86 87 /* All support cmd types */ 88 typedef enum { 89 CMD_TYPE_SHOW = 0, 90 CMD_TYPE_STD = 1, 91 CMD_TYPE_EX = 2, 92 CMD_TYPE_BUTT 93 } CmdType; 94 95 typedef enum { 96 CMD_KEY_UP = 0, 97 CMD_KEY_DOWN = 1, 98 CMD_KEY_RIGHT = 2, 99 CMD_KEY_LEFT = 4, 100 CMD_KEY_BUTT 101 } CmdKeyDirection; 102 103 #ifdef __cplusplus 104 #if __cplusplus 105 } 106 #endif /* __cplusplus */ 107 #endif /* __cplusplus */ 108 109 #endif /* _SHELL_H */ 110