OSDN Git Service

チケット #30493 , チケット #30494 , チケット #30502
[uzume/uzume_bfin.git] / uzumeapp / kernel / uzume / ntshell / ntshell_task.c
1 /**
2  * @file ntshell_task.c
3  * @author Shinichiro Nakamura
4  * @brief NT-Shell\e$B%?%9%/!#\e(B
5  * @details
6  */
7
8 /*
9  * ===============================================================
10  *  Natural Tiny Shell (NT-Shell)
11  * ===============================================================
12  * Copyright (c) 2010-2012 Shinichiro Nakamura
13  *
14  * Permission is hereby granted, free of charge, to any person
15  * obtaining a copy of this software and associated documentation
16  * files (the "Software"), to deal in the Software without
17  * restriction, including without limitation the rights to use,
18  * copy, modify, merge, publish, distribute, sublicense, and/or
19  * sell copies of the Software, and to permit persons to whom the
20  * Software is furnished to do so, subject to the following
21  * conditions:
22  *
23  * The above copyright notice and this permission notice shall be
24  * included in all copies or substantial portions of the Software.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
28  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
30  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
31  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
32  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
33  * OTHER DEALINGS IN THE SOFTWARE.
34  * ===============================================================
35  */
36
37 #include <t_services.h>
38 #include "ntshell.h"
39 #include "ntshell_task.h"
40 #include "ntlibc.h"
41 #include "xprintf.h"
42
43 #define SERIAL_PORT_ID  (1)
44
45 static ntshell_t ntshell;
46
47 static int func_read(char *buf, int cnt, void *extobj)
48 {
49     int i;
50     for (i = 0; i < cnt; i++) {
51         char c;
52         syscall(serial_rea_dat(SERIAL_PORT_ID, &c, 1));
53         buf[i] = c;
54     }
55     return cnt;
56 }
57
58 static int func_write(const char *buf, int cnt, void *extobj)
59 {
60     int i;
61     for (i = 0; i < cnt; i++) {
62         char c = buf[i];
63         syscall(serial_wri_dat(SERIAL_PORT_ID, &c, 1));
64
65     }
66     return cnt;
67 }
68
69 static void uxo(unsigned char c)
70 {
71     syscall(serial_wri_dat(SERIAL_PORT_ID, &c, 1));
72 }
73
74 static unsigned char uxi(void)
75 {
76     char c;
77     syscall(serial_rea_dat(SERIAL_PORT_ID, &c, 1));
78     return c;
79 }
80
81 void (*xfunc_out)(unsigned char) = uxo;
82 unsigned char (*xfunc_in)(void) = uxi;
83
84 static int func_callback(const char *text, void *extobj)
85 {
86     if (ntlibc_strlen(text) > 0) {
87         xprintf("User command is '%s'\r\n", text);
88     }
89     return 0;
90 }
91
92 void ntshell_task(VP_INT exinf)
93 {
94     syscall(
95             serial_ctl_por(SERIAL_PORT_ID,
96                 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))
97             );
98
99     ntshell_init(&ntshell, func_read, func_write, func_callback, (void *)&ntshell);
100     ntshell_set_prompt(&ntshell, "BlueTank>");
101     ntshell_execute(&ntshell);
102 }
103