forked from xuos/xiuos
First commit XiUOS
This commit is contained in:
126
tool/shell/letter-shell/shell_port.c
Normal file
126
tool/shell/letter-shell/shell_port.c
Normal file
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* @file shell_port.c
|
||||
* @author Letter (NevermindZZT@gmail.com)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2019-02-22
|
||||
*
|
||||
* @copyright (c) 2019 Letter
|
||||
*
|
||||
*/
|
||||
|
||||
#include "xiuos.h"
|
||||
#include "shell.h"
|
||||
#include "shell_fs.h"
|
||||
#include <stdio.h>
|
||||
#ifdef FS_VFS
|
||||
#include <iot-vfs_posix.h>
|
||||
#endif
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include "xsconfig.h"
|
||||
#include <device.h>
|
||||
|
||||
Shell shell;
|
||||
char *shellBuffer;
|
||||
ShellFs shellFs;
|
||||
char *shellPathBuffer;
|
||||
|
||||
HardwareDevType console;
|
||||
|
||||
/**
|
||||
* @brief Shell write
|
||||
*
|
||||
* @param data write data
|
||||
*/
|
||||
void userShellWrite(char data)
|
||||
{
|
||||
KPrintf("%c",data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief shell read
|
||||
*
|
||||
* @param data read data
|
||||
* @return char read status
|
||||
*/
|
||||
signed char userShellRead(char *data)
|
||||
{
|
||||
struct BusBlockReadParam read_param;
|
||||
read_param.size = 1;
|
||||
read_param.buffer = data;
|
||||
|
||||
BusDevReadData(console, &read_param);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef SHELL_ENABLE_FILESYSTEM
|
||||
/**
|
||||
* @brief list file
|
||||
*
|
||||
* @param path path
|
||||
* @param buffer result buffer
|
||||
* @param maxLen the maximum buffer size
|
||||
* @return size_t 0
|
||||
*/
|
||||
size_t userShellListDir(char *path, char *buffer, size_t maxLen)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *ptr;
|
||||
int i;
|
||||
dir = opendir(path);
|
||||
memset(buffer, 0, maxLen);
|
||||
while((ptr = readdir(dir)) != NULL)
|
||||
{
|
||||
strcat(buffer, ptr->d_name);
|
||||
strcat(buffer, "\t");
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Initialize the shell
|
||||
*
|
||||
*/
|
||||
int userShellInit(void)
|
||||
{
|
||||
shellBuffer = x_malloc(512*sizeof(char));
|
||||
|
||||
|
||||
#ifdef SHELL_ENABLE_FILESYSTEM
|
||||
shellPathBuffer = x_malloc(512*sizeof(char));
|
||||
shellPathBuffer[0] = '/';
|
||||
shellFs.getcwd = getcwd;
|
||||
shellFs.chdir = chdir;
|
||||
shellFs.listdir = userShellListDir;
|
||||
shellFsInit(&shellFs, shellPathBuffer, 512);
|
||||
shellSetPath(&shell, shellPathBuffer);
|
||||
#endif
|
||||
|
||||
shell.write = userShellWrite;
|
||||
shell.read = userShellRead;
|
||||
|
||||
console = ObtainConsole();
|
||||
|
||||
/*Open the serial device in interrupt receiving and polling sending mode */
|
||||
struct SerialDevParam *serial_dev_param = (struct SerialDevParam *)console->private_data;
|
||||
serial_dev_param->serial_set_mode = SIGN_OPER_INT_RX;
|
||||
serial_dev_param->serial_stream_mode = SIGN_OPER_STREAM;
|
||||
BusDevOpen(console);
|
||||
|
||||
shellInit(&shell, shellBuffer, 512);
|
||||
int32 tid;
|
||||
tid = KTaskCreate("letter-shell",
|
||||
shellTask, &shell,
|
||||
SHELL_TASK_STACK_SIZE, SHELL_TASK_PRIORITY);
|
||||
|
||||
StartupKTask(tid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user