311 lines
7.8 KiB
C
311 lines
7.8 KiB
C
![]() |
/******************************************************************************
|
||
|
*
|
||
|
* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
|
||
|
* AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND
|
||
|
* SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE,
|
||
|
* OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
|
||
|
* APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION
|
||
|
* THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
|
||
|
* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
|
||
|
* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
|
||
|
* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
|
||
|
* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
|
||
|
* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
|
||
|
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||
|
* FOR A PARTICULAR PURPOSE.
|
||
|
*
|
||
|
* (c) Copyright 2014 Xilinx Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
/*****************************************************************************/
|
||
|
/**
|
||
|
* @file scaler_intg_main.c
|
||
|
*
|
||
|
* This file contains the integration test functions for the SCALER device.
|
||
|
*
|
||
|
* This file contains a list of functions providing the menu driven test
|
||
|
* functionality for various integration tests.
|
||
|
*
|
||
|
* @note None
|
||
|
*
|
||
|
* <pre>
|
||
|
* MODIFICATION HISTORY:
|
||
|
*
|
||
|
* Ver Who Date Changes
|
||
|
* ----- ------ -------- ------------------------------------------------
|
||
|
* 7.0 adk 22/08/14 First release.
|
||
|
* </pre>
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
/***************************** Include Files *********************************/
|
||
|
|
||
|
#include "scaler_intgtest.h"
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
/************************** Constant Definitions *****************************/
|
||
|
|
||
|
|
||
|
/************************** Constant Definitions *****************************/
|
||
|
|
||
|
/*
|
||
|
* Main menu selections.
|
||
|
*/
|
||
|
#define MENU_MAIN_TEST 1 /**<Menu test */
|
||
|
#define MENU_MAIN_EXIT 99 /**<Menu Exit */
|
||
|
|
||
|
/*
|
||
|
* Test sub-menu selections.
|
||
|
*/
|
||
|
#define MENU_TEST_ALL 0 /**<Menu test all */
|
||
|
#define MENU_TEST_BASIC 1 /**<Menu test basic */
|
||
|
//#define MENU_TEST_POLLED 2 /**<Menu test polled */
|
||
|
#define MENU_TEST_INTR 2 /**<Menu test interrupt */
|
||
|
#define MENU_TEST_EXIT 99 /**<Menu test exit */
|
||
|
|
||
|
/* Create unique bit masks from the test numbers. */
|
||
|
#define SCALER_INTG_TEST_ALL 0xFFFFFFFF /**<SCALER Menu test all */
|
||
|
#define SCALER_INTG_TEST_BASIC (1 << MENU_TEST_BASIC) /**<Scaler Menu test
|
||
|
* basic */
|
||
|
#define SCALER_INTG_TEST_POLLED (1 << MENU_TEST_POLLED) /**<Scaler Menu test
|
||
|
* polled */
|
||
|
#define SCALER_INTG_TEST_INTR (1 << MENU_TEST_INTR) /**<Scaler menu test
|
||
|
* Interrupt */
|
||
|
|
||
|
/**************************** Type Definitions *******************************/
|
||
|
|
||
|
|
||
|
/***************** Macros (Inline Functions) Definitions *********************/
|
||
|
|
||
|
|
||
|
/************************** Function Prototypes ******************************/
|
||
|
|
||
|
static int GetMainMenuCommand(char *CmdLine);
|
||
|
static void RunTestMenu(char *CmdLine);
|
||
|
|
||
|
/************************** Variable Definitions *****************************/
|
||
|
|
||
|
char CmdLine[132]; /**< To read Menu Command arguments */
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
/**
|
||
|
*
|
||
|
* Main entry point for integration tests on Scaler.
|
||
|
*
|
||
|
* @return XST_SUCCESS if successful else XST_FAILURE.
|
||
|
*
|
||
|
* @note None.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
int main()
|
||
|
{
|
||
|
int Status;
|
||
|
#ifdef AUTOMATIC_TEST_MODE
|
||
|
int TestLoops;
|
||
|
int TestFailures;
|
||
|
#endif
|
||
|
|
||
|
printf("\nScaler COMPONENT INTEGRATION TEST\n");
|
||
|
printf("Created on %s\n\n", __DATE__);
|
||
|
printf("================================\n");
|
||
|
|
||
|
Status = Scaler_Initialize(&ScalerInst, (u16)SCALER_0_DEVICE_ID);
|
||
|
|
||
|
if (Status != XST_SUCCESS) {
|
||
|
return Status;
|
||
|
}
|
||
|
|
||
|
#ifndef AUTOMATIC_TEST_MODE
|
||
|
/*
|
||
|
* Prompt user for menu selections.
|
||
|
*/
|
||
|
while (1) {
|
||
|
switch (GetMainMenuCommand(CmdLine)) {
|
||
|
case MENU_MAIN_TEST:
|
||
|
RunTestMenu(CmdLine);
|
||
|
break;
|
||
|
|
||
|
case MENU_MAIN_EXIT:
|
||
|
printf("\nBye\n");
|
||
|
return (0);
|
||
|
|
||
|
default:
|
||
|
printf("Invalid selections.\n");
|
||
|
}
|
||
|
}
|
||
|
#else
|
||
|
/* set defaults */
|
||
|
TestLoops = 1;
|
||
|
TestFailures = 0;
|
||
|
|
||
|
TestFailures += Scaler_Intg_SelfTest(TestLoops);
|
||
|
/* TestFailures += Scaler_Intg_PolledTest(TestLoops); */
|
||
|
TestFailures += Scaler_Intg_InterruptTest(TestLoops);
|
||
|
|
||
|
if (TestFailures) {
|
||
|
XIL_FAIL(TestFailures);
|
||
|
}
|
||
|
else {
|
||
|
XIL_PASS();
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
/**
|
||
|
*
|
||
|
* Prompt the user for selections in the main menu. The user is allowed to
|
||
|
* enter one command at a time.
|
||
|
*
|
||
|
* @param CmdLine - Storage to use for User input.
|
||
|
*
|
||
|
* @return Numeric command entered.
|
||
|
*
|
||
|
* @note None.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
static int GetMainMenuCommand(char *CmdLine)
|
||
|
{
|
||
|
/* Prompt user. */
|
||
|
printf("\nMain Menu:\n");
|
||
|
printf("1 - Test menu\n");
|
||
|
/* printf("2 - Util menu\n");*/
|
||
|
/* printf("3 - One of, experimental & misc functions\n");*/
|
||
|
printf("99 - Exit\n");
|
||
|
|
||
|
/*
|
||
|
* Wait for input.
|
||
|
*/
|
||
|
while (!CT_GetUserInput("Enter selection: ", CmdLine,
|
||
|
sizeof(CmdLine) - 1));
|
||
|
return (atoi(CmdLine));
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
/**
|
||
|
*
|
||
|
* Prompt the user for a sequence of tests to run in the test sub-menu.
|
||
|
*
|
||
|
* @param CmdLine - Storage to use for User input.
|
||
|
*
|
||
|
* @return None.
|
||
|
*
|
||
|
* @note None.
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
static void RunTestMenu(char *CmdLine)
|
||
|
{
|
||
|
char *Token;
|
||
|
char *tmp;
|
||
|
int QuitToMain = 0;
|
||
|
int TestLoops;
|
||
|
int TestFailures;
|
||
|
u32 RunTestMask;
|
||
|
|
||
|
while (!QuitToMain) {
|
||
|
/*
|
||
|
* Set defaults.
|
||
|
*/
|
||
|
TestLoops = 1;
|
||
|
RunTestMask = 0;
|
||
|
TestFailures = 0;
|
||
|
|
||
|
/*
|
||
|
* Prompt user.
|
||
|
*/
|
||
|
printf("\nTest Menu:\n");
|
||
|
printf("0 - All tests\n");
|
||
|
printf("1 - Basic Self test\n");
|
||
|
/* printf("2 - Polled mode tests\n"); */
|
||
|
printf("2 - Interrupt mode tests\n");
|
||
|
printf("99 - Exit to main menu\n");
|
||
|
printf("Adding l<number> sets the number of test loops\n");
|
||
|
|
||
|
/*
|
||
|
* Wait for input.
|
||
|
*/
|
||
|
while (!CT_GetUserInput("Enter selection: ", CmdLine,
|
||
|
sizeof(CmdLine) - 1));
|
||
|
|
||
|
/*
|
||
|
* Parse input line.
|
||
|
*/
|
||
|
Token = strtok_r(CmdLine, " ", &tmp);
|
||
|
while (Token) {
|
||
|
if ((*Token == 'l') || (*Token == 'L')) {
|
||
|
TestLoops = atoi(Token + 1);
|
||
|
}
|
||
|
else {
|
||
|
switch (atoi(Token)) {
|
||
|
|
||
|
case MENU_TEST_ALL:
|
||
|
RunTestMask |= SCALER_INTG_TEST_ALL;
|
||
|
break;
|
||
|
|
||
|
case MENU_TEST_BASIC:
|
||
|
RunTestMask |= SCALER_INTG_TEST_BASIC;
|
||
|
break;
|
||
|
|
||
|
/* case MENU_TEST_POLLED:
|
||
|
RunTestMask |= SCALER_INTG_TEST_POLLED;
|
||
|
break; */
|
||
|
|
||
|
case MENU_TEST_INTR:
|
||
|
RunTestMask |= SCALER_INTG_TEST_INTR;
|
||
|
break;
|
||
|
|
||
|
case MENU_TEST_EXIT:
|
||
|
QuitToMain = 1;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
printf("Unknown test id %s\n", Token);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Token = strtok_r(0, " ", &tmp);
|
||
|
}
|
||
|
|
||
|
if(!QuitToMain) {
|
||
|
/*
|
||
|
* Execute selected tests.
|
||
|
*/
|
||
|
printf("\n********************************************\
|
||
|
*******\n");
|
||
|
printf("* Test sequence mask = %08X, TestLoops = %d\n",
|
||
|
(int) RunTestMask, TestLoops);
|
||
|
printf("**********************************************\
|
||
|
*******\n");
|
||
|
if (RunTestMask & SCALER_INTG_TEST_BASIC) {
|
||
|
TestFailures +=
|
||
|
Scaler_Intg_SelfTest(TestLoops);
|
||
|
}
|
||
|
|
||
|
/*if (RunTestMask & SCALER_INTG_TEST_POLLED) {
|
||
|
TestFailures +=
|
||
|
Scaler_Intg_PolledTest(TestLoops);
|
||
|
}*/
|
||
|
|
||
|
if (RunTestMask & SCALER_INTG_TEST_INTR) {
|
||
|
TestFailures +=
|
||
|
Scaler_Intg_InterruptTest(TestLoops);
|
||
|
}
|
||
|
|
||
|
printf("\n********************************************\
|
||
|
******\n");
|
||
|
if (TestFailures) {
|
||
|
printf("* %d test FAILURES recorded\n", \
|
||
|
TestFailures);
|
||
|
}
|
||
|
else {
|
||
|
printf("* Tests pass.\n");
|
||
|
}
|
||
|
printf("\n********************************************\
|
||
|
******\n");
|
||
|
}
|
||
|
}
|
||
|
}
|