[feat] add shell filesystem

This commit is contained in:
jzlv 2021-04-27 12:26:44 +08:00
parent a2fca7a36d
commit 8aed596527
6 changed files with 54 additions and 4 deletions

View File

@ -23,6 +23,8 @@
#include "diskio.h"
#include "bsp_spi_sd.h"
#include "string.h"
const char * FR_Table[]=
{
"FR_OK成功", /* (0) Succeeded */
@ -108,3 +110,14 @@ void fatfs_sd_driver_register(void)
pNewDiskioDriver.Translate_Result_Code = Translate_Result_Code;
disk_driver_callback_init(&pNewDiskioDriver);
}
int shellGetcwd(char *path, unsigned int len)
{
int err;
err = f_getcwd(path, len);
if(err)
{
strcpy(path, "unknow");
}
return 0;
}

View File

@ -52,13 +52,24 @@ void userShellWrite(char data)
device_write(uart, 0, (uint8_t *)&data, 1);
}
#if SHELL_FS == 1
__WEAK__ int shellGetcwd(char *path, unsigned int len)
{
return 0;
}
#endif
void shell_init(void)
{
shell.write = userShellWrite;
#if SHELL_FS == 1
shell.getcwd = shellGetcwd;
#endif
shellInit(&shell, shellBuffer, 512);
}
#else
void uart0_irq_callback(struct device *dev, void *args, uint32_t size, uint32_t state)
{
if (state == UART_EVENT_RX_FIFO)
@ -134,6 +145,12 @@ void bflb_platform_print_set(uint8_t disable)
{
uart_dbg_disable=disable;
}
void bflb_platform_deinit(void)
{
}
void bflb_platform_dump(uint8_t *data, uint32_t len)
{
uint32_t i = 0;

View File

@ -25,8 +25,10 @@
#define _BFLB_PLATFORM_H
#include "misc.h"
//#include "mcu_sdk_version.h"
#define MSG(a,...) bflb_platform_printf(a,##__VA_ARGS__)
#define MSG_DBG(a,...) bflb_platform_printf(a,##__VA_ARGS__)
#define MSG_ERR(a,...) bflb_platform_printf(a,##__VA_ARGS__)
#define BL_CASE_FAIL {MSG(" Case Fail\r\n");while(1){bflb_platform_delay_ms(1);}}
#define BL_CASE_SUCCESS {MSG(" Case Success\r\n");while(1){bflb_platform_delay_ms(1);}}
@ -78,6 +80,7 @@ void check_failed(uint8_t *file, uint32_t line);
void bflb_platform_init(uint32_t baudrate);
void bflb_platform_printf(char *fmt,...);
void bflb_platform_dump(uint8_t *data, uint32_t len);
void bflb_platform_deinit(void);
void bflb_platform_init_time(void);
void bflb_platform_clear_time(void);

View File

@ -326,7 +326,15 @@ static void shellWriteCommandLine(Shell *shell)
{
shellWriteString(shell, "\r\n");
shellWriteString(shell, shell->info.user->data.user.name);
shellWriteString(shell, "/> ");
#if SHELL_FS == 1
char path[SHELL_PRINT_BUFFER];
shell->getcwd(path, SHELL_PRINT_BUFFER);
shellWriteString(shell, ":/");
shellWriteString(shell, path);
shellWriteString(shell, "$ ");
#else
shellWriteString(shell, "/$ ");
#endif
}
else
{
@ -1962,7 +1970,7 @@ static unsigned int shellExtParseNumber(char *string)
if (type == NUM_TYPE_FLOAT && devide != 0)
{
valueFloat = (float)valueInt / devide * sign;
return (uint32_t)valueFloat;
return (unsigned int)valueFloat;
}
else
{
@ -2083,3 +2091,5 @@ int shellExtRun(Shell *shell, ShellCommand *command, int argc, char *argv[])
}
}

View File

@ -316,6 +316,7 @@ typedef struct
} status;
signed char (*read)(char *); /**< shell读函数 */
void (*write)(const char); /**< shell写函数 */
int (*getcwd)(char *path, unsigned int len);
} Shell;

View File

@ -81,7 +81,7 @@
/**
* @brief
*/
#define SHELL_HISTORY_MAX_NUMBER 30
#define SHELL_HISTORY_MAX_NUMBER 5
/**
* @brief (ms)
@ -136,4 +136,10 @@
*/
#define SHELL_LOCK_TIMEOUT 0 * 60 * 1000
/**
* @brief shell是否在命令提示符输出路径,
*/
#define SHELL_FS 1
#endif