1 
2 #ifndef CLI_CONSOLE_H
3 #define CLI_CONSOLE_H
4 
5 #include <stdint.h>
6 #include <stdlib.h>
7 #include "aos/kernel.h"
8 #include "aos/list.h"
9 
10 #define CLI_CONSOLE_TAG_LEN 64
11 
12 #define CLI_CONSOLE_MAX_NAME_LEN 32
13 
14 typedef void (* command_callback)(void *private_data);
15 
16 typedef struct _wraper_task {
17     dlist_t task_list_node;
18     void   *task;
19 } wraper_task;
20 
21 typedef struct _device_console {
22     char *name;
23     int   fd;
24     int (*read)(void *buf, size_t len, void *private_data);
25     int (*write)(const void *buf, size_t len, void *private_data);
26     int (*init)(void *private_data);
27     int (*deinit)(void *private_data);
28 } device_console;
29 
30 typedef struct _command_line_console {
31     dlist_t i_list;
32     device_console *dev_console;
33     char name[CLI_CONSOLE_MAX_NAME_LEN];
34     int init_flag;
35     int exit_flag;
36     int alive;
37     void *private_data;
38     void *task;
39     char cli_tag[CLI_CONSOLE_TAG_LEN];
40     unsigned char cli_tag_len;
41     aos_sem_t sem;
42     aos_sem_t console_exit_sem;
43     unsigned int att_pid;
44     command_callback finsh_callback;
45     command_callback start_callback;
46     dlist_t task_list;
47     char cli_console_inbuf[CLI_INBUF_SIZE];
48 } cli_console;
49 
50 int get_alive_console_num(void);
51 
52 int32_t create_default_console_task(uint32_t stack_size, uint32_t priority);
53 
54 cli_console *get_current_console(void);
55 
56 cli_console *get_default_console(void);
57 
58 cli_console *set_default_console(void *console);
59 
60 cli_console *get_global_console(void);
61 
62 cli_console *set_global_console(void *console);
63 
64 cli_console *get_clitask_console(void);
65 
66 void cli_console_set_exit_flag(cli_console *console);
67 
68 void cli_console_set_tag_len(uint8_t cli_tag_len, int *error);
69 
70 uint8_t cli_console_get_tag_len(int *error);
71 
72 void cli_console_set_tag(char cli_tag, uint32_t idx, int *error);
73 
74 char cli_console_get_tag(uint32_t idx, int *error);
75 
76 char *cli_console_get_all_tag(int *error);
77 
78 int cli_console_read(cli_console *console, void *buf, size_t nbytes);
79 
80 int cli_console_write(cli_console *console, const void *buf, size_t nbytes);
81 
82 int cli_console_deinit(cli_console *console);
83 
84 int cli_console_init(cli_console *console);
85 
86 cli_console *cli_console_create(device_console *dev_console, const char *name, void *private_data);
87 
88 int cli_console_destory(cli_console *console);
89 
90 int cli_console_task_create(cli_console *console, uint32_t stack_size, uint32_t priority);
91 
92 int cli_console_task_destory(cli_console *console);
93 
94 void cli_console_current_task_destory(void);
95 
96 char *cli_task_get_console_name(void);
97 
98 char *cli_console_get_name(cli_console *console);
99 
100 int cli_console_task_check_exit_flag(void);
101 
102 void check_console_task_exit(void);
103 
104 int cli_task_set_console(void *task_handle, void *console);
105 
106 char *cli_task_get_console(void *task_handle);
107 
108 void cli_console_remove_task_list_node(cli_console *console, void *task);
109 
110 void cli_console_add_task_list_node(void *current_console, void *task);
111 
112 int cli_console_check_task_list_node(cli_console *console, void *task);
113 
114 int cli_task_clear_console(void *task_handle);
115 
116 void multiple_console_init(void);
117 
118 int uart_console_write(const void *buf, size_t len, void *privata_data);
119 
120 int uart_console_read(void *buf, size_t len, void *privata_data);
121 
122 void cli_console_show(void);
123 
124 #endif  /*CLI_CONSOLE_H*/
125