📄 audio.c
字号:
i = i | 0x04;
write_eeprom(j,i);
}
if (!(display_request_flags & MUTE_DISPLAY))
write_nicam(0x0E, 0x24);
break;
case 5:/* NICAM_LL1*/
write_nicam(0x0E, 0xA8);
force_stereo_standard();
write_nicam(0x18, 0x2E);
write_nicam(0x11, 0x91);/* AGC switched OFF*/
write_nicam(0x12, 0x20);/* AGC switched OFF*/
millisecond_delay(160);
write_SWD_control();
if (!(tuning_flags & TUNING_REQUEST))
{
j = EEPROM_START_NICAM_STANDARD + (channel-1);
i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
i = i & 0x80;
i = i | 0x05;
write_eeprom(j,i);
}
if (!(display_request_flags & MUTE_DISPLAY))
write_nicam(0x0E, 0x28);
break;
case 6:/* ZWEITON BG*/
write_nicam(0x0E, 0xA2);/* TO force Zweiton we need to force mono for
some time */
#ifdef AUTO_ZWEITON
force_stereo_standard();
#else
write_nicam(0x08, 0x00);
millisecond_delay(10);
write_nicam(0x0E, 0xA0);
user_flags = user_flags & ~MONO_FLAG;
write_nicam(0x18, 0x0E);
write_nicam(0x01, 0x80);/* Reset lock detectors*/
#endif
millisecond_delay(500);
millisecond_delay(500);
millisecond_delay(500);
write_zweiton_SWD_control();
if (!(tuning_flags & TUNING_REQUEST))
{
j = EEPROM_START_NICAM_STANDARD + (channel-1);
i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
i = i & 0x80;
i = i | 0x06;
write_eeprom(j,i);
}
if (!(display_request_flags & MUTE_DISPLAY))
{
write_nicam(0x0E, 0x22);
#ifndef AUTO_ZWEITON
write_nicam(0x08, 0x20);
#endif
}
break;
case 7:/* ZWEITON DK*/
configure_zweiton_DK();
write_nicam(0x01, 0x80);/* Reset lock detectors*/
millisecond_delay(500);
millisecond_delay(500);
millisecond_delay(500);
write_zweiton_SWD_control();
if (!(tuning_flags & TUNING_REQUEST))
{
j = EEPROM_START_NICAM_STANDARD + (channel-1);
i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
i = i & 0x80;
i = i | 0x07;
write_eeprom(j,i);
}
if (!(display_request_flags & MUTE_DISPLAY))
{
write_nicam(0x0E, 0x20);
write_nicam(0x08, 0x20);
}
break;
#ifdef FM_WIDE
case 8: /* FM MONO DK-WIDE */
write_nicam(0x0E, 0x98);/* same as L*/
write_nicam(0x0E, 0x90);
write_nicam(0x18, 0x1E);/* Wide mode */
write_nicam(0x39, 0x0C);/* Freq 6.5 Mhz*/
write_nicam(0x3A, 0xB4);
write_nicam(0x3B, 0x2C);
write_nicam(0x3C, 0x0A);
write_nicam(0x02, 0x14);/* As deviation wide FM prescaler level at -12dB*/
write_nicam(0x04, 0x00);
for (i = 0x31 , j = 0; i<= 0x38; i++, j++)
{
write_nicam(i, FM_MONO_WIDE_DATA[j]);
}
if (!(tuning_flags & TUNING_REQUEST))
{
j = EEPROM_START_NICAM_STANDARD + (channel-1);
i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
i = i & 0x80;
i = i | 0x08;
write_eeprom(j,i);
}
if (!(display_request_flags & MUTE_DISPLAY))
{
write_nicam(0x0E, 0x40); /* MONO overwrite */
write_nicam(0x08, 0x20);
}
break;
#endif
#endif
}
}
/***********************************************************************************************/
#ifdef FM_WIDE
const unsigned char FM_MONO_WIDE_DATA[] =
{
0x00,
0x01,
0x01,
0xFC,
0x08,
0xFB,
0xF8,
0x4A,
};
#endif
#endif
/*****************************************************************************
INPUTS : Current volume
OUTPUTS : Volume + 1
MUTE_DISPLAY - Unmute volume
see update_volume
DESCRIPTION: This function increments the user volume up to the maximum and
disable user mute if active.
*****************************************************************************/
void volume_up(void)
{
#ifdef NICAM
if (pwmout < MAXIMUM_VOLUME)
pwmout++;
#else
if (volume < MAXIMUM_VOLUME)
volume++;
#endif
update_volume();
}
/*****************************************************************************
INPUTS : Current volume
OUTPUTS : Volume - 1
see update_volume
DESCRIPTION: This function decrements the user volume down to the minimum.
*****************************************************************************/
void volume_down(void)
{
#ifdef NICAM
if (pwmout > 0)
pwmout--;
#else
if (volume > 0)
volume--;
#endif
update_volume();
}
/*****************************************************************************
INPUTS : VOLUME - New volume
OUTPUTS : VOLUME_DISPLAY - Enable volume display
REFRESH_DISPLAY - Refresh the display if volume already displayed
see write_video
see update_user_mute
DESCRIPTION: This function updates the volume register (AUDIO processor)
and update user mute (enable/disable).
Do not save the new volume in the EEPROM so as to resore
factory volume after power-on.
*****************************************************************************/
void update_volume(void)
{
/* Update volume register */
display_request_flags = display_request_flags & ~MUTE_DISPLAY;
#ifdef NICAM
write_nicam(0x00, pwmout);
#else
write_video_eeprom_data(VOLUME, ((0x3F-volume)*2));
#endif
/* Enable volume display and refresh the display */
display_request_flags = display_request_flags | COMMERCIAL_DISPLAY | REFRESH_DISPLAY;
/* Set volume time-out */
slow_timers[COMMERCIAL_TIMER] = VOLUME_TIME_OUT;
update_user_mute();
}
/*****************************************************************************
INPUTS : none
OUTPUTS : MUTE_DISPLAY - Toggled
see update_user_mute
DESCRIPTION: This function toggles the user mute.
*****************************************************************************/
void toggle_mute(void)
{
display_request_flags = display_request_flags ^ MUTE_DISPLAY;
update_user_mute();
}
/*****************************************************************************
INPUTS : MUTE_DISPLAY - Set if user mute active
video_status - Check if a video signal has been detected
OUTPUTS : MUTE - Set to mute audio
see write_video
DESCRIPTION: This function updates the mute register (video processor).
Do not save the mute flag in the EEPROM so as to restore unmute
state after power-on.
*****************************************************************************/
void update_user_mute(void)
{
/* Allow to unmute if a valid signal has been detected */
unsigned char i,j;
if (!(tv_flags & ENABLE_POWER))
return;
read_video_new();
i = read_data[0] & 0x08;
if (i == 0x08) /* Unmute only if IDENT is high */
{
j = misc3 & 0x04;
if (j ==0)
write_video_ram_data(BLUE_SCREEN, 0x00);
if ((tuning_flags & AUTOPROG_REQUEST) || (tuning_flags & AUTOSEARCH_REQUEST)
|| (tuning_state != STOP_TUNING)||(source_flags&AV_REQUEST));
else
{
if (display_request_flags & MUTE_DISPLAY)
{
mute_audio();
}
else
{
if(source == TUNER)
{
#ifdef NICAM
if (!(tuning_flags & TUNING_REQUEST))
{
write_video_ram_data(MAIN_AUDIO_OUT, 0x00);
read_status = read_nicam(0x0E);
read_status = read_status & ~0x80;
write_nicam(0x0E, read_status);
read_status = read_status & 0x0f;
if(read_status == 0) /* Manual mode */
{
if (stereo_std ==8)
write_nicam(0x08, 0x20);
else
{
if(user_flags & MONO_FLAG)
write_nicam(0x08, 0x10);
else
{
write_nicam(0x08, 0x20);
write_zweiton_SWD_control();
}
}
}
#ifdef FM_WIDE
if ((!(user_flags & FORCED_NICAM_FLAG)) && (stereo_std != 8))
#else
if (!(user_flags & FORCED_NICAM_FLAG))
#endif
{
if (stereo_std == 1)
{
force_mono_standard();
}
else
{
i = read_nicam(0x0D);
i = i & 0x8E;
j = read_nicam(0x0C);
j = j & 0x04;
k = read_nicam(0x0A);
if ( j == 0x04) /* If ZWEITON DETECTED */
force_stereo_standard();
else
{
if(( i == 0x80 ) || (i == 0x82) || (i == 0x84))
{
if (k <5)
force_stereo_standard();
if (k >50)
force_mono_standard();
}
else
{
force_mono_standard();
}
}
}
}
}
#else
write_video_ram_data(MAIN_AUDIO_OUT, 0x00);
#endif
}
else
{
write_video_ram_data(MAIN_AUDIO_OUT, 0x01);
}
}
}
}
else
{
mute_audio();
j = misc3 & 0x04;
if (j ==0)
{
if ((tuning_flags & AUTOPROG_REQUEST) || (tuning_flags & AUTOSEARCH_REQUEST))
{
/* write_video_ram_data(MUTE_CVBS, 0x00); */
write_video_ram_data(BLUE_SCREEN, 0x00);
/* video[0x09] = video[0x09] |(0x40);
write_video(0x09,video[0x09]);*/
}
else
{
if (display_request_flags & SERVICE_DISPLAY)
return;
/* write_video_ram_data(MUTE_CVBS, 0x20); */
write_video_ram_data(BLUE_SCREEN, 0x80);
// video[0x09] = video[0x09] & ~(0x40);
// write_video(0x09,video[0x09]);
}
}
}
}
/*****************************************************************************
INPUTS : none
OUTPUTS :
DESCRIPTION:
*****************************************************************************/
void store_autocolor_sound(void)
{
unsigned char i,j,k;
unsigned int m;
//feman this function may be optimize 00/3/17
write_video_ram_data(SOUND_STANDARD,0x00); /* 6.5mhz select */
millisecond_delay(3);
i=check_sound_level();
k=AUDIO_DK;/* 6.5 MHZ Selected */
write_video_ram_data(SOUND_STANDARD,0x02); /* 6.0mhz select */
millisecond_delay(3);
j=check_sound_level();
if(i<j)
{
k=AUDIO_I;/* 6.0 MHZ Selected */
i=j;
}
write_video_ram_data(SOUND_STANDARD,0x04); /* 5.5mhz select */
millisecond_delay(3);
j=check_sound_level();
if(i<j)
{
k=AUDIO_BG;/* 5.5 MHZ Selected */
i=j;
}
write_video_ram_data(SOUND_STANDARD,0x06); /* 4.5mhz select */
millisecond_delay(3);
j=check_sound_level();
if(i<j)
{
k=AUDIO_MN;/* 4.5 MHZ Selected */
i=j;
}
k = 0xA0 | k ;
m = EEPROM_START_CHANNEL_MEMORY + (((channel -1)*3) + SETTINGS);
write_eeprom(m ,k);
}
/*****************************************************************************
INPUTS : none
OUTPUTS :
DESCRIPTION:
*****************************************************************************/
unsigned char check_sound_level(void)
{
unsigned char i;
read_video_new();
i=read_data[2] & 0x38;
if(i==0x20)
i=8;
else if(i==0x28)
i=7;
else if(i==0x38)
i=6;
else if(i==0x30)
i=5;
else if(i==0x10)
i=4;
else if(i==0x18)
i=3;
else if(i==0x08)
i=2;
else if(i==0x00)
i=1;
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -