📄 radio.c
字号:
#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 + -