⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfu_ash.c

📁 测试误码率的
💻 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 + -