tpapi.c

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 635 行 · 第 1/2 页

C
635
字号
/******************************************************************************
**                                                                            *
**  File Name:      tpapi.c                                                   *
**  Copyright:      2007-2008 Telepath Technologies Corp. All rights reserved.*
**  Version:        1.1                                                       *
**  Description:    Digital TV API.                                           *
**                                                                            *
*******************************************************************************

*******************************************************************************
**                         Edit History                                       *
**  ------------------------------------------------------------------------- *
**  DATE           NAME             DESCRIPTION                               *
**  8/30/2007      pxd              Create.                                   *
*******************************************************************************/

/*----------------------------------------------------------------------------*
**                         Dependencies                                       *
**----------------------------------------------------------------------------*/
#include "platform.h"
#include "tpapi.h"
#include "frameparser.h"

/*----------------------------------------------------------------------------*
**                         Debugging Flag                                     * 
**----------------------------------------------------------------------------*/
 
/*----------------------------------------------------------------------------*
**                         Compiler Flag                                      *
**----------------------------------------------------------------------------*/
#ifdef   __cplusplus
    extern   "C" 
    {
#endif

/*----------------------------------------------------------------------------*
**                            Macro Define                                    *
**----------------------------------------------------------------------------*/
typedef enum
{
    TP_CTRL_CMD_TYPE_SYS_CTRL=1,
    TP_CTRL_CMD_TYPE_GET_SYS_CONF=2,
    TP_CTRL_CMD_TYPE_SERVICE_CTRL=3,
    TP_CTRL_CMD_TYPE_SET_FREQ=5,
    TP_CTRL_CMD_TYPE_GET_REG=6,
    TP_CTRL_CMD_TYPE_SET_REG=7,
    TP_CTRL_CMD_TYPE_SWITCH_MODE=8,
    TP_CTRL_CMD_TYPE_GET_FIRMWARE_VERSION=9,
    TP_CTRL_CMD_TYPE_UPDATE_FIRMWARE=10,
    TP_CTRL_CMD_TYPE_GET_SIGNAL_POWER=11
}TP_CTRL_CMD_TYPE_E;

//sub type of system control
typedef enum
{
    TP_SYS_CTRL_SYS_RESET=1, 
    TP_SYS_CTRL_DEMOD_SLEEP=2,
    TP_SYS_CTRL_DEMOD_RESUME=3,
    TP_SYS_CTRL_DEMOD_RESET=4,
    TP_SYS_CTRL_DEMOD_IQ_POLARITY=5
}TP_SYS_CTRL_TYPE_E;

typedef enum
{
    TP_SERVICE_CTRL_CMD_REMOVE=0,
    TP_SERVICE_CTRL_CMD_ADD=1
}TP_SERVICE_CTRL_CMD_E;
#define     TP_GET_SYS_CONF_TS0         0xff#define     TP_CTRL_CMD_MAX_SIZE        16
/* wait time out function */
#define TP_WAITFOR(ucCondition, uTimeoutInMs, bOK) \
{ \
	TP_UINT32 uTimeRemain = (uTimeoutInMs); \
	while (uTimeRemain > 0) \
	{ \
		if (ucCondition) break; \
		pf_msleep(10); \
		uTimeRemain-=10; \
	} \
	if (uTimeRemain > 0) \
		bOK = TRUE; \
	else bOK = FALSE; \
}

#define TP_RESPONSE_TIMEOUT_MAX     1000

/*----------------------------------------------------------------------------*
**                         Data Structures                                    *
**----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*
**                      Local Function  Declare                               *
**----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*
**                      Local Variant  Declare                                *
**----------------------------------------------------------------------------*/
static TP_ON_TV_PLAY tpOnTvPlay;
static TP_DTV_STREAM_T *tpstream;
/*----------------------------------------------------------------------------*
**                      Global Variant  Declare                               *
**----------------------------------------------------------------------------*/
extern FRAME_PARSER_T FrameParser;
extern CONST TP_STATE_FUNC  StateFunc[TP_FP_STATE_MAX];
/*----------------------------------------------------------------------------*
**                      Function  Prototype                                   *
**----------------------------------------------------------------------------*/
 
/****************************************************************************** 
*                       tpTvStart                                             * 
*   Description: Initialize the IC and download firmware.                     * 
*   Input:                                                                    * 
*       stream: Digital TV stream structure                                   * 
*       onplay: callback function, call this to process the video/auido frame * 
*               and other data                                                * 
*   Output:                                                                   *
*       None                                                                  *
*   Return:                                                                   * 
*       0:  start Success.                                                    * 
*       other: start Fail.                                                    * 
*   Note:                                                                     * 
*       None                                                                  * 
*******************************************************************************/
TP_INT32 tpTvStart(TP_DTV_STREAM_T *stream, TP_ON_TV_PLAY onplay)
{  
    TP_INT32   ret = TP_RET_SUC;

    pf_reset();
    //download firmware
    //pf_datawrite(S301A_FIRMWARE_10);
    
    tpstream = stream;
    pf_memset(&FrameParser, 0, sizeof(FRAME_PARSER_T));
    FrameParser.Language = DEFAULT_LANGUAGE;
    
    tpOnTvPlay = onplay;

    return ret;
}

/****************************************************************************** 
*                       tpTvProcess                                           * 
*   Description: Process and parse the TV data.                               * 
*   Input:                                                                    * 
*       None                                                                  *
*   Output:                                                                   *
*       None                                                                  *
*   Return:                                                                   * 
*       None                                                                  *
*   Note:                                                                     * 
*       None                                                                  * 
*******************************************************************************/
VOID tpTvProcess(VOID)
{
    TP_INT32  len;

    FreeSysConfDataMem(tpstream);
    FreeEbDataMem(tpstream);
    FreeVideoDataMem(tpstream, 0);
    FreeAudioDataMem(tpstream, 0);
    FreeOtherDataMem(tpstream, 0);    TP_DEBUG_PRINT("tpDataProcess  start!\n");
    
    if ((FrameParser.FrameData != FrameParser.FrameBuf) && (FrameParser.FrameDataLen>0))
        pf_memcpy(FrameParser.FrameBuf, FrameParser.FrameData, FrameParser.FrameDataLen);
        
    len = pf_dataread(FrameParser.FrameBuf+FrameParser.FrameDataLen, MUXSUBFRAME_BUF_SIZE-FrameParser.FrameDataLen);
    if (len < 0)
        return;
    
    FrameParser.FrameData = FrameParser.FrameBuf;
    FrameParser.FrameDataLen += len;
    
    if (FrameParser.FrameDataLen == 0)
        return;
    
    if (FrameParser.DisCardDatalen > 0)
    {
        if (FrameParser.DisCardDatalen >= FrameParser.FrameDataLen)
        {
            FrameParser.DisCardDatalen -= FrameParser.FrameDataLen;
            return;
        }
        else
        {
            FrameParser.FrameDataLen -= FrameParser.DisCardDatalen;
            FrameParser.FrameData += FrameParser.DisCardDatalen;
            FrameParser.DisCardDatalen = 0;
        }
    }
    
    FrameParser.Error = TP_RET_SUC;
    do
    {
        if (FrameParser.ParserState == TP_FP_STATE_END)
        {
            (*(StateFunc[FrameParser.ParserState]))(&FrameParser, tpstream);
            break;
        }
        else
            (*(StateFunc[FrameParser.ParserState]))(&FrameParser, tpstream);
        
    }while(FrameParser.Error == TP_RET_SUC);

    if (FrameParser.Error < TP_RET_DATA_NONE_ERR)
    {
        FrameParserClean(&FrameParser);
        FreeSysConfDataMem(tpstream);
        FreeEbDataMem(tpstream);
        FreeVideoDataMem(tpstream, 1);
        FreeAudioDataMem(tpstream, 1);
        FreeOtherDataMem(tpstream, 1);
        pf_memset(tpstream, 0, sizeof(TP_DTV_STREAM_T));
    }
    else
        (*tpOnTvPlay)(tpstream);
        
    return;
}

/****************************************************************************** 
*                       tpTvStop                                              * 
*   Description: Stop TV.                                                     * 
*   Input:                                                                    * 
*       stream: Digital TV stream structure                                   * 
*   Output:                                                                   *
*       None                                                                  *
*   Return:                                                                   * 
*       0:  stop Success.                                                     * 
*       other: stop Fail.                                                     * 
*   Note:                                                                     * 
*       None                                                                  * 
*******************************************************************************/
TP_INT32 tpTvStop(TP_DTV_STREAM_T *stream)
{      FreeSysConfDataMem(stream);
    FreeEbDataMem(stream);
    FreeVideoDataMem(stream, 1);
    FreeAudioDataMem(stream, 1);
    FreeOtherDataMem(stream, 1);
    
    tpOnTvPlay = NULL;
    
    return TP_RET_SUC;
}

/****************************************************************************** 
*                       tpTvGetServiceInfo                                    * 
*   Description: Send read service information command.                       * 
*   Input:                                                                    * 
*       None                                                                  * 
*   Output:                                                                   *
*       None                                                                  * 
*   Return:                                                                   * 
*       0: Success.                                                           * 
*       other: Fail.                                                          * 
*   Note:                                                                     * 
*       None                                                                  * 
*******************************************************************************/
TP_INT32 tpTvGetServiceInfo(VOID)
{
    TP_BOOL bOK;
    TP_UINT32 response,result;
    
    TP_UINT8 cmd[TP_CTRL_CMD_MAX_SIZE]={0};

    cmd[0] = TP_CTRL_CMD_TYPE_GET_SYS_CONF; // byte 1 is command type
    cmd[1] = TP_GET_SYS_CONF_TS0;
    if (pf_datawrite(cmd, TP_CTRL_CMD_MAX_SIZE) != TP_CTRL_CMD_MAX_SIZE)
        return TP_RET_SEND_DATA_FAIL;
printf("after write --- get serverinfo\n");    TP_WAITFOR(FrameParser.CmdResponse, TP_RESPONSE_TIMEOUT_MAX, bOK);printf("waitfor\n");    if (!bOK)
        return TP_RET_WAIT_RESPONSE_TIMEOUT;

    response = FrameParser.CmdResponse;
    result = FrameParser.CmdResult;
    FrameParser.CmdResponse = 0;
    FrameParser.CmdResult = 0;
    
    if (response == TP_CTRL_CMD_TYPE_GET_SYS_CONF)
    {
        if (result == TP_RET_SUC)
            return TP_RET_SUC;
        else if (result == 1)
            return TP_RET_TS0_DATA_NONE;
        else
            return TP_RET_UNKNOW_ERR;
	}
    else 
        return TP_RET_RESPONSE_ERR;
}
/****************************************************************************** 
*                       tpTvSelectService                                     * 
*   Description: Select a service for play.                                   * 
*   Input:                                                                    * 
*       serviceid: Service Id, get from CSCT/SSCT                             * 
*   Output:                                                                   *
*       None                                                                  * 
*   Return:                                                                   * 
*       0:  Success.                                                          * 
*       other: Fail.                                                          * 
*   Note:                                                                     * 
*       None                                                                  * 
*******************************************************************************/
TP_INT32 tpTvSelectService(TP_UINT16 serviceid)
{
    TP_UINT8 cmd[TP_CTRL_CMD_MAX_SIZE]={0};
    TP_BOOL bOK;
    TP_UINT32 response,result;

    cmd[0] = TP_CTRL_CMD_TYPE_SERVICE_CTRL;
    cmd[1] = serviceid >> 8; 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?