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

📄 sample.c

📁 QATVM1100模拟电视芯片的源代码!包括库文件以及使用例子代码.
💻 C
字号:
/*******************************************************************************
*
* FILENAME      : sample.c
* DESCRIPTION   : Sample codes for qatv module
* CREATION DATE : September 2007
* REVISION      : 0.8
*
********************************************************************************
* (C) Copyright 2007, QuestLabs, Inc. All rights reserved.
********************************************************************************
*
*
*
*
*
* 20 Feb 2007        Rudy Lee               Initial version
*
*******************************************************************************/

/* 
================================================================================
INCLUDE FILES
================================================================================
*/
#include "qatv.h"




/* 
================================================================================
DEFINES
================================================================================
*/

/*
#define USE_I2S_AUDIO
*/

#define NUM_OF_QATV_COUNTRY_CODE    8




/* 
================================================================================
GLOBAL VARIABLES
================================================================================
*/

extern QATV_CHANNEL_MAP(qatv_ntsc_chn_map);
extern QATV_CHANNEL_MAP(qatv_pald_chn_map);
extern QATV_CHANNEL_MAP(qatv_vietnam_chn_map);
extern QATV_CHANNEL_MAP(qatv_w_europe_chn_map);
extern QATV_CHANNEL_MAP(qatv_ntsc_japan_chn_map);
extern QATV_CHANNEL_MAP(qatv_a_uk_chn_map);
extern QATV_CHANNEL_MAP(qatv_brazil_chn_map);
extern QATV_CHANNEL_MAP(qatv_argentina_chn_map);

extern QATV_CHANNEL_MAP(qatv_fm_chn_map);




/* 
================================================================================
LOCAL VARIABLES
================================================================================
*/
QATV_CHANNEL_MAP(qatv_scan_chn_map) = {
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},
    {0, 0, 0, 0},

    {0, 0, 0, 0}
};


static QATV_CHANNEL_MAP_P(qatv_country_data_table[NUM_OF_QATV_COUNTRY_CODE]) = 
{
  qatv_ntsc_chn_map,
  qatv_pald_chn_map,
  qatv_vietnam_chn_map,
  qatv_w_europe_chn_map,
  qatv_ntsc_japan_chn_map,
  qatv_a_uk_chn_map,
  qatv_brazil_chn_map,
  qatv_argentina_chn_map,
};

static int foundChannelList[30] = {0,};
static int foundChannelIndex = 0;



static int scanFinished = 0;





/* 
================================================================================
FUNCTIONS
================================================================================
*/



static void system_polling_handler(void)
{
  QATV_SystemPolling();

  StartTimerFunction(1000, system_polling_handler);
}

static void channel_scan_handler(void)
{
  int curChannel = 0;
  int result = QATV_ERR_FAIL;

  result = QATV_ScanChannels2(&curChannel);

  if (result == QATV_ERR_SUCCESS)
  {
    StartTimerFunction(500, channel_scan_handler);
  }
  else
  {
    StartTimerFunction(1000, system_polling_handler);

// channel scan is finished
    scanFinished = 1;
  }
}


static void FoundChannelCallBack(int channel)
{
  DEBUG("\nChannel Found : %d %d\n",channel, foundChannelIndex);

  foundChannelList[foundChannelIndex] = channel;
  foundChannelIndex++;
}

static void FoundChannelCallBack2(int channel, int found)
{
  DEBUG("\nCurrent Channel : %d %d %d\n",channel, foundChannelIndex, found);

  if (found)
  {
    foundChannelList[foundChannelIndex] = channel;
    foundChannelIndex++;
  }
}






void qatv_init(void)
{
  QATV_SetI2CBaseAddr(QATVI2C_DEFAULT_BASE_ADDR);

/* only for testing */
  if (QATV_TestI2C() != QATV_ERR_SUCCESS)  
  {
    DEBUG ("I2C ERROR !!!");
    while(1);
  }

  QATV_Init();
}

void qatv_set_mode(QATV_CHANNEL_MAP_P(map), Boolean scan)
{
  QATV_SetChannelMap(map);

  if (map[0][3] != QATV_ASTD_FM_RADIO)
  {
    QATV_SetVideoResolution(QATV_VID_320_240);
    QATV_Set601VideoOutClock(QATV_VID_CLOCK_INVERT);
    QATV_SetChromaLumaOrder(QATV_VID_CHRLUM_NORMAL);
    QATV_SetCbCrOrder(QATV_VID_CBCR_INVERT);
    QATV_SetVSyncPolarity(QATV_VID_ACTIVE_LOW);
    QATV_SetHSyncPolarity(QATV_VID_ACTIVE_HIGH);


    QATV_SetBright(7);
    QATV_SetColor(2);
    QATV_SetTint(0);
  }

#if defined (USE_I2S_AUDIO)
  QATV_SetAudioSampleRateForI2S(QATV_AUD_RATE_44_118KHZ);
  QATV_SetAudioMode(QATV_AUD_MASTER);
  QATV_SetAudioGain(QATV_AUD_MASTER, 5);
#else
  QATV_SetAudioMode(QATV_AUD_DAC);
  QATV_SetAudioChannelForDAC(QATV_LEFT_RIGHT);
  QATV_SetAudioGain(QATV_AUD_DAC, 5);
#endif


  if (scan)
  {
    foundChannelIndex = 0;
    QATV_ScanChannels(qatv_scan_chn_map, 30, FoundChannelCallBack);
  }

}



void qatv_set_mode2(QATV_CHANNEL_MAP_P(map), Boolean scan)
{
  QATV_SetChannelMap(map);

  if (map[0][3] != QATV_ASTD_FM_RADIO)
  {
    QATV_SetVideoResolution(QATV_VID_320_240);
    QATV_Set601VideoOutClock(QATV_VID_CLOCK_INVERT);
    QATV_SetChromaLumaOrder(QATV_VID_CHRLUM_NORMAL);
    QATV_SetCbCrOrder(QATV_VID_CBCR_INVERT);
    QATV_SetVSyncPolarity(QATV_VID_ACTIVE_LOW);
    QATV_SetHSyncPolarity(QATV_VID_ACTIVE_HIGH);


    QATV_SetBright(7);
    QATV_SetColor(2);
    QATV_SetTint(0);
  }

#if defined (USE_I2S_AUDIO)
  QATV_SetAudioSampleRateForI2C(QATV_AUD_RATE_44_118KHZ);
  QATV_SetAudioMode(QATV_AUD_MASTER);
  QATV_SetAudioGain(QATV_AUD_MASTER, 5);
#else
  QATV_SetAudioMode(QATV_AUD_DAC);
  QATV_SetAudioChannelForDAC(QATV_LEFT_RIGHT);
  QATV_SetAudioGain(QATV_AUD_DAC, 5);
#endif

  if (scan)
  {
    int result = QATV_ScanChannels2Start(PNULL, 0, 30, 0, FoundChannelCallBack2);

    foundChannelIndex = 0;

    if (result == QATV_ERR_SUCCESS)
    {
// stop system_polling_handler while scanning
      StopTimerFunction(system_polling_handler);

// calling channel_scan_handler function per 500ms (500ms can be changed)
      StartTimerFunction(500, channel_scan_handler);
    }
  }
}


void qatv_set_channel(int channel, Boolean useScanedChannel)
{
  if (useScanedChannel)
  {
    QATV_SetChannel(foundChannelList[channel]);
  }
  else
  {
    QATV_SetChannel(channel);
  }

  QATV_SetAudioEnable(QATV_ENABLE);

// calling system_polling_handler function per 1000ms
  StartTimerFunction(1000, system_polling_handler);
}


void qatv_change_channel_map (unsigned short countryCode)
{
  QATV_CHANNEL_MAP_P(channelMap_p) = PNULL;

  int result = -1;
  
 
  if(countryCode < NUM_OF_QATV_COUNTRY_CODE)
  {
     channelMap_p = qatv_country_data_table[countryCode];
  }
  else
  {
     DevFail("invalid country code");

     channelMap_p = qatv_country_data_table[0];
  }  


  QATV_SetChannelMap(channelMap_p);


  if (channelMap_p[0][3] != QATV_ASTD_FM_RADIO)
  {
    QATV_SetVideoResolution(QATV_VID_320_240);
  }

  QATV_SetChannel(channelMap_p[0][0]);
}







void qatv_main(void)
{
/* initialising QATVM1100 */
  qatv_init();



/* TV function */
/* setting channel which is scanned firstly (0:index, 1:using scanned channel) */
  qatv_turn_on_tv(0, 1);

/* in case of direct channel */
/*
  qatv_turn_on_tv(25, 0);
*/


/* FM Radio function */
/* setting channel which is scanned firstly (0:index, 1:using scanned channel) */
  qatv_turn_on_radio(0, 1);

/* in case of direct channel */
/*
  qatv_turn_on_radio(8750, 0);
*/

}

/* case 1 : Analog TV */
void qatv_turn_on_tv((int index, int scanned)
{
  if (scanned)
  {
#if defined (NEW_SCAN_CHANNEL)
    scanFinished = 0;

/* setting channel map and scanning channel using new scan function */
    qatv_set_mode2(qatv_ntsc_chn_map, 1);

    while (scanFinished == 0);

    qatv_set_channel(index, 1);
#else
/* setting channel map and scanning channel */
    qatv_set_mode(qatv_ntsc_chn_map, 1);

    qatv_set_channel(index, 1);
#endif

  }
  else
  {
    qatv_set_mode(qatv_ntsc_chn_map, 0);

    qatv_set_channel(index, 0);
  }
}



/* case 2 : FM Radio */
void qatv_turn_on_radio(int index, int scanned)
{
  if (scanned)
  {
#if defined (NEW_SCAN_CHANNEL)
    scanFinished = 0;

/* setting channel map and scanning channel using new scan function */
    qatv_set_mode2(qatv_fm_chn_map, 1);

    while (scanFinished == 0);

    qatv_set_channel(index, 1);
#else
/* setting channel map and scanning channel */
    qatv_set_mode(qatv_fm_chn_map, 1);

    qatv_set_channel(index, 1);
#endif

  }
  else
  {
    qatv_set_mode(qatv_fm_chn_map, 0);

    qatv_set_channel(index, 0);
  }
}


⌨️ 快捷键说明

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