summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demos/bsp/boards/board.h1
-rw-r--r--demos/bsp/boards/embedded_artists/board_ea4357.c5
-rw-r--r--demos/bsp/boards/embedded_artists/board_ea4357.h4
-rw-r--r--demos/bsp/boards/printf_retarget.c11
-rw-r--r--demos/host/host_os_none/host_os_none.uvopt116
-rw-r--r--demos/host/host_os_none/host_os_none.uvproj10
-rw-r--r--demos/host/src/cli.c160
-rw-r--r--demos/host/src/cli.h62
-rw-r--r--demos/host/src/main.c14
9 files changed, 324 insertions, 59 deletions
diff --git a/demos/bsp/boards/board.h b/demos/bsp/boards/board.h
index bf8b6a8ee..aaa8074e5 100644
--- a/demos/bsp/boards/board.h
+++ b/demos/bsp/boards/board.h
@@ -125,6 +125,7 @@ void board_init(void);
void board_leds(uint32_t on_mask, uint32_t off_mask);
uint32_t board_uart_send(uint8_t *buffer, uint32_t length);
uint32_t board_uart_recv(uint8_t *buffer, uint32_t length);
+uint8_t board_uart_getchar(void);
extern volatile uint32_t system_ticks;
diff --git a/demos/bsp/boards/embedded_artists/board_ea4357.c b/demos/bsp/boards/embedded_artists/board_ea4357.c
index 9e88c5d6b..f8a22dab6 100644
--- a/demos/bsp/boards/embedded_artists/board_ea4357.c
+++ b/demos/bsp/boards/embedded_artists/board_ea4357.c
@@ -135,6 +135,11 @@ uint32_t board_uart_recv(uint8_t *buffer, uint32_t length)
{
return UART_Receive(BOARD_UART_PORT, buffer, length, BLOCKING);
}
+
+uint8_t board_uart_getchar(void)
+{
+ return UART_ReceiveByte(BOARD_UART_PORT);
+}
#endif
diff --git a/demos/bsp/boards/embedded_artists/board_ea4357.h b/demos/bsp/boards/embedded_artists/board_ea4357.h
index 3fbf1ecf6..2a6ef8490 100644
--- a/demos/bsp/boards/embedded_artists/board_ea4357.h
+++ b/demos/bsp/boards/embedded_artists/board_ea4357.h
@@ -66,8 +66,8 @@
#include "oem_base_board/pca9532.h" // LEDs
-#define CFG_PRINTF_TARGET PRINTF_TARGET_SWO
-//#define CFG_PRINTF_TARGET PRINTF_TARGET_UART // FIXME keil's cmsis rtx does not work with UART (work with SWO)
+//#define CFG_PRINTF_TARGET PRINTF_TARGET_SWO
+#define CFG_PRINTF_TARGET PRINTF_TARGET_UART // FIXME keil's cmsis rtx does not work with UART (work with SWO)
/*=========================================================================
HARDWARE MAC ADDRESS
diff --git a/demos/bsp/boards/printf_retarget.c b/demos/bsp/boards/printf_retarget.c
index 7932ab147..12303c89e 100644
--- a/demos/bsp/boards/printf_retarget.c
+++ b/demos/bsp/boards/printf_retarget.c
@@ -103,9 +103,11 @@ int __sys_readc (void)
#elif defined __CC_ARM // keil
#if CFG_PRINTF_TARGET == PRINTF_TARGET_UART
- #define retarget_putc(c) board_uart_send( (uint8_t*) &c, 1);
+ #define retarget_putc(c) board_uart_send( (uint8_t*) &c, 1);
+ #define retarget_getchar() board_uart_getchar()
#elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO
- #define retarget_putc(c) ITM_SendChar(c)
+ #define retarget_putc(c) ITM_SendChar(c)
+ #define retarget_getchar() ITM_ReceiveChar()
#else
#error Thach, did you forget something
#endif
@@ -116,6 +118,11 @@ struct __FILE {
uint32_t handle;
};
+int fgetc(FILE *f)
+{
+ return retarget_getchar();
+}
+
int fputc(int ch, FILE *f)
{
if (//CFG_PRINTF_NEWLINE[0] == '\r' &&
diff --git a/demos/host/host_os_none/host_os_none.uvopt b/demos/host/host_os_none/host_os_none.uvopt
index cc4fd5522..1dd238145 100644
--- a/demos/host/host_os_none/host_os_none.uvopt
+++ b/demos/host/host_os_none/host_os_none.uvopt
@@ -446,8 +446,8 @@
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>101</TopLine>
- <CurrentLine>107</CurrentLine>
+ <TopLine>1</TopLine>
+ <CurrentLine>1</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\src\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
@@ -479,7 +479,7 @@
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>169</TopLine>
- <CurrentLine>186</CurrentLine>
+ <CurrentLine>180</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\src\keyboard_app.c</PathWithFileName>
<FilenameWithoutPath>keyboard_app.c</FilenameWithoutPath>
@@ -492,10 +492,10 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
+ <ColumnNumber>44</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>123</TopLine>
- <CurrentLine>126</CurrentLine>
+ <TopLine>120</TopLine>
+ <CurrentLine>127</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\src\mouse_app.c</PathWithFileName>
<FilenameWithoutPath>mouse_app.c</FilenameWithoutPath>
@@ -524,16 +524,32 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
+ <ColumnNumber>20</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>1</TopLine>
- <CurrentLine>1</CurrentLine>
+ <CurrentLine>6</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\src\msc_app.c</PathWithFileName>
<FilenameWithoutPath>msc_app.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>2</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>62</TopLine>
+ <CurrentLine>72</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\src\cli.c</PathWithFileName>
+ <FilenameWithoutPath>cli.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
</Group>
<Group>
@@ -544,7 +560,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>7</FileNumber>
+ <FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -560,7 +576,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>8</FileNumber>
+ <FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -576,7 +592,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>9</FileNumber>
+ <FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -592,7 +608,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>10</FileNumber>
+ <FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -608,7 +624,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>11</FileNumber>
+ <FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -624,7 +640,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>12</FileNumber>
+ <FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -640,7 +656,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>13</FileNumber>
+ <FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -656,7 +672,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>14</FileNumber>
+ <FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -672,7 +688,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>15</FileNumber>
+ <FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -688,7 +704,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
- <FileNumber>16</FileNumber>
+ <FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -706,13 +722,13 @@
<Group>
<GroupName>tinyusb</GroupName>
- <tvExp>1</tvExp>
+ <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>17</FileNumber>
+ <FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -728,7 +744,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>18</FileNumber>
+ <FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -744,7 +760,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>19</FileNumber>
+ <FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -760,7 +776,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>20</FileNumber>
+ <FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -776,13 +792,13 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>21</FileNumber>
+ <FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>493</TopLine>
+ <TopLine>494</TopLine>
<CurrentLine>501</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\tinyusb\host\usbh.c</PathWithFileName>
@@ -792,13 +808,13 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>22</FileNumber>
+ <FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>593</TopLine>
+ <TopLine>598</TopLine>
<CurrentLine>605</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\tinyusb\host\ehci\ehci.c</PathWithFileName>
@@ -808,7 +824,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>23</FileNumber>
+ <FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -824,7 +840,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>24</FileNumber>
+ <FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -840,7 +856,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>25</FileNumber>
+ <FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -856,7 +872,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>26</FileNumber>
+ <FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -872,7 +888,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>27</FileNumber>
+ <FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -888,7 +904,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>28</FileNumber>
+ <FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -904,7 +920,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>29</FileNumber>
+ <FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -920,7 +936,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>30</FileNumber>
+ <FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -936,7 +952,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>31</FileNumber>
+ <FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -952,14 +968,14 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
- <FileNumber>32</FileNumber>
+ <FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
- <ColumnNumber>44</ColumnNumber>
+ <ColumnNumber>47</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>1</TopLine>
- <CurrentLine>8</CurrentLine>
+ <TopLine>2</TopLine>
+ <CurrentLine>13</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\tinyusb\class\msc_host.c</PathWithFileName>
<FilenameWithoutPath>msc_host.c</FilenameWithoutPath>
@@ -970,13 +986,13 @@
<Group>
<GroupName>cmsis</GroupName>
- <tvExp>1</tvExp>
+ <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>33</FileNumber>
+ <FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -992,7 +1008,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>34</FileNumber>
+ <FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -1008,7 +1024,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>35</FileNumber>
+ <FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -1024,7 +1040,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>36</FileNumber>
+ <FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -1040,7 +1056,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>37</FileNumber>
+ <FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -1056,7 +1072,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
- <FileNumber>38</FileNumber>
+ <FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@@ -1080,14 +1096,14 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
- <FileNumber>39</FileNumber>
+ <FileNumber>40</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
- <ColumnNumber>18</ColumnNumber>
+ <ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>144</TopLine>
- <CurrentLine>150</CurrentLine>
+ <CurrentLine>158</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\bsp\lpc43xx\startup_keil\startup_LPC43xx.s</PathWithFileName>
<FilenameWithoutPath>startup_LPC43xx.s</FilenameWithoutPath>
diff --git a/demos/host/host_os_none/host_os_none.uvproj b/demos/host/host_os_none/host_os_none.uvproj
index 644f41bf9..ab31f7945 100644
--- a/demos/host/host_os_none/host_os_none.uvproj
+++ b/demos/host/host_os_none/host_os_none.uvproj
@@ -421,6 +421,11 @@
<FileType>1</FileType>
<FilePath>..\src\msc_app.c</FilePath>
</File>
+ <File>
+ <FileName>cli.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\src\cli.c</FilePath>
+ </File>
</Files>
</Group>
<Group>
@@ -1025,6 +1030,11 @@
<FileType>1</FileType>
<FilePath>..\src\msc_app.c</FilePath>
</File>
+ <File>
+ <FileName>cli.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\src\cli.c</FilePath>
+ </File>
</Files>
</Group>
<Group>
diff --git a/demos/host/src/cli.c b/demos/host/src/cli.c
new file mode 100644
index 000000000..c8e84c960
--- /dev/null
+++ b/demos/host/src/cli.c
@@ -0,0 +1,160 @@
+/**************************************************************************/
+/*!
+ @file cli.c
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2013, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+
+#include "cli.h"
+#include "ctype.h"
+
+#if TUSB_CFG_HOST_MSC
+
+// command, function, description
+#define CLI_COMMAND_TABLE(ENTRY) \
+ ENTRY(unknow , cli_cmd_unknow, NULL) \
+ ENTRY(help , cli_cmd_help, NULL) \
+
+//--------------------------------------------------------------------+
+// Expands the function to have the standard function signature
+//--------------------------------------------------------------------+
+#define CLI_PROTOTYPE_EXPAND(command, function, description) \
+ tusb_error_t function(char const *);\
+
+CLI_COMMAND_TABLE(CLI_PROTOTYPE_EXPAND);
+
+//--------------------------------------------------------------------+
+// Expand to enum value
+//--------------------------------------------------------------------+
+#define CLI_ENUM_EXPAND(command, function, description) CLI_CMDTYPE_##command,
+typedef enum {
+ CLI_COMMAND_TABLE(CLI_ENUM_EXPAND)
+ CLI_CMDTYPE_COUNT
+}cli_cmdtype_t;
+
+//--------------------------------------------------------------------+
+// Expand to string table
+//--------------------------------------------------------------------+
+#define CLI_STRING_EXPAND(command, function, description) #command,
+char const* const cli_string_tbl[] =
+{
+ CLI_COMMAND_TABLE(CLI_STRING_EXPAND)
+ 0
+};
+
+//--------------------------------------------------------------------+
+// Expand to Description table
+//--------------------------------------------------------------------+
+#define CLI_DESCRIPTION_EXPAND(command, function, description) description,
+char const* const cli_description_tbl[] =
+{
+ CLI_COMMAND_TABLE(CLI_DESCRIPTION_EXPAND)
+ 0
+};
+
+
+//--------------------------------------------------------------------+
+// Expand to Command Lookup Table
+//--------------------------------------------------------------------+
+#define CMD_LOOKUP_EXPAND(command, function, description)\
+ [CLI_CMDTYPE_##command] = function,\
+
+typedef tusb_error_t (* const cli_cmdfunc_t)(char const *);
+static cli_cmdfunc_t cli_command_tbl[] =
+{
+ CLI_COMMAND_TABLE(CMD_LOOKUP_EXPAND)
+};
+
+//--------------------------------------------------------------------+
+// IMPLEMENTATION
+//--------------------------------------------------------------------+
+tusb_error_t cli_cmd_unknow(char const * para)
+{
+ puts("unknown command, please type \"help\"");
+ return TUSB_ERROR_NONE;
+}
+
+tusb_error_t cli_cmd_help(char const * para)
+{
+ puts("current supported commands are:");
+ puts("cd\tchange directory");
+ puts("ls\tlist directory");
+
+ return TUSB_ERROR_NONE;
+}
+
+
+#define CLI_MAX_BUFFER 50
+static char cli_buffer[CLI_MAX_BUFFER];
+
+void cli_init(void)
+{
+ memclr_(cli_buffer, CLI_MAX_BUFFER);
+}
+
+void cli_poll(char ch)
+{
+ if ( isprint(ch) )
+ {
+ if (strlen(cli_buffer) < CLI_MAX_BUFFER)
+ {
+ cli_buffer[ strlen(cli_buffer) ] = ch;
+ putchar(ch);
+ }else
+ {
+ puts("cli buffer overflows");
+ memclr_(cli_buffer, CLI_MAX_BUFFER);
+ }
+ }
+ else if ( ch == '\r')
+ {
+ putchar('\n');
+ for(cli_cmdtype_t cmd_id = CLI_CMDTYPE_help; cmd_id < CLI_CMDTYPE_COUNT; cmd_id++)
+ {
+ if( 0 == strncmp(cli_buffer, cli_string_tbl[cmd_id], CLI_MAX_BUFFER) )
+ {
+ cli_command_tbl[cmd_id](NULL);
+ memclr_(cli_buffer, CLI_MAX_BUFFER);
+ return;
+ }
+ }
+
+ cli_cmd_unknow(NULL);
+ memclr_(cli_buffer, CLI_MAX_BUFFER);
+ }
+ else if (ch=='\t') // \t may be used for auto-complete later
+ {
+
+ }
+}
+
+#endif
diff --git a/demos/host/src/cli.h b/demos/host/src/cli.h
new file mode 100644
index 000000000..75b066744
--- /dev/null
+++ b/demos/host/src/cli.h
@@ -0,0 +1,62 @@
+/**************************************************************************/
+/*!
+ @file cli.h
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2013, hathach (tinyusb.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef _TUSB_CLI_H_
+#define _TUSB_CLI_H_
+
+#include "boards/board.h"
+#include "tusb.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+//--------------------------------------------------------------------+
+// PUBLIC API
+//--------------------------------------------------------------------+
+void cli_init(void);
+void cli_poll(char ch);
+
+//--------------------------------------------------------------------+
+// Callback API
+//--------------------------------------------------------------------+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _TUSB_CLI_H_
diff --git a/demos/host/src/main.c b/demos/host/src/main.c
index 14cf0b826..d38dba3f4 100644
--- a/demos/host/src/main.c
+++ b/demos/host/src/main.c
@@ -50,6 +50,8 @@
#include "app_os_prio.h"
#endif
+#include "cli.h"
+
#include "mouse_app.h"
#include "keyboard_app.h"
#include "msc_app.h"
@@ -113,11 +115,11 @@ void os_none_start_scheduler(void)
cdc_serial_app_task(NULL);
rndis_app_task(NULL);
-// int ch = ITM_ReceiveChar();
-// if ( ch > 0 )
-// {
-// printf("%c", ch);
-// }
+ int ch = getchar();
+ if ( ch > 0 )
+ {
+ cli_poll( (char) ch);
+ }
}
}
#endif
@@ -130,6 +132,8 @@ int main(void)
tusb_init();
+ cli_init();
+
//------------- application task init -------------//
(void) osal_task_create( OSAL_TASK_REF(led_blinking_task) );