/******************************************************************************
Copyright (c) [2012 - 2017] Texas Instruments Incorporated

All rights reserved not granted herein.

Limited License.

 Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
 license under copyrights and patents it now or hereafter owns or controls to
 make,  have made, use, import, offer to sell and sell ("Utilize") this software
 subject to the terms herein.  With respect to the foregoing patent license,
 such license is granted  solely to the extent that any such patent is necessary
 to Utilize the software alone.  The patent license shall not apply to any
 combinations which include this software, other than combinations with devices
 manufactured by or for TI ("TI Devices").  No hardware patent is licensed
 hereunder.

 Redistributions must preserve existing copyright notices and reproduce this
 license (including the above copyright notice and the disclaimer and
 (if applicable) source code license limitations below) in the documentation
 and/or other materials provided with the distribution

 Redistribution and use in binary form, without modification, are permitted
 provided that the following conditions are met:

 * No reverse engineering, decompilation, or disassembly of this software
   is permitted with respect to any software provided in binary form.

 * Any redistribution and use are licensed by TI for use only with TI Devices.

 * Nothing shall obligate TI to provide you with source code for the software
   licensed and provided to you in object code.

 If software source code is provided to you, modification and redistribution of
 the source code are permitted provided that the following conditions are met:

 * Any redistribution and use of the source code, including any resulting
   derivative works, are licensed by TI for use only with TI Devices.

 * Any redistribution and use of any object code compiled from the source code
   and any resulting derivative works, are licensed by TI for use only with TI
   Devices.

 Neither the name of Texas Instruments Incorporated nor the names of its
 suppliers may be used to endorse or promote products derived from this software
 without specific prior written permission.

 DISCLAIMER.

 THIS SOFTWARE IS PROVIDED BY TI AND TI’S LICENSORS "AS IS" AND ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 IN NO EVENT SHALL TI AND TI’S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/


#ifndef CHAINS_SEMSEG_H_
#define CHAINS_SEMSEG_H_

/*******************************************************************
                DEFINES
*******************************************************************/

/* TIDL Use Case Config file name */
#define TIDL_UC_CFG_FILE            "TIDLCFG.TXT"

/* OCMC */
#define OCMC_1_BASE_ADDRESS         (0x40300000U)
#define OCMC_1_SIZE                 (512 * 1024)

#define OCMC_2_BASE_ADDRESS         (0x40400000U)
#define OCMC_2_SIZE                 (1024 * 1024)

#define OCMC_3_BASE_ADDRESS         (0x40500000U)
#define OCMC_3_SIZE                 (1024 * 1024)

/* Number of EVE pipelines */
#define NUM_PIPELINES               (1)

/* EVE */
#define TIDL_COREID_EVE1            (1)
#define TIDL_LAYER_GROUPID_EVE1     (1)
#define TIDL_COREID_EVE2            (1)
#define TIDL_LAYER_GROUPID_EVE2     (1)

/* TIDL algorithm specific parameters */
#define NO_ZERO_COEFF_PERCENT       (100)
#define RANDOM_INPUT                (0)

/* The NULL Source interval */
#define NULLSRC_TIMER_PERIOD        (200)
#define NULLSRC_TIMER_PERIOD_FW     (2000)

/* Number of configuration parameters */
#define TIDL_NUM_ARGS               (6)

/* Priority of the File write task */
#define TIDL_UC_FILEWRITE_TSK_PRI   (1)

/*******************************************************************
                ENUMS
*******************************************************************/
typedef enum
{
    TIDL_CORE_DSP = 0,
    TIDL_CORE_EVE = 1,
    TIDL_CORE_MAX = 0x7FFFFFFF

}TIDL_CORE;

/*******************************************************************
                STRUCTURES
*******************************************************************/

/**
 *******************************************************************************
 *
 *  \brief  chains_tidlAppObj
 *
 *        This structure contains all the LinksId's and create Params.
 *        The same is passed to all create, start, stop functions.
 *
 *******************************************************************************
*/
typedef struct
{
    chains_tidlDspObj dspUcObj;
    chains_tidlEveObj eveUcObj;
    Chains_Ctrl *chainsCfg;

    TIDL_CreateParams *pAlgCreateParams;

    UInt32 inWidth;
    UInt32 inHeight;
    char netFileName[64U];
    char paramFileName[64U];
    char inFileName[64U];
    char outFileName[64U];
    Bool enableOutFileWrite;
    TIDL_CORE tidlCore;

    Int32 outFp;
    UInt32 outputBuf[2];
    UInt32 curOutBuf;
    UInt32 curOutputBufAddr;
    UInt32 curQue;
    Utils_DmaChObj dumpFramesDmaObj;
    BspOsal_SemHandle eofSem;
    UInt32 outFrameNum;
    UInt32 outNumFrames;

    BspOsal_TaskHandle fileWriteTask;
    BspOsal_SemHandle fileWriteSem;

} chains_tidlAppObj;

#endif /* CHAINS_SEMSEG_H_ */
