📄 radio_mv114_kst.c
字号:
/* note: this program is for self tuned radio MV114, MV014, MV011 */
/* PLL IC: LC72131, TUNER IC: LA1844 */
/* state=FM AM mode */
#include "regmap.h"
#include "global.h"
#include "func.h"
#include "radio_mv114_kst.h"
#include "radio_rds.h"
#include "ircode.h"
#include "osd.h"
#include "dsp3_if.h"
#include "set.h"
#include "audctrl.h"
#include "util.h"
extern UINT16 check_sum(BYTE *data,BYTE len);
#define NEW_AUTO_SEARCH_ALL
#define TUNER_DBG
/*
#ifdef SUPPORT_TUNER_DBG
#define TUNER_DBG
#endif
*/
/*
#ifndef DVDRELEASE
#define TUNER_DBG
#endif
#ifndef TUNER_DBG
#undef printf
#undef print_block
#define printf(f, a...) do {} while (0)
#define print_block(x,y) do {} while (0)
#endif
*/
#ifndef SUPPORT_OSD
#undef PrintOsdMsg(x,y,z,w)
#define PrintOsdMsg(x,y,z,w)
#endif
/*
* declare extern function
*/
extern void init_ir_num(void);
extern void polling_vfdr(void);
/*from lc72131.c*/
extern void tuner_mute( BYTE );
extern void set_band(BYTE);
extern void set_mono_stereo(BYTE);
extern void set_station(BYTE i);
extern BYTE is_station();
extern void init_tuner();
extern BYTE test_tuner();
extern void set_freq(UINT16 freq);
extern BYTE is_stereo(void);
BYTE search_station=0;
static BYTE search_dir=0;
BYTE write2mem=0;
extern int rep_ir_times;
#include ".\\Customers\\Sunplus\\vfd_gbmsample_l.h"
#include "vfdfunc.h"
extern void vfd_set_str();
/*/////////////////////////
Creator: xyy 2004-3-12
Function:Auto search all station and save the station to e2prom
//////////////////////////*/
#ifndef NEW_AUTO_SEARCH_ALL
void auto_search_all()
{
int i=0;
search_dir = 1;
if(tuner.bandswitch)//am
{
tuner.ambak=AM_FREQ_MIN+0x30;
while(1)
{
if(tuner.ambak == AM_FREQ_MIN)
{
i = 0;
search_station = 0;
save_tuner_E2PROM();
tuner.am_ch = 1;
set_station(tuner.am_ch);
break;
}
Amautosearch(AUTOSEARCHUP);
if(search_station==1)
{
tuner.amfreq[i] = tuner.ambak;
i++;
//save station
search_station = 0;
search_dir = 1;
}
}
}
else //fm*/
{
tuner.fmbak=FM_FREQ_MIN+1;
while(1)
{
if(tuner.fmbak == FM_FREQ_MIN)
{
i = 0;
search_station = 0;
save_tuner_E2PROM();
tuner.fm_ch = 1;
set_station(tuner.fm_ch);
break;
}
Fmautosearch(AUTOSEARCHUP);
if(search_station==1)
{
tuner.fmfreq[i] = tuner.fmbak;
i++;
//save station
search_station = 0;
search_dir = 1;
}
}
}
}
#endif//NEW_AUTO_SEARCH_ALL
#ifdef NEW_AUTO_SEARCH_ALL
void auto_search_all_am()
{
BYTE ch;
if(tuner.bandswitch == 0)
{
tuner.bandswitch=(!tuner.bandswitch);
set_band(tuner.bandswitch);
}
//now is am
tuner.ambak = AM_FREQ_MIN;
tuner.am_ch = 0;
for(ch = 0;ch < MAX_MEM_BAND;ch++)
{
while(1)
{
tuner.ambak = (tuner.ambak + 0x30); // 3*3k step
if(tuner.ambak>AM_FREQ_MAX) //am max
{
break;
}
tuner.amfreq[tuner.am_ch] = tuner.ambak;
disfreq();
if(is_station())
{
break;
}
}
if(tuner.ambak>AM_FREQ_MAX) //am max
{
break;
}
if(tuner.am_ch < (MAX_MEM_BAND-1))
tuner.am_ch++;
else
tuner.am_ch = 0;
}
}
void auto_search_all_fm()
{
BYTE ch;
if(tuner.bandswitch == 1)
{
tuner.bandswitch=(!tuner.bandswitch);
set_band(tuner.bandswitch);
}
//now is fm
tuner.fmbak = FM_FREQ_MIN;
tuner.fm_ch = 0;
tuner.bandswitch = 0;//fm
for(ch = 0;ch < MAX_MEM_BAND;ch++)
{
while(1)
{
tuner.fmbak=(tuner.fmbak+1); // 100K STEP, ref clock: 25k
if(tuner.fmbak>FM_FREQ_MAX) //fm max 107.8MHZ
{
break;
}
tuner.fmfreq[tuner.fm_ch] =tuner.fmbak ;
disfreq();
if(is_station())
break;
}
if(tuner.fmbak >FM_FREQ_MAX) //fm max 107.8MHZ
{
break;
}
if(tuner.fm_ch < (MAX_MEM_BAND-1))
tuner.fm_ch++;
else
tuner.fm_ch = 0;
}
}
#endif//NEW_AUTO_SEARCH_ALL
/*
char *capitalise(char *p)
mode==0
----translate lowercase into capital
mode==1
----translate capital into lowercase
len ??????
*/
void capitalize(char *p,BYTE mode,BYTE len)
{
while(len)
{
if(*p>='a'&&*p<='z')
{
if(mode)
*p+=0x20;
else
*p-=0x20;
}
p++;
len--;
}
}
void str_filter(char *p,BYTE len)
{
//capitalize(p,len);
while(len)
{
if(*p>='A'&&*p<='Z')
{
}
else if((*p == '-')||(*p == ':'))
{
}
else if(*p>='0'&&*p<='9')
{
}
else
{
*p = ' ';
}
p++;
len--;
}
}
#ifdef XINGQIU_DVD_RECEIVER//xyy 2004-5-24 9:06
void tuner_key(BYTE key)
{
static BYTE enter_flag=0;
//return;
switch(key)
{
/* case IRC_0:
case IRC_1:
printf("======== hello hello =======\n");
tuner_oper_mode = RECALL_OR_STORE;
break;*/
case IRC_MUTE:
{
int id;
//rds_decoder_init();
//return;
//printf("size of :%d\n",sizeof(tuner));
user_mute=!user_mute;
tuner_mute(user_mute);
if(user_mute)
{
id=STR_OS_MUTE;
OSD1000ISP_STATUS(OSDISP_MUTE, OSDIR_MUTE);
PrintOsdMsg(id,REGION1,0,0);
}
else
{
// id=STR_OS_SPACE;
OSD1000ISP_STATUS(OSDISP_CLEAR, OSDIR_GLOBAL);
OSD_OnOffRegion(OSD_OFF,1);//xyy 2003-10-13 17:15
}
break;
}
case IRC_GOTO:
tuner_oper_mode = AUTO_SEARCH;
timeout_vfd = 0;
if(tuner.bandswitch == 1)
{
auto_search_all_am();
tuner.am_ch = 0;
set_station(tuner.am_ch);
}
else
{
auto_search_all_fm();
tuner.fm_ch = 0;
set_station(tuner.fm_ch);
}
save_tuner_E2PROM();
tuner_oper_mode = NORMAL_TUNE;
disfreq();
break;
case IRC_SETUP:
search_station = 1;
tuner_oper_mode = RECALL_OR_STORE;
timeout_vfd = 6000;
break;
case IRC_AUD_LANGUAGE:
if(!tuner.bandswitch)
{
tuner_st_mono();
timeout_vfd = 4000;
}
break;
case IRC_CLEAR:
printf("====== clear ======\n");
break;
case IRC_TITLEMENU:
tuner_oper_mode = FREQ_DIRECT_CALL;
timeout_vfd = 6000;
erase_vfd_mem();
if(tuner.bandswitch)
{
station_input_index = 1;
psprintf(linebuf,"%02d 0000",tuner.am_ch);
}
else
{
psprintf(linebuf,"%02d 00000",tuner.fm_ch);
vfd_set_dot(0x49);
}
vfd_set_str(0,0,0,linebuf);
break;
#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 13:54
case IRC_SELECT:
if(enter_flag == 0)
{
erase_vfd_mem();
if(psReadyFlag == 0x0f)
{
rds_func_flag = PS_FUNC;
psprintf(RegionValStr[REGION1],"PS : %s",programServiceBuf);
PrintOsdMsg(0, REGION1, 0, 1);
}
else
{
//vfd_set_str(0,0,0," NO PS ");
psprintf(RegionValStr[REGION1],"NO PS");
PrintOsdMsg(0, REGION1, 0, 1);
rds_func_flag = 0;
}
enter_flag++;
}
else if(enter_flag == 1)
{
erase_vfd_mem();
if(ptyReadyFlag == 0xff)
{
rds_func_flag = PTY_FUNC;
//printf( "PTY %s",programTypeBuf);
//PrintOsdMsg(, y, z, w)
psprintf(RegionValStr[REGION1],"PYP : %s",programTypeBuf);
PrintOsdMsg(0, REGION1, 0, 1);
}
else
{
//vfd_set_str(0,0,0," NO PTY ");
psprintf(RegionValStr[REGION1],"NO PYP");
PrintOsdMsg(0, REGION1, 0, 1);
rds_func_flag = 0;
}
enter_flag++;
}
else if(enter_flag == 2)
{
erase_vfd_mem();
if((txtBreadyFlag == 0xffff)||(txtAreadyFlag == 0xffff))
{
rds_func_flag = RT_FUNC;
//printf("%s\n",radioTextBufA[0]);
capitalize(radioTextBufA[radio_text_type], 0, 64);
str_filter(radioTextBufA[radio_text_type], 64);
//printf("%s\n",radioTextBufA[0]);
psprintf(RegionValStr[REGION1],"RT : %s",radioTextBufA[radio_text_type]);
PrintOsdMsg(0, REGION1, 0, 1);
}
else
{
//vfd_set_str(0,0,0," NO RT ");
psprintf(RegionValStr[REGION1],"NO RT");
PrintOsdMsg(0, REGION1, 0, 1);
rds_func_flag = 0;
}
enter_flag++;
}
else if(enter_flag == 3)
{
erase_vfd_mem();
if(ctReadyFlag == 0xff)
{
rds_func_flag = CT_FUNC;
//printf("CT %s\n",clocktimeBuf);
psprintf(RegionValStr[REGION1],"%s",clocktimeBuf);
PrintOsdMsg(0, REGION1, 0, 1);
}
else
{
//vfd_set_str(0,0,0," NO CT ");
psprintf(RegionValStr[REGION1],"NO CT");
PrintOsdMsg(0, REGION1, 0, 1);
rds_func_flag = 0;
}
enter_flag++;
}
else if(enter_flag == 4)
{
erase_vfd_mem();
if(ptynReadyFlag == 0x0f)
{
rds_func_flag = PTYN_FUNC;
capitalize(programTypeNameBuf, 0, 9);
str_filter(programTypeNameBuf,9);
psprintf(RegionValStr[REGION1],"PTYN:%s",programTypeNameBuf);
PrintOsdMsg(0, REGION1, 0, 1);
}
else
{
//vfd_set_str(0,0,0," NO PTYN ");
rds_func_flag = 0;
psprintf(RegionValStr[REGION1],"NO PTYN");
PrintOsdMsg(0, REGION1, 0, 1);
}
enter_flag = 0;
}
rdsinfo_dispindex = 0;
timeout_vfd = 2000;
break;
#endif
case IRC_FORWARD:/* auto search up */
#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
rds_clear_var();
#endif
tuner_oper_mode = NORMAL_TUNE;
tuner.Istuning[tuner.bandswitch]=1;
timeout_vfd = 0;
// to avoid the noise when enter auto search mode
tuner_mute_flag = 0;
search_dir=1;
break;
case IRC_BACKWARD: /* auto search down */
#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
rds_clear_var();
#endif
// to avoid the noise when enter auto search mode
tuner_oper_mode = NORMAL_TUNE;
timeout_vfd = 0;
tuner_mute_flag = 0;
search_dir=2;
break;
case IRC_LEFT:
search_dir = 0;
search(SEARCHDEC);
break;
case IRC_RIGHT:
search_dir = 0;
search(SEARCHADD);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -