207 lines
5.2 KiB
C
Executable File
207 lines
5.2 KiB
C
Executable File
#include "cli.h"
|
|
|
|
#if CONFIG_FATFS
|
|
|
|
#include "test_fatfs.h"
|
|
|
|
static void fatfs_operate(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv)
|
|
{
|
|
uint32_t cmd;
|
|
char *disk_name[DISK_NUMBER_COUNT] = {"ram", "sdio_sd", "udisk", "flash"};
|
|
DISK_NUMBER drv_num = DISK_NUMBER_SDIO_SD;
|
|
char file_name[64] = {'d', 'e', 'f', 'a', 'u', 'l', 't', 'f', 'i', 'l', 'e', 'n', 'a', 'm', 'e', '.', 't', 'x', 't', 0};
|
|
char write_content[64];
|
|
uint64_t content_len = 0;
|
|
uint32_t test_cnt = 0;
|
|
|
|
if (argc >= 3) {
|
|
cmd = argv[1][0];
|
|
drv_num = os_strtoul(argv[2], NULL, 10);
|
|
if(argc >= 4)
|
|
{
|
|
snprintf(&file_name[0], sizeof(file_name) - 1, argv[3]);
|
|
file_name[sizeof(file_name)-1] = 0;
|
|
|
|
if(argc >= 5)
|
|
{
|
|
snprintf(&write_content[0], sizeof(write_content) - 1, argv[4]);
|
|
write_content[sizeof(write_content)-1] = 0;
|
|
|
|
if(argc >= 6)
|
|
{
|
|
content_len = os_strtoul(argv[5], NULL, 10);
|
|
content_len = content_len > (sizeof(write_content) - 1) ? (sizeof(write_content) - 1) : content_len;
|
|
content_len = content_len > strlen(write_content)? strlen(write_content) : content_len;
|
|
|
|
//re-use in autotest
|
|
test_cnt = os_strtoul(argv[5], NULL, 10);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
os_printf("error file name,use defaultfilename.txt\r\n");
|
|
|
|
switch (cmd) {
|
|
case 'M':
|
|
test_mount(drv_num);
|
|
os_printf("mount:%s\r\n", disk_name[drv_num%DISK_NUMBER_COUNT]);
|
|
break;
|
|
case 'U':
|
|
test_unmount(drv_num);
|
|
os_printf("unmount:%s\r\n", disk_name[drv_num%DISK_NUMBER_COUNT]);
|
|
break;
|
|
case 'G':
|
|
test_getfree(drv_num);
|
|
os_printf("getfree:%s\r\n", disk_name[drv_num%DISK_NUMBER_COUNT]);
|
|
break;
|
|
case 'R':
|
|
if (argc >= 5)
|
|
content_len = os_strtoul(argv[4], NULL, 10);
|
|
else
|
|
content_len = 0x0fffffffffffffff; //read finish
|
|
test_fatfs_read(drv_num, file_name, content_len);
|
|
os_printf("read %s, len_h = %d, len_l = %d\r\n", file_name, (uint32_t)(content_len>>32), (uint32_t)content_len);
|
|
break;
|
|
case 'W':
|
|
test_fatfs_append_write(drv_num, file_name, write_content, content_len);
|
|
os_printf("append and write:%s,%s\r\n", file_name, write_content);
|
|
break;
|
|
//fatfstest D dev-num file-name start-addr dump-len
|
|
case 'D':
|
|
{
|
|
uint32_t start_addr = 0;
|
|
if(argc >= 5)
|
|
{
|
|
start_addr = os_strtoul(argv[4], NULL, 16);
|
|
}
|
|
if(argc >= 6)
|
|
{
|
|
content_len = os_strtoul(argv[5], NULL, 10);
|
|
}
|
|
test_fatfs_dump(drv_num, file_name, start_addr, content_len);
|
|
break;
|
|
}
|
|
|
|
//fatfstest A dev-num file-name write-len test_cnt start-addr
|
|
//fatfstest A 1 autotest.txt 12487 3
|
|
case 'A':
|
|
{
|
|
if(argc < 4)
|
|
{
|
|
os_printf("Autotest Fatfs argc < 4! Please input correctly\r\n");
|
|
return;
|
|
}
|
|
uint32_t start_addr = 0;
|
|
if(argc >= 5)
|
|
{
|
|
content_len = os_strtoul(argv[4], NULL, 10);
|
|
}
|
|
if(argc >= 7)
|
|
{
|
|
start_addr = os_strtoul(argv[6], NULL, 16);
|
|
}
|
|
test_fatfs_auto_test(drv_num, file_name, content_len, test_cnt, start_addr);
|
|
break;
|
|
}
|
|
|
|
#if 1
|
|
//concurrency torage_mem_
|
|
case 'C':
|
|
{
|
|
if(argc < 4)
|
|
{
|
|
os_printf("Concurrency Fatfs argc < 4! Please input correctly\r\n");
|
|
return;
|
|
}
|
|
|
|
test_cnt = os_strtoul(argv[3], NULL, 10);
|
|
test_fatfs_concurrency(drv_num, test_cnt, 64<<10);
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
case 'F':
|
|
test_fatfs_format(drv_num);
|
|
os_printf("format :%d\r\n", drv_num);
|
|
break;
|
|
case 'S':
|
|
scan_file_system(drv_num);
|
|
os_printf("scan \r\n");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
} else
|
|
os_printf("cmd param error\r\n");
|
|
}
|
|
|
|
static beken_thread_t idle_fatfs_out_test_handle = NULL;
|
|
static bool s_fatfs_idle_test_stop_flag = 1;
|
|
|
|
static void cli_fatfs_idle_out_test(void)
|
|
{
|
|
char *file_name = "1.txt";
|
|
|
|
test_mount(1);
|
|
rtos_delay_milliseconds(10);
|
|
test_fatfs_format(1);
|
|
|
|
while (1) {
|
|
rtos_delay_milliseconds(50);
|
|
if(s_fatfs_idle_test_stop_flag)
|
|
break;
|
|
else
|
|
test_fatfs_auto_test(1, file_name, 12487, 1, 0);
|
|
}
|
|
|
|
rtos_delete_thread(&idle_fatfs_out_test_handle);
|
|
|
|
}
|
|
|
|
static void fatfs_idle_test(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv)
|
|
{
|
|
if (argc < 2) {
|
|
return;
|
|
}
|
|
|
|
if (os_strcmp(argv[1], "start") == 0) {
|
|
if (!idle_fatfs_out_test_handle && s_fatfs_idle_test_stop_flag){
|
|
CLI_LOGI("fatfs_idle_test START!\n");
|
|
s_fatfs_idle_test_stop_flag = 0;
|
|
if(rtos_create_thread(&idle_fatfs_out_test_handle, 8, "idle_fatfs_out",
|
|
(beken_thread_function_t) cli_fatfs_idle_out_test, 2048, 0)) {
|
|
CLI_LOGI("fatfs_idle_test rtos_create_thread FAILED!\n");
|
|
return;
|
|
}
|
|
} else
|
|
CLI_LOGI("fatfs idle test WORKING!\n");
|
|
|
|
} else if (os_strcmp(argv[1], "stop") == 0) {
|
|
if (idle_fatfs_out_test_handle && !s_fatfs_idle_test_stop_flag) {
|
|
s_fatfs_idle_test_stop_flag = 1;
|
|
CLI_LOGI("fatfs_idle_test STOP! Please clean FLAG!\n");
|
|
} else
|
|
CLI_LOGI("PLEASE start fatfs idle test!\n");
|
|
|
|
} else if (os_strcmp(argv[1], "clean") == 0) {
|
|
if (idle_fatfs_out_test_handle && s_fatfs_idle_test_stop_flag)
|
|
idle_fatfs_out_test_handle = NULL;
|
|
else
|
|
CLI_LOGI("PLEASE start->stop->clean, check thread status!\n");
|
|
}
|
|
}
|
|
|
|
|
|
#define FATFS_CMD_CNT (sizeof(s_fatfs_commands) / sizeof(struct cli_command))
|
|
static const struct cli_command s_fatfs_commands[] = {
|
|
{"fatfstest", "fatfstest <cmd>", fatfs_operate},
|
|
{"fatfs_idle_test", "fatfs_idle_test {start|stop|clean}", fatfs_idle_test},
|
|
};
|
|
|
|
int cli_fatfs_init(void)
|
|
{
|
|
return cli_register_commands(s_fatfs_commands, FATFS_CMD_CNT);
|
|
}
|
|
|
|
#endif
|