📄 service.c
字号:
#include "tv_glob.h"
#include "st92196.h"
#include "service.h"
#include "command.h"
#include "register.h"
#include "menuctrl.h"
#include "command.h"
#include "control.h"
#include "timer.h"
#include "video.h"
#include "i2c_bus.h"
#include "utility.h"
#include "eeprom.h"
#include "channel.h"
#include "autosrch.h"
#include "display.h"
#include "osddrv.h"
#include "osdutil.h"
#include "osdchar.h"
#include "osdconst.h"
#include "tuning.h"
#include "osdchar.h"
#include "io.h"
#ifdef ST9306
#include "st9306.h"
#endif
/*****************************************************************************
INPUTS :
OUTPUTS :
DESCRIPTION:
*****************************************************************************/
void enable_service_mode(void)
{
unsigned char j;
display_request_flags = display_request_flags | SERVICE_DISPLAY;
menu_page = MENU_SERVICE;
menu_item = ITEM_AGC;
menu_theme =0x00;
osd_disabled();
j = misc3 & 0x04;
if (j == 0)
write_video_ram_data(BLUE_SCREEN, 0x00);
}
void disable_service_mode(void)
{
display_request_flags =0x0;
menu_page =0xff;
menu_item =0xff;
menu_theme=0xff;
osd_disabled();
}
void adjust_vco_fine_to_centre(void)
{
unsigned char i,j,k;
do
{
vco_fine_high();
read_video_new();
i = read_data[2] & 0x07;
}while(i==0);
vco_fine--;
j = vco_fine;
do
{
vco_fine_low();
read_video_new();
i = read_data[2] & 0x07;
}while(i==0);
vco_fine++;
k = vco_fine;
vco_fine = (j+k)/2;
vco_fine_high();
}
/**************************************************************/
void auto_vco_adjust(void)
{
tuning_flags = tuning_flags | AUTO_VCO_REQUEST;
vco_coarse = 0;
write_video_ram_data(PIF_COARSE, vco_coarse);
vco_fine = 0x3F;
write_video_eeprom_data(PIF_FINE, (vco_fine * 2));
}
/*****************************************************************************
INPUTS :
OUTPUTS :
DESCRIPTION:
*****************************************************************************/
void process_service_command(unsigned char current_command)
{
if (command_flags & COMMAND_VALID)
{
switch (current_command)
{
case COMMAND_CHANNEL_UP:
menu_item |= MENU_DIRECTION;
case COMMAND_CHANNEL_DOWN:
tuning_flags = tuning_flags & ~AUTO_VCO_REQUEST;
menu_item_roll_change_service();
update_repeat_timer((SERVICE_UP_NORMAL_TIME << 8) | SERVICE_UP_INITIAL_TIME);
display_request_flags = display_request_flags | (REFRESH_DISPLAY);
break;
case COMMAND_RIGHT:
menu_item |= MENU_DIRECTION;
case COMMAND_LEFT:
tuning_flags = tuning_flags & ~AUTO_VCO_REQUEST;
next_service_item_left_right();
update_repeat_timer((SERVICE_LEFT_NORMAL_TIME << 8) | SERVICE_LEFT_INITIAL_TIME);
display_request_flags = display_request_flags | (REFRESH_DISPLAY);
break;
}
}
if(command_flags & COMMAND_NEW )
{
unsigned char i;
switch(current_command)
{
case COMMAND_SERVICE:
update_repeat_timer((MENU_NORMAL_TIME << 8) | MENU_INITIAL_TIME);
disable_service_mode();
tuning_flags = tuning_flags & ~AUTO_VCO_REQUEST;
misc_store();
break;
case COMMAND_OK:
// if(P0DR & DESIGN)
// {
update_repeat_timer((MENU_NORMAL_TIME << 8) | MENU_INITIAL_TIME);
menu_page = MENU_DESIGN;
menu_item = ITEM_AGC_GAIN;
// }
break;
case COMMAND_MENU:
if(menu_page == MENU_SERVICE)
{
if((menu_item == ITEM_VCO_COARSE)||(menu_item == ITEM_VCO_FINE))
{
read_video_new();
i = read_data[2] & 0x07;
if(i == 0)
{
adjust_vco_fine_to_centre();
}
}
}
break;
#ifdef ST9306
case COMMAND_9 :
update_repeat_timer((MENU_NORMAL_TIME << 8) | MENU_INITIAL_TIME);
menu_page = MENU_ST9306;
menu_item = ITEM_V_AMP;
init_st9306();
break;
#endif
case COMMAND_TV_AV: //feman:It' for vco automatic adjust.
if(menu_page == MENU_SERVICE)
{
if((menu_item == ITEM_VCO_COARSE)||(menu_item == ITEM_VCO_FINE))
{
auto_vco_adjust();
display_request_flags = display_request_flags | (REFRESH_DISPLAY);
}
}
break;
case COMMAND_POWER:
disable_service_mode();
tv_flags = tv_flags ^ ENABLE_POWER;
break;
}
display_request_flags = display_request_flags | REFRESH_DISPLAY;
}
command_flags = command_flags & ~(COMMAND_NEW | COMMAND_VALID);
}
/*****************************************************************************
INPUTS :
OUTPUTS :
DESCRIPTION: Service Menu
*****************************************************************************/
void next_service_item_left_right(void)
{
switch (menu_page)
{
case MENU_SERVICE:
if (menu_item & MENU_DIRECTION)
{
menu_item = menu_item &~MENU_DIRECTION;
switch(menu_item)
{
case ITEM_AGC:
agc_high();
break;
case ITEM_RED_GAIN:
red_gain_high();
break;
case ITEM_R_CUTOFF_PAL:
red_cutoff_pal_high();
break;
case ITEM_GREEN_GAIN:
green_gain_high();
break;
case ITEM_G_CUTOFF_PAL:
green_cutoff_pal_high();
break;
case ITEM_BLUE_GAIN:
blue_gain_high();
break;
case ITEM_H_POSITION:
h_position_high();
break;
case ITEM_V_POSITION:
v_position_high();
break;
case ITEM_V_POSITION_60:
v_position_60_high();
break;
case ITEM_V_AMP_50:
v_amp_50_high();
break;
case ITEM_V_AMP_60:
v_amp_60_high();
break;
case ITEM_VCO_COARSE:
write_video_ram_data(LL_SELECTION, 0x00);
vco_coarse_high();
break;
case ITEM_VCO_FINE:
write_video_ram_data(LL_SELECTION, 0x00);
vco_fine_high();
break;
}
}
else
{
switch(menu_item)
{
case ITEM_AGC:
agc_low();
break;
case ITEM_RED_GAIN:
red_gain_low();
break;
case ITEM_R_CUTOFF_PAL:
red_cutoff_pal_low();
break;
case ITEM_GREEN_GAIN:
green_gain_low();
break;
case ITEM_G_CUTOFF_PAL:
green_cutoff_pal_low();
break;
case ITEM_BLUE_GAIN:
blue_gain_low();
break;
case ITEM_H_POSITION:
h_position_low();
break;
case ITEM_V_POSITION:
v_position_low();
break;
case ITEM_V_POSITION_60:
v_position_60_low();
break;
case ITEM_V_AMP_50:
v_amp_50_low();
break;
case ITEM_V_AMP_60:
v_amp_60_low();
break;
case ITEM_VCO_COARSE:
write_video_ram_data(LL_SELECTION, 0x00);
vco_coarse_low();
break;
case ITEM_VCO_FINE:
write_video_ram_data(LL_SELECTION, 0x00);
vco_fine_low();
break;
}
}
break;
case MENU_DESIGN:
if (menu_item & MENU_DIRECTION)
{
menu_item = menu_item &~MENU_DIRECTION;
switch(menu_item)
{
case ITEM_AGC_GAIN:
agc_gain_high();
break;
case ITEM_MISC1:
misc1_high();
break;
case ITEM_MISC2:
misc2_high();
break;
case ITEM_MISC3:
misc3_high();
break;
case ITEM_HPOS_OSD:
hpos_osd_high();
break;
case ITEM_VPOS_OSD:
vpos_osd_high();
break;
}
}
else
{
switch(menu_item)
{
case ITEM_AGC_GAIN:
agc_gain_low();
break;
case ITEM_MISC1:
misc1_low();
break;
case ITEM_MISC2:
misc2_low();
break;
case ITEM_MISC3:
misc3_low();
break;
case ITEM_HPOS_OSD:
hpos_osd_low();
break;
case ITEM_VPOS_OSD:
vpos_osd_low();
break;
}
}
break;
#ifdef ST9306
case MENU_ST9306 :
st9306_left_right();
break;
#endif
}
}
/*****************************************************************************
INPUTS :
OUTPUTS :
DESCRIPTION:
*****************************************************************************/
void menu_item_roll_change_service(void)
{
unsigned char tmp=0;
switch(menu_page)
{
case MENU_SERVICE:
tmp = ITEM_SERVICE1;
break;
case MENU_DESIGN:
tmp = ITEM_DESIGN1;
break;
#ifdef ST9306
case MENU_ST9306 :
tmp = ITEM_EW_TRAP;
break;
#endif
}
menu_item_roll_change(tmp);
menu_item &=~MENU_DIRECTION;
}
void display_service(unsigned char display_serv)
{
unsigned char tmphigh,tmp=0;
switch(display_serv)
{
case ITEM_AGC:
tmp=agc;
break;
case ITEM_RED_GAIN:
tmp=red_drive;
break;
case ITEM_R_CUTOFF_PAL:
tmp=red_cut_pal;
break;
case ITEM_GREEN_GAIN:
tmp=green_drive;
break;
case ITEM_G_CUTOFF_PAL:
tmp=green_cut_pal;
break;
case ITEM_BLUE_GAIN:
tmp=blue_drive;
break;
case ITEM_H_POSITION:
tmp=h_position;
break;
case ITEM_V_POSITION:
tmp=v_position;
break;
case ITEM_V_POSITION_60:
tmp=v_pos_60;
break;
case ITEM_V_AMP_50:
tmp=v_amp_50;
break;
case ITEM_V_AMP_60:
tmp=v_amp_60;
break;
case ITEM_VCO_COARSE:
tmp=vco_coarse;
break;
case ITEM_VCO_FINE:
tmp=vco_fine;
break;
}
if(display_serv == ITEM_VCO_FINE)
{
tmphigh = convert_to_ASCII(HUNDREDS, tmp);
fill_char_in_line(display_serv,14,tmphigh,1);
}
display_value(display_serv,15,tmp);
}
void show_theme_service(void)
{
unsigned char i;
for(i=0; i<=ITEM_SERVICE1; i++)
{
display_service(i);
}
if((menu_item == ITEM_VCO_COARSE || menu_item == ITEM_VCO_FINE))
{
write_video_ram_data(LL_SELECTION, 0x00);
write_video_ram_data(PIF_FINE, (vco_fine * 2));
write_video_ram_data(PIF_COARSE, vco_coarse);
read_video_new();
i = read_data[2] & 0x07;
fill_string_in_line(menu_item,18,(unsigned char *)AFC_STATUS[i]);
}
}
void show_service_menu(void)
{
unsigned char i;
reset_current_screen();
for(i=0;i<=ITEM_SERVICE1;i++)
{
append_line_to_buffer(&block_service[i]);
}
for(i=0;i<=ITEM_SERVICE1;i++)
{
fill_string_in_line(i,0x2,(unsigned char *)SERVICE_STRING[i]);
}
display_request_flags = display_request_flags & ~( STATUS_DISPLAY | PROGRAM_DISPLAY);
fill_char_in_line(menu_item,0,0xd0,1);
show_theme_service();
set_current_screen();
osd_enabled();//FOR DISPLAY GLOBAL
}
void display_design(unsigned char display_des)
{
unsigned char tmp=0,tmphigh;
switch(display_des)
{
case ITEM_AGC_GAIN:
tmp = agc_gain;
break;
case ITEM_MISC1:
tmp = misc1;
break;
case ITEM_MISC2:
tmp = misc2;
break;
case ITEM_MISC3:
tmp = misc3;
break;
case ITEM_HPOS_OSD:
tmp = hpos_osd;
break;
case ITEM_VPOS_OSD:
tmp = vpos_osd;
break;
}
if(display_des == ITEM_HPOS_OSD)
{
tmphigh = convert_to_ASCII(HUNDREDS, tmp);
fill_char_in_line(display_des,14,tmphigh,1);
}
display_value(display_des,15,tmp);
}
/*****************************/
void show_theme_design(void)
{
unsigned char i;
for(i=0; i<=ITEM_DESIGN1; i++)
{
display_design(i);
}
}
/*****************************************************************************
INPUTS :
OUTPUTS :
DESCRIPTION: Service related Display routine.
*****************************************************************************/
void show_design_menu(void)
{
unsigned char i;
reset_current_screen();
for(i=0;i<=ITEM_DESIGN1;i++)
{
append_line_to_buffer(&block_service[i]);
}
for(i=0;i<=ITEM_DESIGN1;i++)
{
fill_string_in_line(i,0x2,(unsigned char *)DESIGN_STRING[i]);
}
fill_char_in_line(menu_item,0,0xD0,1);
show_theme_design();
set_current_screen();
osd_enabled();
}
void show_service(void)
{
switch(menu_page)
{
case MENU_SERVICE :
tv_flags = tv_flags & ~FORCE_NICAM_STD ;
show_service_menu();
break;
case MENU_DESIGN :
show_design_menu();
break;
#ifdef ST9306
case MENU_ST9306 :
show_st9306_menu();
break;
#endif
}
}
void update_display_vco_stat(void)
{
if (display_request_flags & SERVICE_DISPLAY)
if ((menu_page == MENU_SERVICE) && (menu_item == ITEM_VCO_COARSE || menu_item == ITEM_VCO_FINE ))
show_theme_service();
}
/***********************************************************/
void update_auto_vco_adjust(void)
{
unsigned char i,j;
if((tuning_flags & AUTO_VCO_REQUEST) &&(menu_page==MENU_SERVICE))
{
display_request_flags = display_request_flags & ~(STATUS_DISPLAY|PROGRAM_DISPLAY);
display_request_flags = display_request_flags | REFRESH_DISPLAY;
if((menu_item == ITEM_VCO_COARSE)||(menu_item == ITEM_VCO_FINE))
{
read_video_new();
i = read_data[2] & 0x07;
switch (i)
{
case 2:
case 3:
vco_coarse_high();
break ;
case 4:
case 5:
vco_fine_low();
read_video_new();
j = read_data[2] & 0x07;
if (j ==0)
{
adjust_vco_fine_to_centre();
tuning_flags = tuning_flags & ~AUTO_VCO_REQUEST;
}
break ;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -