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

📄 radio.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
#define RADIO_MAIN_FILE

#include "winav.h"
#include "gdi.h"
#include "cc.h"
#include "hal.h"
#include "radiodrv.h"
#include "radio.h"
#include "input.h"
#include "osd.h"
#include "poweronmenu.h"
#include "mainmenu.h"
#include "rtcdrv.h"
#include "disp.h"
#include "osd.h"
#include "osdnd.h"
#include "fontindex.h"
#include "OSDString\\strextrn.h"
#include "storage.h"
#include "chips.h"
#include "oswrap.h"
#include "romld.h"
#include "convchar.h"
#ifdef CT950_STYLE
#include "dvdsetup_op.h"
#endif //CT950_STYLE

#ifdef SUPPORT_RADIO_TUNER
/* 
const BYTE _aRADIO_Frame_BG[] =
{
#include "bmp/Radio_FrameBG.txt"
};

const BYTE _aRADIO_Title_BG[] =
{
#include "bmp/Radio_TitleBG.txt"
};

const BYTE _aRADIO_Freq_BG[] =
{
#include "bmp/Radio_FreqBG.txt"
};

const BYTE _aRADIO_Info_BG[] =
{
#include "bmp/Radio_InfoBG.txt"
};
*/

/*
const BYTE _aRADIO_H_Button[] =
{
#include "bmp/HButton.txt"
};

const BYTE _aRADIO_N_Button[] =
{
#include "bmp/NButton.txt"
};
*/

BYTE *_aRADIO_Frame_BG;
BYTE *_aRADIO_Title_BG;
BYTE *_aRADIO_Freq_BG;
BYTE *_aRADIO_Info_BG;
BYTE *_aRADIOArray[4];

/*
const BYTE *_aRADIOArray[] = 
{
    _aRADIO_Frame_BG,
    _aRADIO_Title_BG,
    _aRADIO_Freq_BG,
    _aRADIO_Info_BG
    //_aRADIO_H_Button,
    //_aRADIO_N_Button
};
*/

const DWORD _aRADIOBG_Palette[] =  
{
#include "bmp/palRadioBG.txt"
};
/*
const DWORD _aRADIOHButton_Palette[] =  
{
#include "bmp/palHButtonBG.txt"
};

const DWORD _aRADIONButton_Palette[] =  
{
#include "bmp/palNButtonBG.txt"
};
*/
/*
WORD aRADIOSpace[] = {1, CHAR_SPACE};
WORD aRADIODot[] = {1, CHAR_FULL_STOP};
WORD aRADIOColon[] = {1, CHAR_COLON};
WORD aRADIOSolidus[] = {1, CHAR_SOLIDUS};
//WORD aRADIO76[] = {2, CHAR_7, CHAR_6}; 
//WORD aRADIO795[] = {4, CHAR_7, CHAR_9, CHAR_FULL_STOP, CHAR_5};
//WORD aRADIO83[] = {2, CHAR_8, CHAR_3};
//WORD aRADIO84[] = {2, CHAR_8, CHAR_4}; 
WORD aRADIO875[] = {4, CHAR_8, CHAR_7, CHAR_FULL_STOP, CHAR_5}; 
//WORD aRADIO90[] = {2, CHAR_9, CHAR_0};
//WORD aRADIO92[] = {2, CHAR_9, CHAR_2};
WORD aRADIO93[] = {2, CHAR_9, CHAR_3};
WORD aRADIO98[] = {2, CHAR_9, CHAR_8};
//WORD aRADIO100[] = {3, CHAR_1, CHAR_0, CHAR_0}; 
//WORD aRADIO1029[] = {5, CHAR_1, CHAR_0, CHAR_2, CHAR_FULL_STOP, CHAR_9};
WORD aRADIO103[] = {3, CHAR_1, CHAR_0, CHAR_3};
WORD aRADIO108[] = {3, CHAR_1, CHAR_0, CHAR_8};
*/

WORD *_aRADIOUSEuropeBand[RADIO_BAND_DRAW_NUM] = 
{
    aRADIO875,
    aRADIO93,
    aRADIO98,
    aRADIO103,
    aRADIO108,
};

/*
WORD *_aRADIOJapanWideBand[RADIO_BAND_DRAW_NUM] = 
{
    aRADIO76,
    aRADIO84,
    aRADIO92,
    aRADIO100,
    aRADIO108,
};

WORD *_aRADIOJapanNormalBand[RADIO_BAND_DRAW_NUM] = 
{
    aRADIO76,
    aRADIO795,
    aRADIO83,
    aRADIO865,
    aRADIO90,
};
*/

BYTE __bPlayRadio;	// Save current radio playing status

WORD _wRADIOFavorite[RADIO_FAVORITE_NUM];	// An array for save favorite stations
BYTE _bRADIOMode;	// Save current radio mode
BYTE _bRADIOBackupMode;	// Backup current radio mode
BYTE _bRADIOFavoritePlay;	// Save playing favorite item
BYTE _bRADIOButtonCursorIndex;	// Save cursor position of mode button 
BYTE _bRADIOFreqRange;	// 0: US/Europe, 1: Japan Wide, 2: Japan Normal
BYTE _bRADIOSpace;	// 0: 200kHz, 1: 100kHz, 2: 50kHz
WORD _wRADIOBackupFreq;	// Save the last playing station
BYTE _bRADIOStationNum;	// Save the number of found stations
BYTE _bRecordHighlightPos;	// Save the selected record item
DWORD _dwRadioFlashTime;	// Save time for flash something (freq. arrow, record list, mode button)
BYTE _bRADIOFlash;	// Save the flash status
#ifdef SUPPORT_RADIO_RDS
DWORD _dwRDSFlashTime;	// Save time for RDS information update
DWORD _dwRDSWaitTime;		// Save time as a delay count for the next RDS info. display    
WORD _wRDSDataPos;	// Save current RDS data position
BYTE _bRDSDataRemainNum;	// Save the number of non-displayed RDS data
BYTE _bCurRDSType;	// Save current displaying RDS info.
#endif

// Define channel start freq.
//WORD _wRADIOStartFreq[3] = {8750, 7600, 7600};
WORD _wRADIOStartFreq = 8750;
// Define channel end freq.
//WORD _wRADIOEndFreq[3] = {10800, 10800, 9000};
WORD _wRADIOEndFreq = 10800;
// Define real range of channel band.
//WORD _wRADIOFreqRange[3] = {10800-8750, 10800-7600, 9000-7600};
WORD _wRADIOFreqRange = 10800 - 8750;
// Define real value of channel space.
//BYTE _bRADIOSpaceValue[3] = {20, 10, 5};
BYTE _bRADIOSpaceValue = 10;

const  RADIO_MODE_BUTTON RADIOModeButton[RADIO_MODE_NUM] = 
{
    {aMENUNormal, RADIO_BUTTON_NORMAL_START_H, RADIO_BUTTON_NORMAL_START_V, RADIO_MODE_NORMAL},
    {aRADIORecord, RADIO_BUTTON_RECORD_START_H, RADIO_BUTTON_RECORD_START_V, RADIO_MODE_RECORD},    		
    {aPOWERONIconFavorite, RADIO_BUTTON_FAVORITE_START_H, RADIO_BUTTON_FAVORITE_START_V, RADIO_MODE_FAVORITE},    
    {aRADIOScan, RADIO_BUTTON_SCAN_START_H, RADIO_BUTTON_SCAN_START_V, RADIO_MODE_SCAN}, 
};

extern  DWORD __dwVolAudio;

#ifdef SUPPORT_RADIO_RDS
//BYTE aRDSTemplate[] = {28, 'F', 'M', ' ', 'R', 'a', 'd', 'i', 'o', ' ', 'W', 'e', 'l', 'c', 'o', 'm', 'e', ' ', 't', 'o', ' ', 'C', 'h', 'e', 'e', 'r', 't', 'e', 'k'}; 
BYTE aGetRDSData[65];
WORD aConvRDSCT[30]; // clock time and date
WORD aConvRDSPS[9]; //program service name has 8 characters from RDS spec.
WORD aConvRDSPTY[10]; //Program type code has 8 character from RDS spec. the bRADIODRV_RDS_PTY[0] using PTY length
//WORD aConvRDSCT[65]; // clock time and date
//WORD aConvRDSPS[65]; //program service name has 8 characters from RDS spec.
//WORD aConvRDSPTY[65]; //Program type code has 8 character from RDS spec. the bRADIODRV_RDS_PTY[0] using PTY length
WORD aConvRDSRT[65]; //RADIO TEXT has 64 characters from RDS spec and bRADIODRV_RWORD aConvRDSRT[65]; //RADIO TEXT has 64 characters from RDS spec and bRADIODRV_R
WORD aShowRDSData[65];

WORD *aConvRDSData[] =
{
    aConvRDSCT,
    aConvRDSPS,
    aConvRDSPTY,
    aConvRDSRT,    
};

BYTE SupportRDSType[] = 
{   
    RDS_CT,
    RDS_PS,    
    RDS_PTY,
    RDS_RT,    
};

// The order that save each RDS update status is the same as SupportRDSType[].
BYTE RDSUpdateStatus[RDS_TYPE_NUMBER];  // Save each RDS info. update status.

WORD *aWeekDay[7] = 
{    
    aWeeklyDay_Mon,
    aWeeklyDay_Tue,
    aWeeklyDay_Wed,
    aWeeklyDay_Thu,
    aWeeklyDay_Fri,
    aWeeklyDay_Sat,    
    aWeeklyDay_Sun
};
#endif


//*********************************************************************************************************
//  Function    :   RADIO_Entry
//  Abstract    :   This is the entry function of radio.
//  Arguments   :   none.
//  Return		:   
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void RADIO_Entry(BYTE bRadioMode)
{  
#ifdef SUPPORT_RADIO_RDS
    BYTE bTemp;
    //GDI_REGION_INFO RegionInfo;
#endif
	
    //RADIO_ConfigOSDRegion();
    OSD_ChangeUI(OSD_UI_RADIO_TUNER, OSD_ENTER_UI);

    if (!RADIO_Initial(TRUE))
    {
        POWERONMENU_Initial();
        return; 
    }
    
    _RADIO_ReadData();	
    
    if (bRadioMode == RADIO_MODE_FAVORITE)
    {
        RADIODRV_tune(_wRADIOFavorite[0]);
    }
    else
    {
        // Broadcast backup freq.
        // Backup freq. save the last played freq. before user leave radio function.    
        RADIODRV_tune(_wRADIOBackupFreq);
    }

    __bPlayRadio = TRUE;
    _bRADIOButtonCursorIndex = bRadioMode;
    _bRADIOFavoritePlay = 0;
    _bRecordHighlightPos = 0;
    _bRADIOMode = bRadioMode;
    _bRADIOBackupMode = _bRADIOMode;
#ifdef SUPPORT_RADIO_RDS
    _bRDSDataRemainNum = 0;
    _wRDSDataPos = RADIO_RDS_INFO_START_H;
    _bCurRDSType = 0;
    _dwRDSWaitTime = OS_GetSysTimer();
	
    for (bTemp = 0; bTemp < RDS_TYPE_NUMBER; bTemp++)
    {
        RDSUpdateStatus[bTemp] = 0; //Initial the RDS update status.
    }    
	
    // Config RDS display region.
    //RegionInfo.wWidth = RADIO_RDS_REGION_WIDTH;
    //RegionInfo.wHeight = RADIO_RDS_REGION_HEIGHT;
    //RegionInfo.bColorMode = GDI_OSD_8B_MODE;
    //RegionInfo.dwTAddr = RADIO_RDS_REGION_ADDR;    
    //GDI_ConfigRegionInfo(2, &RegionInfo);    //Borrow Region 2 (SP OSD). Need recover when exit radio.  
#endif	
    // Load radio background BMP data. 
    if (!_RADIO_LoadBmpData())
    {
        printf("Can't find radio BMP data from flash!!\n");
        POWERONMENU_Initial();
        return; 
    }
   
    RADIO_ShowFrame();    
}

//*********************************************************************************************************
//  Function    :   RADIO_ProcessKey
//  Abstract    :   Call this function to process the keys.
//  Arguments  :   none.
//  Return	 :   KEY_NO_KEY: The input key is processed.
//                 :   INVALID_KEY: The input key is not allowed.
//                 :   KEY_BYPASS: Will not process this key and pass it to main flow to process it.
//                 :   KEY_XXX: The main program need do more process for the key.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
BYTE RADIO_ProcessKey(void)
{
    if (!__bPlayRadio)
    {
        return KEY_BYPASS;
    }

    if (__bKey == KEY_POWER)
    {
#ifdef WRITE_EEPROM_ENABLE //SYSTEM_8051
        // Save current playing radio frequency.
        _wRADIOBackupFreq = RADIODRV_GetFreq();
        HAL_WriteStorage(RADIO_ADDR_BACKUP_FREQ, (BYTE *)&_wRADIOBackupFreq, EPROM_BACKUP_FREQ_BYTE);
#endif //#ifdef WRITE_EEPROM_ENABLE 
        return KEY_BYPASS;
    }

    _dwRadioFlashTime = OS_GetSysTimer();

    if ((__bKey == KEY_VOL_UP) || (__bKey == KEY_VOL_DOWN) || (__bKey == KEY_MUTE))
    {
        _RADIO_VolumeControl(__bKey);
        return KEY_NO_KEY;
    }

#ifdef SUPPORT_RADIO_RDS	
    // When radio frequency are changed, reset RDS status.
    if ((_bRADIOMode == RADIO_MODE_NORMAL) || (_bRADIOMode == RADIO_MODE_FAVORITE))
    {
        if ((__bKey == KEY_UP) || (__bKey == KEY_DOWN) || (__bKey == KEY_RIGHT) || (__bKey == KEY_LEFT))
        {
             _RADIO_ResetRDS(TRUE);
        }
    }
#endif	

    switch (_bRADIOMode)
    {

⌨️ 快捷键说明

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