📄 sfu_ash.c
字号:
/****************************************************************************
*
* ALi (Shanghai) Corporation, All Rights Reserved. 2002 Copyright (C)
*
* File: lib_ash.c
*
* Description: This file contains all functions definition ALi shell
* operation functions.
* History:
* Date Author Version Comment
* ==== ====== ======= =======
* 1. 2003.7.17 Justin Wu 0.0.000 Initial
*
****************************************************************************/
#include <types.h>
#include <retcode.h>
#include <sys_config.h>
#include <api/libc/printf.h>
#include <api/libc/string.h>
#include <bus/sci/sci.h>
#include <hld/hld_dev.h>
//#ifdef SUPPORT_SFU_TESTING
#if (defined(SUPPORT_SFU_TESTING) || defined(SKYWORTH_SFU_TEST))
#include "sfu_ash.h"
#define LIB_ASH_COMMAND_LST 8
#define LIB_ASH_COMMAND_LEN 128
static unsigned char cmd_buffer[LIB_ASH_COMMAND_LEN];
static unsigned char *argv[LIB_ASH_COMMAND_LST];
static unsigned int argc;
static ID ash_task_id = OSAL_INVALID_ID;
static BOOL m_exit_task = FALSE;
#define ASH_TASK_STACKSIZE 0x1000
#define ASH_TASK_QUANTUM 10
struct ash_cmd *ash_cm = NULL;
static UINT8 ash_state = 0;
static OSAL_ID ash_run_sem = OSAL_INVALID_ID;
BOOL sfu_ash_task_init()
{
OSAL_T_CTSK t_ctsk;
m_exit_task = FALSE;
t_ctsk.stksz = ASH_TASK_STACKSIZE;
t_ctsk.quantum = ASH_TASK_QUANTUM;
t_ctsk.itskpri = OSAL_PRI_NORMAL;
t_ctsk.name[0] = 'S';
t_ctsk.name[1] = 'F';
t_ctsk.name[2] = 'U';
t_ctsk.task = (FP)sfu_ash_shell;
ash_task_id = osal_task_create(&t_ctsk);
if(OSAL_INVALID_ID == ash_task_id)
{
PRINTF("cre_tsk ash_task_id failed\n");
return FALSE;
}
return TRUE;
}
BOOL skyworth_sfu_ash_task_init()
{
OSAL_T_CTSK t_ctsk;
m_exit_task = FALSE;
/*
ash_run_sem = osal_semaphore_create(0);
if(OSAL_INVALID_ID == ash_run_sem)
{
PRINTF("cre_semaphore ash_run_sem failed !\n");
return FALSE;
}
*/
t_ctsk.stksz = ASH_TASK_STACKSIZE;
t_ctsk.quantum = ASH_TASK_QUANTUM;
t_ctsk.itskpri = OSAL_PRI_NORMAL;
t_ctsk.name[0] = 'S';
t_ctsk.name[1] = 'F';
t_ctsk.name[2] = 'U';
t_ctsk.task = (FP)skyworth_sfu_ash_shell;
ash_task_id = osal_task_create(&t_ctsk);
if(OSAL_INVALID_ID == ash_task_id)
{
PRINTF("cre_tsk ash_task_id failed\n");
return FALSE;
}
//ash_state = 0; // not running
return TRUE;
}
void sfu_ash_task_delete()
{
if(OSAL_INVALID_ID != ash_task_id)
{
m_exit_task = TRUE;
ash_task_id = OSAL_INVALID_ID;
}
}
void ash_cm_register(struct ash_cmd *cm)
{
ash_cm = cm;
};
static void sfu_ash_get_command(void)
{
unsigned char c;
unsigned char *p, *q;
p = cmd_buffer;
q = cmd_buffer + LIB_ASH_COMMAND_LEN - 1;
while (p < q)
{
if (m_exit_task)
return;
/* Get a charactor and echo it */
//LIB_ASH_OC(c = LIB_ASH_IC());
// c = LIB_ASH_IC();
if ( sci_read_tm(SCI_FOR_RS232,&c,10000) == ERR_FAILUE )
continue;
if (c == 0x0D || c == 0x0A)
{
q = p;
break;
}
/* Backspace */
else if (c == 0x08)
{
if (p != cmd_buffer)
p--;
}
else
*p++ = c;
}
argc = 0;
p = cmd_buffer;
while (p < q)
{
/* skip blank */
while ((*p == ' ' || *p == '\t') && p < q)
p++;
/* new word */
argv[argc++] = p;
/* find end of word */
while (*p != ' ' && p < q)
p++;
*p++ = 0;
}
}
static void sfu_ash_prompt(void)
{
LIB_ASH_OC(0x0A);
LIB_ASH_OC('>');
LIB_ASH_OC(':');
}
void sfu_ash_shell()
{
unsigned int i;
// Command line process
while (1)
{
if (m_exit_task)
return;
//sfu_ash_prompt();
sfu_ash_get_command();
if (argc == 0 || NULL == ash_cm)
continue;
i = 0;
do
{
if(ash_cm[i].command)
{
if (STRCMP(ash_cm[i].command, argv[0]) == 0)
{
ash_cm[i].handler(argc, argv);
break;
}
else
i++;
}
else
{
ShowSFUTestingHelp();
break;
}
}while(1);
}
}
void skyworth_sfu_ash_shell()
{
unsigned int i;
//是否要判断输入的命令是不是COM_CONNECT_TOPSET
unsigned int check = 1;
// Command line process
while (1)
{
if (m_exit_task)
return;
memset(cmd_buffer, 0, LIB_ASH_COMMAND_LEN);
memset(argv, 0, sizeof(UINT8*)*LIB_ASH_COMMAND_LST);
argc = 0;
//sfu_ash_prompt();
sfu_ash_get_command();
if (argc == 0 || NULL == ash_cm)
continue;
if(STRCMP(ash_cm[0].command,argv[0]) != 0 && check == 1)
{
SciEcho("please input COM_CONNECT_TOPSET to start SFU test!\r\n");
check = 0;
continue;
}
check = 0;
i = 0;
do
{
if(ash_cm[i].command)
{
if (STRCMP(ash_cm[i].command, argv[0]) == 0)
{
ash_cm[i].handler(argc, argv);
break;
}
else
i++;
}
else
{
//ShowSFUTestingHelp();
break;
}
}while(1);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -