浏览代码

Merge branch 'feature/#30-make-help-function-command-and-alias-configurable' of shimatta/shellmatta into develop

shimatta 4 年之前
父节点
当前提交
c807372bce

+ 19 - 3
example/main.c

@@ -52,6 +52,9 @@ static shellmatta_retCode_t doSome(shellmatta_handle_t handle, const char *argum
 
     shellmatta_write(handle, "blubb\r\n", 7u);
 
+    (void)arguments;
+    (void)length;
+
     return SHELLMATTA_OK;
 }
 shellmatta_cmd_t doSomeCmd = {"adoSome2", "adof2", "Function does something", "use me, please", doSome, NULL};
@@ -62,6 +65,9 @@ static shellmatta_retCode_t removeCmdFct(shellmatta_handle_t handle, const char
 
     shellmatta_removeCmd(handle, &doSomeCmd);
 
+    (void)arguments;
+    (void)length;
+
     return SHELLMATTA_OK;
 }
 shellmatta_cmd_t removeCommand = {"remove", "r", "Function removes a command", "", removeCmdFct, NULL};
@@ -71,6 +77,10 @@ static shellmatta_retCode_t quit(shellmatta_handle_t handle, const char *argumen
 {
     exitRequest = true;
 
+    (void)handle;
+    (void)arguments;
+    (void)length;
+
     return SHELLMATTA_OK;
 }
 shellmatta_cmd_t quitCommand = {"quit", "q", "Function quits the shell", "", quit, NULL};
@@ -83,17 +93,23 @@ shellmatta_retCode_t writeFct(const char* data, uint32_t length)
     return SHELLMATTA_OK;
 }
 
-int main(void)
+int main(int argc, char **argv)
 {
     static char buffer[1024];
     static char historyBuffer[4096];
     static shellmatta_instance_t instance;
 
-    f = open("/dev/pts/3", O_RDWR | O_SYNC);
+    if(2 != argc)
+    {
+        printf("%s <serial device>\n", argv[0u]);
+        return -1;
+    }
+
+    f = open(argv[1u], O_RDWR | O_SYNC);
 
     if (f < 0)
     {
-        printf("failure %d\n", errno);
+        printf("failure opening device %s %d\n", argv[1u], errno);
         return f;
     }
 

+ 2 - 2
makefile

@@ -43,8 +43,8 @@ UNITTEST_CPPOBJ  := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(UNITTEST_SOURCES))
 
 INTEGRATIONTEST_CPPOBJ  := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(INTEGRATIONTEST_SOURCES))
 
-CFLAGS      := $(INCLUDES:%=-I%) -g -Wall -Werror -pedantic
-TESTFLAGS   := $(INCLUDES:%=-I%) -g -Wall -Werror -fprofile-arcs -ftest-coverage -pedantic
+CFLAGS      := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -pedantic -DSHELLMATTA_HELP_ALIAS=\"?\"
+TESTFLAGS   := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -fprofile-arcs -ftest-coverage -pedantic
 TESTLFLAGS  := -fprofile-arcs -Wl,--allow-multiple-definition
 
 DEPEND      = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM

+ 2 - 2
src/shellmatta.c

@@ -260,8 +260,8 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
     uint8_t                 cmdExecuted = 0u;
     uint32_t                cmdLen;
     char                    *tempString;
-    char                    *argumentString;
-    uint32_t                argumentLength;
+    char                    *argumentString = NULL;
+    uint32_t                argumentLength = 0u;
     uint32_t                byteCounter;
     uint32_t                idx;
 

+ 6 - 1
src/shellmatta_utils.c

@@ -327,7 +327,12 @@ static shellmatta_retCode_t helpCmdFct(shellmatta_handle_t handle, const char *a
 
     return ret;
 }
-shellmatta_cmd_t helpCmd = {(char*)"help", (char*)"h", (char*)"Print this help text", (char*)"help", helpCmdFct, NULL};
+shellmatta_cmd_t helpCmd = {  SHELLMATTA_HELP_COMMAND
+                            , SHELLMATTA_HELP_ALIAS
+                            , SHELLMATTA_HELP_HELP_TEXT
+                            , SHELLMATTA_HELP_USAGE_TEXT
+                            , helpCmdFct
+                            , NULL};
 
 /**
  * @brief       terminates an input and prints the prompt again

+ 29 - 1
src/shellmatta_utils.h

@@ -22,7 +22,7 @@
 #include "shellmatta.h"
 #include <stdint.h>
 
-
+/* some helper macros */
 #define SHELLMATTA_MIN(a,b) (((a) > (b)) ?  (b) : (a))
 #define SHELLMATTA_MAX(a,b) (((a) < (b)) ?  (b) : (a))
 #define SHELLMATTA_PRINT_BUFFER(buffer,cnt,fct) \
@@ -40,10 +40,38 @@ extern shellmatta_cmd_t helpCmd;
 
 #define SHELLMATTA_MAGIC    0x5101E110u
 
+/*! \brief overwritable output buffer size */
 #ifndef SHELLMATTA_OUTPUT_BUFFER_SIZE
 #define SHELLMATTA_OUTPUT_BUFFER_SIZE   128u
 #endif
 
+/*! @defgroup Shellmatta Help command overwrites
+ *  @{
+ *  overwritable help command parameters - the help command is built in and cannot be removed, but you can change
+ *  the command, alias and help texts by defining them in your build process  
+ *  To change the settings set one of these defines:  
+ *  #SHELLMATTA_HELP_COMMAND        to overwrite the help command  
+ *  #SHELLMATTA_HELP_ALIAS          to overwrite the help alias  
+ *  #SHELLMATTA_HELP_HELP_TEXT      to overwrite the help text  
+ *  #SHELLMATTA_HELP_USAGE_TEXT     to overwrite the usage text  
+ *  e.g. use _-DSHELLMATTA_HELP_ALIAS=\"?\"_ as compile option to change the alias to ?
+ */
+#ifndef SHELLMATTA_HELP_COMMAND
+#define SHELLMATTA_HELP_COMMAND     (char*)"help"                   /*!< help command               */
+#endif
+#ifndef SHELLMATTA_HELP_ALIAS
+#define SHELLMATTA_HELP_ALIAS       (char*)"h"                      /*!< help command alias         */
+#endif
+#ifndef SHELLMATTA_HELP_HELP_TEXT
+#define SHELLMATTA_HELP_HELP_TEXT   (char*)"Print this help text"   /*!< help command help text     */
+#endif
+#ifndef SHELLMATTA_HELP_USAGE_TEXT
+#define SHELLMATTA_HELP_USAGE_TEXT  (char*)"help"                   /*!< help command usage text    */
+#endif
+/*!
+ *  @}
+ */
+
 void utils_writeEcho(   shellmatta_instance_t   *inst,
                         const char              *data,
                         uint32_t                length);

+ 2 - 0
test/unittest/shellmatta_utils/test_utils_clearInput.cpp

@@ -4,6 +4,8 @@
 
 static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
 {
+    (void)data;
+    (void)length;
     return SHELLMATTA_OK;
 }
 

+ 1 - 1
test/unittest/shellmatta_utils/test_utils_eraseLine.cpp

@@ -9,7 +9,7 @@ static uint32_t write_length;
 static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
 {
     write_callCnt ++;
-    strncpy(write_data, data, length);
+    memcpy(write_data, data, length);
     write_length = length;
     return SHELLMATTA_OK;
 }

+ 1 - 1
test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp

@@ -9,7 +9,7 @@ static uint32_t write_length;
 static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
 {
     write_callCnt ++;
-    strncpy(write_data, data, length);
+    memcpy(write_data, data, length);
     write_length = length;
     return SHELLMATTA_OK;
 }

+ 2 - 2
test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp

@@ -3,13 +3,13 @@
 #include <string.h>
 
 static uint32_t write_callCnt = 0u;
-static char write_data[10];
+static char write_data[10u];
 static uint32_t write_length;
 
 static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
 {
     write_callCnt ++;
-    strncpy(write_data, data, length);
+    memcpy(write_data, data, length);
     write_length = length;
     return SHELLMATTA_OK;
 }

+ 1 - 1
test/unittest/shellmatta_utils/test_utils_terminateInput.cpp

@@ -9,7 +9,7 @@ static uint32_t write_idx;
 static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
 {
     write_callCnt ++;
-    strncpy(&write_data[write_idx], data, length);
+    memcpy(&write_data[write_idx], data, length);
     write_idx += length;
     return SHELLMATTA_OK;
 }