Browse Source

[shell] improve finsh_getchar

Meco Man 3 years ago
parent
commit
9fce0e5659
2 changed files with 9 additions and 5 deletions
  1. 8 4
      components/finsh/shell.c
  2. 1 1
      components/finsh/shell.h

+ 8 - 4
components/finsh/shell.c

@@ -142,20 +142,24 @@ void finsh_set_prompt_mode(rt_uint32_t prompt_mode)
     shell->prompt_mode = prompt_mode;
     shell->prompt_mode = prompt_mode;
 }
 }
 
 
-char finsh_getchar(void)
+int finsh_getchar(void)
 {
 {
 #ifdef RT_USING_DEVICE
 #ifdef RT_USING_DEVICE
 #ifdef RT_USING_POSIX
 #ifdef RT_USING_POSIX
     return getchar();
     return getchar();
 #else
 #else
     char ch = 0;
     char ch = 0;
+    rt_device_t device;
 
 
     RT_ASSERT(shell != RT_NULL);
     RT_ASSERT(shell != RT_NULL);
-    if (shell->device == RT_NULL)
+
+    device = shell->device;
+    if (device == RT_NULL)
     {
     {
-        return -RT_ERROR;
+        return -1; /* EOF */
     }
     }
-    while (rt_device_read(shell->device, -1, &ch, 1) != 1)
+
+    while (rt_device_read(device, -1, &ch, 1) != 1)
         rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER);
         rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER);
 
 
     return ch;
     return ch;

+ 1 - 1
components/finsh/shell.h

@@ -93,7 +93,7 @@ rt_uint32_t finsh_get_echo(void);
 int finsh_system_init(void);
 int finsh_system_init(void);
 void finsh_set_device(const char *device_name);
 void finsh_set_device(const char *device_name);
 const char *finsh_get_device(void);
 const char *finsh_get_device(void);
-char finsh_getchar(void);
+int finsh_getchar(void);
 
 
 rt_uint32_t finsh_get_prompt_mode(void);
 rt_uint32_t finsh_get_prompt_mode(void);
 void finsh_set_prompt_mode(rt_uint32_t prompt_mode);
 void finsh_set_prompt_mode(rt_uint32_t prompt_mode);