#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../inc/type.h" #include "../inc/igpio.h" #include "../inc/key_gpio.h" #include "../inc/lcd_task.h" #include "../inc/isys_com.h" #include "../inc/delay.h" #include "../inc/eeprom.h" #include "../inc/dpd_proc.h" #include "../inc/fpga.h" #include "../inc/i2c_drv.h" #include "../inc/ipara_cfg.h" #include "../inc/os_task.h" #include "../inc/gps.h" #include "../inc/isys_config.h" #include "../inc/iq_rx.h" #include "../inc/dac38j82.h" #include "../inc/iweb_task.h" #include "../inc/msg.h" #include "../inc/isys_config.h" #include "../inc/os_task.h" #include "../inc/config.h" #include "../inc/general_api.h" #include "../inc/dryloop.h" #if USE_GPS #include "../inc/gps.h" #endif #include "../inc/iuart_user.h" #include "../inc/http_get.h" #include "../adrv9009/adrv9009_config.h" #include "../inc/adrv9009_ext.h" //------------------------------- int g_trigger_up_tsnr_flg = 0; int g_trigger_up_start_flg = 0; pthread_mutex_t mtx_phase78910_again; static uint32 boot_tsnr_up_state=E_STA_IDLE; extern int boot_tsnr_update(uint8 rst_flg); extern void reset_dpd_to_normal_state(void); extern int update_tsnr_uimd_limd(uint8 rst_flg,uint8*p_phase); extern void refresh_waiting(void *parg,void *parv); extern void little_balance(S_SYSTEM_PARA * psys); uint8 g_remote_dpd_ctrl= 0; uint32 adpc_source_udp = 0; uint32 adpc_source_web = 0; volatile uint8 g_query_skip =0; volatile uint8 g_query_save =0; volatile uint8 g_query_operate =0; volatile uint8 g_query_exit =0; volatile uint8 g_query_wpp_to_save=0; static uint16 g_last_menu_id=0; BOOL atsc_adpc_force_stop_flag = FALSE; //------------------------------- S_EXTEND_SYS_STATE st_extend_state={0}; BOOL para_change_flag; char release_ver[30] = {0}; extern BOOL udp_adj_auto_adpc; extern int g_now_only_upgrade_fpga ; extern void check_fpga_up_finished_reboot_sys(void); //-------------------------------------------- S_IP2TS_PARA ip2ts[2]; // 20220214 add by oneshu ,max total number of tsoip is 2. //-------------------------------------------- #if USE_LCD_MOUDLE //static BOOL atsc_adpc_force_stop_flag = FALSE; static const char switch_on_off[][8] = {"OFF","ON","WARNING"}; BOOL left_flag = FALSE; // 整体移动使能标记 BOOL right_flag = FALSE; // #if AW_ATSC_5X uint8 agc_value[4] ={0x0c,0x0d,0x15,0x03} ; //OFF RFIN AGC_IN INT #else uint8 agc_value[4] ={0x00,0x01,0x15,0x03} ; #endif const char switch_agc_sct[][8] = {"OFF","RFIN","AGC_IN","INT"}; #if USE_TS2IP TS_NET_STRUCT ts_net_para = { 0 }; #endif #if USE_PSTS #define PSTS_CTRL() \ if(atsc_para.psts_para.ts_ctrl==PSTS_CTRL_DISABLE) \ { \ break; \ } #define JUDGE_PSIP_KEY() \ if(!atsc_para.sn_para.psip_key_valid){ \ break; \ } #else #define PSTS_CTRL() #define JUDGE_PSIP_KEY() #endif//USE_PSTS S_ATSC_PARA atsc_para; int g_remote_changed_byweb = 0; static MENU_S menu_temp; static LCD_STATUS_S lcd_status = {LCD_LIGHT_ON,NON_OP_MAX_TIME}; //初始上电状态 S_CHECK_SIGNAL s_check_signal = {FALSE,0,}; PMENU_S current_menu; char out_str[48]; uint8 para_middle[256] = {0,}; void enter_menu(uint32 index); void enter_son_menu(uint32 index); void ret_father_menu(void); void light_on_forever(void); uint32 check_lcd_light(uint32 type); void dec_auto_adpc_time(void); static void add_ipv4(uint32 pos,uint8 *pip); static void dec_ipv4(uint32 pos,uint8 *pip); extern void http_save_change_para(void *p); uint32 ra_update_flag = 0; //RA屏是否由校正跳转进去的标志 uint32 lcd_detect_id_flag = 1; //是否为液晶按键进入detect_id模式; S_UPDATE_AUTO_ADPC update_adpc_para_flag = {FALSE,0}; uint32 auto_update = 0; #if USE_TUNER extern uint32 bak_tuner_freq; #endif #if USE_DRY_LOOP extern S_DRYLOOP dryloop_status; extern BOOL dryloop_version_flag; #endif #if 1 static uint8 gb_fpga_up=0; uint8 get_fpga_up_result(void) { return gb_fpga_up; } void set_fpga_up_result(uint8 res) { gb_fpga_up = res; } static uint8 gb_display_code=0; uint8 get_display_result(void) { return gb_display_code; } void set_display_result(uint8 res) { gb_display_code = res; } #if 1 static uint8 lcd_trigger_type=0; static pthread_mutex_t mtx_lcd_trigger; void get_trigger_lcd_menu(uint8 *plcd_trigger) { pthread_mutex_lock(&mtx_lcd_trigger); *plcd_trigger = lcd_trigger_type; pthread_mutex_unlock(&mtx_lcd_trigger); } void set_trigger_lcd_menu(uint8 lcd_trigger) { pthread_mutex_lock(&mtx_lcd_trigger); lcd_trigger_type = lcd_trigger; pthread_mutex_unlock(&mtx_lcd_trigger); } #endif void lcd_disp_upgrade(uint8 upgradeState) { if(upgradeState==DISPLAY_FPGA_UPGRADE_OVER){ set_fpga_up_result(2); enter_menu(SPE_LCD+4); } else if(upgradeState==DISPLAY_FPGA_UPGRADE_ERR){ set_fpga_up_result(1); enter_menu(SPE_LCD+4); } else if(upgradeState==DISPLAY_FPGA_UPGRADE_BUSY_TIMEOUT){ set_fpga_up_result(3); enter_menu(SPE_LCD+4);//SPE_LCD+4 } } void lcd_disp_agc_err(uint8 state) { set_display_result(state); enter_menu(SPE_LCD+6); } static void trigger_lcd_manu_proc(uint8 trigger_type) { uint8 trigger_flg=0; switch(trigger_type) { #if FPGA_UPGRADE /*case DISPLAY_FPGA_UPGRADE_OVER: //fpga_upgrade_start(); lcd_disp_upgrade(trigger_type); trigger_flg=1; break;*/ case DISPLAY_FPGA_UPGRADE_ERR: lcd_disp_upgrade(trigger_type); trigger_flg=1; break; case DISPLAY_FPGA_UPGRADE_BUSY_TIMEOUT: lcd_disp_upgrade(trigger_type); trigger_flg=1; break; #endif case DISPALY_RFAGC_ERR_POWER_LOW: lcd_disp_agc_err(trigger_type); trigger_flg=1; break; case DISPALY_RFAGC_ERR_POWER_HIGH: lcd_disp_agc_err(trigger_type); trigger_flg=1; break; #if 0//ETH_UPGRADE case MSG_CYCLE_POWER: delay_ticks(50); enter_menu(SPE_LCD+4); trigger_flg=1; break; case MSG_UPGRADE: delay_ticks(50); para_middle[0] = 1; proc_key_up_confirm(NULL,KEY_ENTER); trigger_flg=1; break; #endif default:break; } if(trigger_flg==1){ set_trigger_lcd_menu(0); } } uint16 add_uint16_para(uint16 *ppara,uint16 item_index,uint16 start_index) { // 012345 65535 uint16 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data+10000<=65535)data=data+10000; break; case 1: if(data+1000<=65535)data=data+1000; break; case 2: if(data+100<=65535)data=data+100; break; case 3: if(data+10<=65535)data=data+10; break; case 4: if(data+1<=65535)data++; break; default:break; } *ppara = (uint16)data; return 0; } uint16 add_uint16_para_limit(uint16 *ppara,uint16 item_index,uint16 start_index,uint16 up_limit) { // 012345 65535 uint16 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data+10000<=up_limit)data=data+10000; break; case 1: if(data+1000<=up_limit)data=data+1000; break; case 2: if(data+100<=up_limit)data=data+100; break; case 3: if(data+10<=up_limit)data=data+10; break; case 4: if(data+1<=up_limit)data++; break; default:break; } *ppara = (uint16)data; return 0; } uint16 dec_uint16_para(uint16 *ppara,uint16 item_index,uint16 start_index) { // 012345 65535 uint16 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data>=10000){ data-=10000; } break; case 1: if(data>=1000){ data-=1000; } break; case 2: if(data>=100){ data-=100; } break; case 3: if(data>=10){ data-=10; } break; case 4: if(data>=1){ data-=1; } break; default:break; } *ppara = (uint16)data; return 0; } uint8 add_uint8_para(uint8 *ppara,uint16 item_index,uint16 start_index) { uint8 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data+100<=255)data=data+100; break; case 1: if(data+10<=255)data=data+10; break; case 2: if(data+1<=255)data++; break; default:break; } *ppara = (uint8)data; return 0; } uint8 dec_uint8_para(uint8 *ppara,uint16 item_index,uint16 start_index) { uint8 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data>=100){ data-=100; } break; case 1: if(data>=10){ data-=10; } break; case 2: if(data>=1){ data-=1; } break; default:break; } *ppara = (uint8)data; return 0; } uint8 add_ph6_time_para(uint8 *ppara,uint16 item_index,uint16 start_index) { uint8 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data+10<=20)data=data+10; break; case 1: if(data+1<=20)data=data+1; break; default:break; } *ppara = (uint8)data; return 0; } uint8 dec_ph6_time_para(uint8 *ppara,uint16 item_index,uint16 start_index) { uint8 data; uint16 index; data = *ppara; if(item_index>=start_index) index = item_index - start_index; else index = 0xff; switch(index) { case 0: if(data>=10){ data-=10; } break; case 1: if(data>=2){ data-=1; } break; default:break; } *ppara = (uint8)data; return 0; } void add_4_hex(uint16 *pdata,uint32 pos) { switch(pos) { case 0: *pdata = (*pdata & 0x0fff)|((*pdata+0x1000)&0xf000); break; case 1: *pdata = (*pdata & 0xf0ff)|((*pdata+0x100)&0x0f00); break; case 2: *pdata = (*pdata & 0xff0f)|((*pdata+0x10)&0x00f0); break; case 3: *pdata = (*pdata & 0xfff0)|((*pdata+0x1)&0x000f); break; default: break; } } void dec_4_hex(uint16 *pdata,uint32 pos) { switch(pos) { case 0: *pdata = (*pdata & 0x0fff)|((*pdata-0x1000)&0xf000); break; case 1: *pdata = (*pdata & 0xf0ff)|((*pdata-0x100)&0x0f00); break; case 2: *pdata = (*pdata & 0xff0f)|((*pdata-0x10)&0x00f0); break; case 3: *pdata = (*pdata & 0xfff0)|((*pdata-0x1)&0x000f); break; default: break; } } #endif uint32 get_menu_index(void){ return current_menu->index; } void atsc_set_force_stop_adpc(BOOL flag) { atsc_adpc_force_stop_flag = flag; } //校验输入的授权码是否合法 在上电与更改SN或者GUI_KEY时调用(必须) //授权码采用PRBS算法(多项式为X15+X14+1) //psip校验使用的SN和GUI的一样,为了使key不同. 对SN进行一些简单的变换操作 static uint64 psip_sn_preprocess(uint64 *psn) { uint32 sn_h; uint32 sn_l; uint64 sn_new = *psn; sn_h = sn_new>>32; sn_l = sn_new; sn_l+=0x12345678; sn_h+=0x89765432; sn_h&=0x09ff; sn_new = ((uint64)sn_h<<32)|((uint64)(sn_l)); return sn_new; } extern uint32 prbs_key_get(uint64 sn_in); uint32 psip_calc_sn_licence(uint32 key,uint64 *psn) { #if 1//@TMP_NOT_USED uint64 sn_temp = 0; uint32 key_valid = 0; if(!psn) return key_valid; sn_temp = psip_sn_preprocess(psn); //计算PSIP的sn,在原始sn基础上做些处理 if(sn_temp==0) { key_valid = FALSE; return key_valid; } if(prbs_key_get(sn_temp)==key) { key_valid = TRUE; } else { key_valid = FALSE; } return key_valid; #endif } //校验输入的授权码是否合法 在上电与更改SN或者GUI_KEY时调用(必须) //授权码采用PRBS算法(多项式为X15+X14+1) //psip校验使用的SN和GUI的一样,为了使key不同. 对SN进行一些简单的变换操作 static uint64 eas_sn_preprocess(uint64 *psn) { uint32 sn_h; uint32 sn_l; uint64 sn_new = *psn; sn_h = sn_new>>32; sn_l = sn_new; sn_l+=0xFE5555DD; sn_h+=0xFE6666CC; sn_h&=0x09ff; sn_new = ((uint64)sn_h<<32)|((uint64)(sn_l)); return sn_new; } uint32 eas_calc_sn_licence(uint32 key,uint64 *psn) { #if 1//@TMP_NOT_USED uint64 sn_temp = 0; uint32 key_valid = 0; if(!psn) return key_valid; sn_temp = eas_sn_preprocess(psn); //计算eas的sn,在原始sn基础上做些处理 if(sn_temp==0) { key_valid = FALSE; return key_valid; } if(prbs_key_get(sn_temp)==key) { key_valid = TRUE; } else { key_valid = FALSE; } return key_valid; #endif } // !!! Actually, txfreq to MHz ,unit is MHz uint32 txfreq_to_hz(uint32 chn) { uint32 hz = 0; if((chn>=FREQ_MIN_V)&&(chn<=FREQ_MAX_V)) { hz = (chn-FREQ_MIN_V)*6+177; } if((chn>=FREQ_MIN_U)&&(chn<=FREQ_MAX_U)) { hz = (chn-FREQ_MIN_U)*6+473; } //ATSC VIII 2-13 对应177M(7),213(13) if((chn>=FREQ_MIN_V1)&&(chn<=FREQ_MAX_V1)) { hz = (chn-FREQ_MIN_V1)*6+57; if(hz>69) { hz+=4; } } return hz; } void show_wait_info(char *pbuf) { lcd_write_string(LINE_1,0,"Please Wait.. "); lcd_write_string(LINE_2,0,(uint8*)pbuf); lcd_write_cache(); } //显示等待延时时间 void show_wait_info_with_sec(uint32 sec) { do{ lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_2,0," "); sprintf(out_str,"Please Wait...(%dS)",sec); lcd_write_string(LINE_1,0,(uint8*)out_str); lcd_write_cache(); delay_ticks(SYSTICKHZ); }while((--sec) && (sec<50)); } static void lcd_show_wait_info(void) { lcd_write_string(LINE_1,0,"Please Wait.. "); lcd_write_string(LINE_2,0," "); lcd_write_cache(); } //显示等待延时时间 static void lcd_show_wait_info_with_sec(uint32 sec) { do{ lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_2,0," "); sprintf(out_str,"Please Wait...(%dS)",sec); lcd_write_string(LINE_1,0,out_str); lcd_write_cache(); delay_ticks(SYSTICKHZ); }while((--sec) && (sec<50)); } static void update_lvl_ref(PS_RF_PARA ppara) { uint8 uchar; uint8 ucharL; static uint32 tickbak=0; if(check_delay_over(&tickbak,100)==FALSE) return; //lvl 240221-HRF ucharL = fpga_byte_read(0x01,0x03);//ob_fb_rms_pwr uchar = fpga_byte_read(0x01,0x04); ppara->lvl = (uchar<<8)|ucharL; //ref 240221-HRF ucharL = fpga_byte_read(0x01,0x0b);//ob_fb_target_rms_pwr uchar = fpga_byte_read(0x01,0x0c); ppara->ref = (uchar<<8)|ucharL; /*if(atsc_para.ad3_para.cor==0){ uchar = c256_byteread(EEPROM_PWRVREF_O_HADDR); ppara->ref = c256_byteread(EEPROM_PWRVREF_O_LADDR); ppara->ref = (uchar<<8)|ppara->ref; } else{ uchar = c256_byteread2(E2_PWRVREF_O_HADDR); ppara->ref = c256_byteread2(E2_PWRVREF_O_LADDR); ppara->ref = (uchar<<8)|ppara->ref; }*/ } //#if TEMPREATURE_DEGREE==0 //将温度由摄氏度转换为华氏度 //入参是温度单位0.01,返回参数单位相同也为0.01 转化公式 F=c*9/5+32 int32 degree2fah(int32 degree) { return (int32)(degree*9/5)+3200; //此处放大100倍 } //#endif //显示通用字符串 void disp_common_string(MENU_S *p) { lcd_write_string(LINE_1,0,p->disp_string[LINE_1]); lcd_write_string(LINE_2,0,p->disp_string[LINE_2]); } //功率对照表基准值放大100倍后的结果 const int32 power_ref_a[] = { -2000,-1698,-1522,-1397,-1301,-1221,-1154,-1096,-1045,-1000,-958,-920,-886,-853,-823,-795,-769,-744,-721,-698, -677,-657,-638,-619,-602,-585,-568,-552,-537,-522,-508,-494,-481,-468,-455,-443,-431,-420,-408,-397, -387,-376,-366,-356,-346,-337,-327,-318,-309,-301,-292,-284,-275,-267,-259,-251,-244,-236,-229,-221, -214,-207,-200,-193,-187,-180,-173,-167,-161,-154,-148,-142,-136,-130,-124,-119,-113,-107,-102,-96, -91,-86,-80,-75,-70,-65,-60,-55,-50,-45,-40,-36,-31,-26,-22,-17,-13,-8,-4,0, 4,8,12,17,21,25,29,33,37,41,45,49,53,56,60,64,68,71,75,79, 82,86,89,93,96,100,103,107,110,113,117,120,123,127,130,133,136,139,143,146, 149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,193,195,198,201,204, 206,209,212,214,217,220,222,225,227,230,233,235,238,240,243,245,247,250,252,255, 257,260,262,264,267,269,271,274,276,278,281,283,285,287,290,292,294,296,298,301 }; void lcd_write_prompt(const PROMPT_POS *ppos,PMENU_S pmenu) { if( pmenu->index >= FAC_LCD) para_change_flag = FALSE; if( para_change_flag==TRUE) lcd_write_string(ppos->line,ppos->pos[pmenu->item_index],PROMPT_CHANGE); else lcd_write_string(ppos->line,ppos->pos[pmenu->item_index],PROMPT_CHAR); } /* PR10: FWD/FSSI 改为基于 ORx 实测接收功率 ob_fb_rms_pwr (seg1 reg 0x03低/0x04高, ufix16_En8)。实测(TX on, ch14/473MHz): 稳定 ≈0x03B5(949); 老的 0x36/0x37(=DPD AGC 控制字)只有 0x0400(1024), 够不到旧模拟检测器阈值故恒 0。 FCW_0 = ORx 0% 功率(RF off)的读数floor; FSSI 上下限见 lcd_task.h。这些是按单点(949) 的首猜, 须在板上按 RF-off floor + 额定功率点标定微调。 */ #define FCW_100 0xAAF6 #define FCW_0 0x0040 /* was 0x5B88 (EMV7模拟检测器); ob_fb_rms_pwr 无基座, floor≈0 */ /* seg1 0x03/0x04 = ob_fb_rms_pwr。reg_map_ctrl 在读 0x03 时把高字节锁存进共享 temp_reg, 故必须先读 0x03(低)再读 0x04(高) —— 与老的 0x36 先读高字节相反。 */ static uint16 read_ob_fb_rms_pwr(void) { uint8 lo = fpga_byte_read(0x01, 0x03); /* [7:0], 同时锁存高字节 */ uint8 hi = fpga_byte_read(0x01, 0x04); /* [15:8] */ return ((uint16)hi << 8) | lo; } static void calc_fwd(void) { #if 0 int32 ref_temp = 0; uint32 start =0,end=sizeof(power_ref_a)/sizeof(uint32) -1; uint32 mid = (start+end)>>1; int32 dvalue[3]; fpga_byte_write(0x0 ,0x1 ); ref_temp = (FPGA_byteread(0x81)<<8)|FPGA_byteread(0x82); ref_temp &=0x0fff; if(!atsc_para.ad3_para.power_ref) { atsc_para.log_para.fwd = 0; return; } ref_temp = ref_temp-atsc_para.ad3_para.power_ref; ref_temp=ref_temp*100/POWER_CALC_REF_DET; //先比较4个临界值 if(ref_temp<=power_ref_a[0]) { atsc_para.log_para.fwd = 0; return; } if(ref_temp<=power_ref_a[1]) { atsc_para.log_para.fwd = 1; return; } if(ref_temp>=power_ref_a[end]) { atsc_para.log_para.fwd = 200; return; } if(ref_temp>=power_ref_a[end-1]) { atsc_para.log_para.fwd = 199; return; } //查找方法:使用2分法查找,同时比较与相邻的差值 while(start>1; continue; } else if((dvalue[0]>dvalue[1])&&(dvalue[1]>dvalue[2])) {//向后 end = mid; mid = (start+end)>>1; continue; } } #else int32 ref_temp = 0; uint32 i = 0; uint32 ref_sum = 0; if( !atsc_para.ad3_para.power_ref ) { atsc_para.log_para.fwd = 0; return; } ref_sum = 0; for(i = 0; i < 4; i++) { ref_sum += read_ob_fb_rms_pwr(); /* PR10: ORx实测功率(0x03/0x04),原为0x36/0x37 */ } ref_temp = ref_sum/4; if(ref_temp <= FCW_0) atsc_para.log_para.fwd = 0; if(ref_temp > FCW_0){ atsc_para.log_para.fwd = (uint8)((ref_temp-FCW_0)*100.0/(atsc_para.ad3_para.power_ref-FCW_0)); if(atsc_para.log_para.fwd >= 200) atsc_para.log_para.fwd = 200; } /* PR10 DEBUG: 端到端验证用,标定确认后可删 */ #if DBG_PR_FSSI_FWD { static uint8 dbg_cnt = 0; if(++dbg_cnt >= 5){ dbg_cnt = 0; printf("[PR10] ob_fb_rms_pwr=0x%04x(%d) -> FWD=%d%% A_FSSI=%d B_FSSI=%d (power_ref=%d rf=%d)\n", (uint16)ref_temp, ref_temp, atsc_para.log_para.fwd, st_extend_state.a_fssi, st_extend_state.b_fssi, atsc_para.ad3_para.power_ref, atsc_para.rf_para.rf); } } #endif #endif } void get_tsnr_limd_uimd(uint16 *ptsnr, uint8 *plmid, uint8 *pumid) { // Last good values. The imx6 sources refresh on their own cadence (the 8VSB demod // is nice'd and lands a window every ~10 s), so hold the previous number rather // than flapping between updates. static uint8 last_l = 0, last_r = 0; static uint16 last_snr = 0; uint32 imd_l, imd_r; uint16 u16_tsnr; #if 1 if(atsc_para.system_para.adpc_err==DPD_SAVE_DATA || atsc_para.system_para.adpc_err==DPD_LOAD_DATA) return; imd_l = last_l; imd_r = last_r; u16_tsnr = last_snr; // The FPGA's imd_imd_fft_meas registers (0x05:0x17/0x18/0x19) used to be read here. // They are gone: its 20-bit |DFT|^2 output quantises both shoulder bins to 0 once // the shoulder is better than ~45 dB, and the old `if(imd_l==0) imd_l=1` clamp then // turned LIMD/UIMD into the constant 10*log10(imd_cent) = 45.0 dB. See Result06-7. // // The "limit snr display" block that used to sit here is gone too. It overwrote // u16_tsnr unconditionally with a two-valued function of those dead IMD registers // (min(LIMD,UIMD)+11, then minus 4 or 8 dB), which is where the constant "48.0 dB" // on the status page came from. The FPGA's own SNR registers are no meaningful // alternative either: with DPD bypassed, snr_txpwr/snr_errpwr reads 1.84 dB. // // UIMD/LIMD and SNR now all come from the imx6's own 10 MSPS ORx window: // - LIMD/UIMD: iq_rx.c, same taps as the FPGA but band-averaged over 11 bins // and Welch-averaged. LIMD is the shoulder on the pilot's side. Half-dB units, // no +11 dB display offset (the web adds that). // - SNR: iq_vsb.c, the real 8VSB MER (I-path) of a demodulated window. // If a source has not produced a fresh value we keep the previous one rather than // report a fabricated number. { float iq_l, iq_u, iq_snr; if(iq_get_imd(&iq_l, &iq_u)){ int hl = (int)(iq_l*2 + 0.5f); int hu = (int)(iq_u*2 + 0.5f); imd_l = last_l = (hl < 0) ? 0 : (hl > 255 ? 255 : hl); imd_r = last_r = (hu < 0) ? 0 : (hu > 255 ? 255 : hu); } if(iq_get_snr(&iq_snr)){ int hs = (int)(iq_snr*2 + 0.5f); u16_tsnr = last_snr = (hs < 0) ? 0 : (hs > 255 ? 255 : hs); } } *plmid = (uint8)imd_l; *pumid = (uint8)imd_r; *ptsnr = u16_tsnr; #endif } //网页和串口使用 要与上边函数保持一致,只是不用更新全局变量 void update_log_para(void) { uint8 tmp; S_ASI_INPUT asi_input; uint16 t_tsnr; uint8 l_imd; uint8 u_imd; atsc_para.log_para.temperature[0] = fpga_byte_read(0x01,0x25); // 1 high 0 normal atsc_para.log_para.temperature[1] = fpga_byte_read(0x01,0x23); // high 8 bit atsc_para.log_para.temperature[2] = fpga_byte_read(0x01,0x24); // low 8 bit /*tmp = fpga_byte_read(0x01,0x42); atsc_para.log_para.agc = tmp&0x20?atsc_para.rf_para.agc:0; if(atsc_para.log_para.agc) { if(tmp&0x0c) //bit 2,3 atsc_para.log_para.agc = 1; else atsc_para.log_para.agc = 1; }*/ atsc_para.log_para.agc = atsc_para.rf_para.agc; atsc_para.log_para.ts_rate = 0; tmp =fpga_byte_read(0x01,0x51); atsc_para.log_para.ts_rate |= tmp <<24; tmp =fpga_byte_read(0x01,0x52); atsc_para.log_para.ts_rate |= tmp <<16; tmp =fpga_byte_read(0x01,0x53); atsc_para.log_para.ts_rate |= tmp <<8; tmp =fpga_byte_read(0x01,0x54); atsc_para.log_para.ts_rate |= tmp; atsc_para.log_para.ts_under =0; atsc_para.log_para.ts_under = fpga_byte_read(0x01,0x55); atsc_para.log_para.mode = ((atsc_para.log_para.ts_under & 2 )>> 1); atsc_para.log_para.ts_under&=1; tmp = fpga_byte_read(0x01,0x50); //printf("RW fpga_read[0x01,0x50]=%d\n",tmp); get_asi_input(tmp,&asi_input); atsc_para.log_para.asi_input = asi_input.input; atsc_para.log_para.input_ok_flag = asi_input.status?0:1; atsc_para.log_para.rsnr = fpga_byte_read(0x01,0x44); get_tsnr_limd_uimd( &t_tsnr, &l_imd, &u_imd); atsc_para.log_para.tsnr = t_tsnr; atsc_para.log_para.l_imd = l_imd; atsc_para.log_para.u_imd = u_imd; /* atsc_para.log_para.l_imd = fpga_byte_read(0x01,0x45); atsc_para.log_para.u_imd = fpga_byte_read(0x01,0x47); atsc_para.log_para.tsnr = fpga_byte_read(0x01,0x46); #if USE_SNR_ADJ if(atsc_para.log_para.tsnr>20) { if(atsc_para.log_para.tsnr+atsc_para.wd_para.sa>=0) { atsc_para.log_para.tsnr+=atsc_para.wd_para.sa; } else { atsc_para.log_para.tsnr = 0; } } if(atsc_para.log_para.l_imd>20) { if(atsc_para.log_para.l_imd+atsc_para.wd_para.sb>=0) { atsc_para.log_para.l_imd+=atsc_para.wd_para.sb; } else { atsc_para.log_para.l_imd = 0; } } if(atsc_para.log_para.u_imd>20) { if(atsc_para.log_para.u_imd+=atsc_para.wd_para.sc>=0) { atsc_para.log_para.u_imd+=atsc_para.wd_para.sc; } else { atsc_para.log_para.u_imd = 0; } } #endif */ atsc_para.log_para.adpc = atsc_para.system_para.adpc; atsc_para.log_para.rxfreq = atsc_para.rf_para.rxfreq; atsc_para.log_para.txfreq = atsc_para.rf_para.txfreq; tmp = fpga_byte_read(0x01,0x56); if(tmp&0x08) //bit3 atsc_para.log_para.gps_1pps = 1; //1PPS ERR else atsc_para.log_para.gps_1pps = 0; //1PPS OK if(tmp&0x04) //bit2 atsc_para.log_para.use_gps = 1; //INT模式 else atsc_para.log_para.use_gps = 0; //EXT模式 if(atsc_para.log_para.use_gps) //int模式 { tmp = fpga_byte_read(0x01,0x8a); atsc_para.log_para.gps_status = tmp&0x0f; if(tmp&0x10) atsc_para.log_para.gps = 2; //locked; else { if(tmp&0x40) atsc_para.log_para.gps = 1; //unlocked; else atsc_para.log_para.gps = 0; //Nogps; } if(tmp&0x80) atsc_para.log_para.gps_freq[0] = 1; // - else atsc_para.log_para.gps_freq[0] = 0; // + atsc_para.log_para.gps_freq[1] = fpga_byte_read(0x01,0x8b); } else //ext { tmp = fpga_byte_read(0x01,0x56); if(tmp&0x01) atsc_para.log_para.gps = 2; //locked; else { if(tmp&0x02) atsc_para.log_para.gps = 1; //unlocked; else atsc_para.log_para.gps = 0; //Nogps; } } atsc_para.log_para.mh = fpga_byte_read(0x03,0x16); atsc_para.log_para.mh *=59000; //放大1000倍 atsc_para.log_para.mh /=6240; if(atsc_para.log_para.mh>1000) //100% 范围0-1; 放大1000倍,1-1000 最小0.1%-100% atsc_para.log_para.mh = 1000; atsc_para.log_para.syserr = fpga_byte_read(0x01,0x26); if(atsc_para.log_para.syserr&0x80) atsc_para.log_para.syserr = 1; else atsc_para.log_para.syserr = 0; atsc_para.log_para.tx = atsc_para.rf_para.tx; calc_fwd();//计算FWD #if DEBUG_AUTO_ADPC atsc_para.log_para.tsnr = atsc_para.wj_para.snr*2; atsc_para.log_para.l_imd = atsc_para.wj_para.imd*2; atsc_para.log_para.u_imd = atsc_para.wj_para.imd*2; #endif #if USE_TUNER atsc_para.log_para.rssi = tuner_read_rssi(); #endif atsc_para.log_para.cfr_busy_stage1 = fpga_byte_read(0x05,0x10); atsc_para.log_para.cfr_busy_stage2 = fpga_byte_read(0x05,0x11); atsc_para.log_para.cfr_busy_stage3 = fpga_byte_read(0x05,0x12); } void read_log_para(void) { update_log_para(); memcpy(para_middle,&atsc_para.log_para,sizeof(atsc_para.log_para)); } void update_tune_info(void) { #if USE_TUNER S_LOG_PARA *ppara = &atsc_para.log_para; ppara->tuner_init_status = get_tuner_init_ok_flag(); ppara->tuner_strength = tuner_read_rssi(); ppara->rssi = ppara->tuner_strength; ppara->tuner_lock_status = tuner_get_lock(); if(ppara->tuner_lock_status) { ppara->tuner_snr = tuner_get_snr(); } else { ppara->tuner_snr = 0; } #endif } static void psts_name_add_judge(uint8 *pnewname) { if(*pnewname=='\'') //' *pnewname=(*pnewname)+1; if(*pnewname=='`') //` *pnewname=(*pnewname)+1; if(*pnewname=='\\') //'\' *pnewname=(*pnewname)+1; if(*pnewname=='"') //" *pnewname=(*pnewname)+1; if(*pnewname>'}') //} *pnewname=' '; if(*pnewname<' ') //空格 *pnewname=' '; } static void psts_name_dec_judge(uint8 *pnewname) { if(*pnewname=='\'') //' *pnewname=(*pnewname)-1; if(*pnewname=='`') //` *pnewname=(*pnewname)-1; if(*pnewname=='\\') //'\' *pnewname=(*pnewname)-1; if(*pnewname=='"') //" *pnewname=(*pnewname)-1; if(*pnewname<' ') *pnewname='}'; if(*pnewname>'}') //} *pnewname='}'; } static void read_sys_para(void) { memcpy(para_middle,&atsc_para.system_para,sizeof(atsc_para.system_para)); } static void read_rf_para(void) { PMENU_S p = current_menu; //menu PS_RF_PARA ppara = (PS_RF_PARA)para_middle; PS_RF_PARA prf = &atsc_para.rf_para; ppara->rxfreq = prf->rxfreq; ppara->txfreq = prf->txfreq; ppara->hz = prf->hz; ppara->power = prf->power; ppara->db = prf->db; ppara->agc = prf->agc; ppara->rf = prf->rf; ppara->tx = prf->tx; ppara->ssref = atsc_para.latch_para.u1; //ppara->lvl = prf->lvl; //LVL不更新 //ppara->ref = prf->ref; if((atsc_para.wh_para.func!=0)&&(p->item_index==0)) p->item_index=1; } static void read_freq_para(void) { S_RF_PARA *ppara = (S_RF_PARA *)para_middle; memcpy(para_middle,&atsc_para.rf_para,sizeof(atsc_para.rf_para)); if(ppara->hz&0xf0000) { //- ppara->hz = RF_MAX_HZ-ppara->hz&0xffff ; } else {//+ ppara->hz =(ppara->hz&0xffff)+RF_MAX_HZ; } } void load_freq_para(S_RF_PARA * lrf_para) { if(lrf_para==NULL) return; memcpy(lrf_para,&atsc_para.rf_para,sizeof(atsc_para.rf_para)); if(lrf_para->hz&0xf0000) { //- lrf_para->hz = RF_MAX_HZ-lrf_para->hz&0xffff ; } else {//+ lrf_para->hz =(lrf_para->hz&0xffff)+RF_MAX_HZ; } } #if AW_ATSC_5X void read_net_para(void) { uint8 data = 0; atsc_para.network_para.netid = fpga_byte_read(0x3,0x19); data = fpga_byte_read(0x3,0x1a); atsc_para.network_para.netid = (atsc_para.network_para.netid<<8)|data; atsc_para.network_para.netid &=0x0fff; atsc_para.network_para.txid= fpga_byte_read(0x3,0x17); //低4bit data = fpga_byte_read(0x3,0x18); atsc_para.network_para.txid = (atsc_para.network_para.txid<<8)|data; atsc_para.network_para.txid &=0x0fff; data = fpga_byte_read(0x3,0x17); //高4bit atsc_para.network_para.bratio=data>>4; memcpy(para_middle,&atsc_para.network_para,sizeof(atsc_para.network_para)); } #endif static void read_mode_para(void) { uint8 pid = 0; atsc_para.mode_para.pid_det = fpga_byte_read(0x3,0x09); pid = fpga_byte_read(0x3,0x0a); atsc_para.mode_para.pid_det = (atsc_para.mode_para.pid_det<<8) |pid; memcpy(para_middle,&atsc_para.mode_para,sizeof(atsc_para.mode_para)); } static void read_ad1_para(void) { atsc_para.ad_para.pac = atsc_para.wh_para.pac; memcpy(para_middle,&atsc_para.ad_para,sizeof(atsc_para.ad_para)); } static void read_ad2_para(void) { memcpy(para_middle,&atsc_para.ad2_para,sizeof(atsc_para.ad2_para)); } static void read_ad3_para(void) { atsc_para.ad3_para.rst = 0; memcpy(para_middle,&atsc_para.ad3_para,sizeof(atsc_para.ad3_para)); } static void read_ad4_para(void) { atsc_para.ad4_para.adpc = atsc_para.system_para.adpc; atsc_para.ad4_para.pdt = atsc_para.wf_para.pdt; //atsc_para.ad4_para.cfr = atsc_para.wb_para.cfr; memcpy(para_middle,&atsc_para.ad4_para,sizeof(atsc_para.ad4_para)); } static void read_ad5_para(void) { memcpy(para_middle,&atsc_para.ad5_para,sizeof(atsc_para.ad5_para)); } static void read_sn_para(void) { memcpy(para_middle,&atsc_para.sn_para,sizeof(atsc_para.sn_para)); } static void read_user_para(void) { memcpy(para_middle,&atsc_para.reg_user_info,sizeof(S_USER_INFO)); //只拷贝第一个用户信息 } #if ERR_TO_LCM void update_latch_para(void) { uint32 tmp=0; uint8 UC_temp21=0; uint8 ts = 0; S_ASI_FPGA asi_fpga; static uint32 tick_bak = 0;//h必须赋值 if(check_delay_over(&tick_bak,CHECK_LATCH_TIME)==FALSE) return; tmp = fpga_byte_read(0x1,0x56); //*********** 1PPS ****************// if(tmp&0x08) //bit3 { atsc_para.log_para.gps_1pps = 1; //1PPS ERR atsc_para.latch_para.m_1pps = 1; //off } else { atsc_para.log_para.gps_1pps = 0; //1PPS OK } //********** GPS *****************// if(tmp&0x04) //bit2 atsc_para.log_para.use_gps = 1; //INT模式 else atsc_para.log_para.use_gps = 0; //EXT模式 if(atsc_para.log_para.use_gps) //int模式 { tmp = fpga_byte_read(0x1,0x8a); atsc_para.log_para.gps_status = tmp&0x0f; if(tmp&0x10) atsc_para.log_para.gps = 2; //locked; else { atsc_para.latch_para.gps =1;//off if(tmp&0x40) atsc_para.log_para.gps = 1; //unlocked; else atsc_para.log_para.gps = 0; //Nogps; } } else //ext { tmp = fpga_byte_read(0x1,0x56); if(tmp&0x01) atsc_para.log_para.gps = 2; //locked; else { atsc_para.latch_para.gps =1; //off if(tmp&0x02) atsc_para.log_para.gps = 1; //unlocked; else atsc_para.log_para.gps = 0; //Nogps; } } ////////////////////////////////////////////// UC_temp21 = fpga_byte_read(0x1,0x26); //sys info asi_fpga.asi = fpga_byte_read(0x1,0x50); //asi ts = fpga_byte_read(0x1,0x54); //ts //*************** TS **************** // if((asi_fpga.PART.ASI_STATUS!=ASI_NONE_ERR)&&((ts&1)==0)) //ASI ts //ASI ts { } else { atsc_para.latch_para.ts = 1; //err } //************ RF *****************// if(atsc_para.wh_para.func==0) //TX { if(atsc_para.rf_para.tx==0) { atsc_para.latch_para.rf = 1; } else { } } else { if(UC_temp21&0x40) //RF { } else { atsc_para.latch_para.rf = 1; } } if(atsc_para.rf_para.rf == 0) atsc_para.latch_para.rf = 1; // *************** SYS *******************// if(UC_temp21&0x80) { atsc_para.latch_para.sys = 1; } else { } // ************ SFN ************************// if((atsc_para.latch_para.gps || atsc_para.latch_para.m_1pps || atsc_para.latch_para.ts) && (atsc_para.system_para.net == 0)) atsc_para.latch_para.sfn = 1; } void read_latch_para(void) { update_latch_para(); memcpy(para_middle,&atsc_para.latch_para,sizeof(atsc_para.latch_para)); } #endif static void read_up_confirm(void) { PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; ppara->confirm = 0; //默认选择 NO } static void read_ri_para(void) { uint8 temp; temp = fpga_byte_read(0x3,0x10) ; atsc_para.ri_para.i_cnt = fpga_byte_read(0x3,0x11); atsc_para.ri_para.i_cnt = (temp<<8)|atsc_para.ri_para.i_cnt; temp = fpga_byte_read(0x3,0x12) ; atsc_para.ri_para.d_cnt = fpga_byte_read(0x3,0x13); atsc_para.ri_para.d_cnt = (temp<<8)|atsc_para.ri_para.d_cnt; temp = fpga_byte_read(0x3,0x14) ; atsc_para.ri_para.fifo = fpga_byte_read(0x3,0x15); atsc_para.ri_para.fifo = (temp<<8)|atsc_para.ri_para.fifo; memcpy(para_middle,&atsc_para.ri_para,sizeof(atsc_para.ri_para)); } static void read_config_para(void) { memcpy(para_middle,&atsc_para.config_para,sizeof(atsc_para.config_para)); } #if ATSC_USA_AMP static void read_pa_config(void) { memcpy(para_middle,&atsc_para.pa_config_para,sizeof(atsc_para.pa_config_para)); } #endif static void read_ra_para(void) { uint8 temp; temp = fpga_byte_read(0x1,0x88); atsc_para.ra_para.ra_enum = fpga_byte_read(0x1,0x89); atsc_para.ra_para.ra_enum = (temp<<8)|atsc_para.ra_para.ra_enum; atsc_para.ra_para.sta = fpga_byte_read(0x1,0x8f); temp = fpga_byte_read(0x1,0x91); atsc_para.ra_para.fagc = fpga_byte_read(0x1,0x92); atsc_para.ra_para.fagc = (temp<<8)|atsc_para.ra_para.fagc; temp = fpga_byte_read(0x1,0x93); atsc_para.ra_para.pha = fpga_byte_read(0x1,0x94); atsc_para.ra_para.pha = (temp<<8)|atsc_para.ra_para.pha; temp = fpga_byte_read(0x1,0x9e); atsc_para.ra_para.dagc = fpga_byte_read(0x1,0x9b); atsc_para.ra_para.dagc = (temp<<8)|atsc_para.ra_para.dagc; temp = fpga_byte_read(0x1,0x4B); atsc_para.ra_para.iqdc = fpga_byte_read(0x1,0xF0); atsc_para.ra_para.iqdc = (temp<<8)|atsc_para.ra_para.iqdc; temp = fpga_byte_read(0x1,0x32); atsc_para.ra_para.perr = fpga_byte_read(0x1,0x33); atsc_para.ra_para.perr = (temp<<8)|atsc_para.ra_para.perr; memcpy(para_middle,&atsc_para.ra_para,sizeof(atsc_para.ra_para)); } static void read_wb_para(void) { atsc_para.wb_para.rst = 0; memcpy(para_middle,&atsc_para.wb_para,sizeof(atsc_para.wb_para)); } static void read_wc_para(void) { #if ADDR_CONFLICT_DISABLED memcpy(para_middle,&atsc_para.dpd_para,sizeof(atsc_para.dpd_para)); #else memcpy(para_middle,&atsc_para.wc_para,sizeof(atsc_para.wc_para)); #endif } static void read_wd_para(void) { memcpy(para_middle,&atsc_para.wd_para,sizeof(atsc_para.wd_para)); } static void read_we_para(void) { memcpy(para_middle,&atsc_para.we_para,sizeof(atsc_para.we_para)); } static void read_wf_para(void) { memcpy(para_middle,&atsc_para.wf_para,sizeof(atsc_para.wf_para)); } static void read_rg_para(void) { memcpy(para_middle,&atsc_para.rg_para,sizeof(atsc_para.rg_para)); } static void read_wh_para(void) { memcpy(para_middle,&atsc_para.wh_para,sizeof(atsc_para.wh_para)); } static void read_wj_para(void) { memcpy(para_middle,&atsc_para.wj_para,sizeof(atsc_para.wj_para)); } static void read_wk_para(void) { memcpy(para_middle,&atsc_para.wk_para,sizeof(atsc_para.wk_para)); } static void read_wl_para(void) { memcpy(para_middle,&atsc_para.wl_para,sizeof(atsc_para.wl_para)); } void read_dpd_config(void) { memcpy(para_middle,&atsc_para.dpd_para,sizeof(atsc_para.dpd_para)); } static void read_wm_para(void) { read_dpd_config(); //memcpy(para_middle,&cttb_para.we_para,sizeof(cttb_para.we_para)); } #if 1 u8 usr_remote_adpc(uint8 adpc) { uint8 ltmp_adpc = 0; uint8 flash_valid = 0; S_SYS_TIME bak_time = {0xff,};//本地时间 S_SYS_TIME now_time = {0,}; int ret = 0; uint8 reset_up = 1; uint8 uuu_phase = 0; uint8 old_phase = 0; char show_perc[5] = {0}; ltmp_adpc = adpc; if(ltmp_adpc != atsc_para.system_para.adpc) { turn_off_rf_agc_state(E_CHG_DPD); g_remote_dpd_ctrl = 0; log_printf(LOG_INFO, I_USER_CFG, "ADPC changed from %d to %d.\n", adpc, atsc_para.system_para.adpc); if(ltmp_adpc == ADPC_HOLD && atsc_para.system_para.adpc == ADPC_OFF) { flash_valid = c256_byteread(EEPROM_DPD_FLASH_VALID); if(flash_valid) { ret = dpd_curve_proc(E_LOAD_TO_FPGA); if(g_trigger_up_tsnr_flg == 0) { g_trigger_up_tsnr_flg = 1; g_trigger_up_start_flg = 1; log_printf(LOG_INFO, I_USER_CFG, "Do phase 78910 in background progress ~~.\n"); } if(ret!=0){ ltmp_adpc = ADPC_OFF; } } else{ lcd_write_string(LINE_1,0," DPD DATA IN FLASH Error! "); lcd_write_string(LINE_2,0," "); lcd_write_cache(); delay_ms(2000); ltmp_adpc = ADPC_OFF; } } else if(ltmp_adpc==ADPC_OFF && atsc_para.system_para.adpc==ADPC_HOLD) { dpd_set_clr(); fpga_byte_write(0x05, FPGA_ADDR_DPD_CTRL1, DPD_CTRL1_ALL_BYPS); set_tsnr_update_flg(1); if(g_trigger_up_tsnr_flg == 0) { g_trigger_up_tsnr_flg = 1; g_trigger_up_start_flg = 1; log_printf(LOG_INFO, I_USER_CFG, "Do phase 78910 in background progress ~~.\n"); } } else{ if(atsc_para.system_para.adpc>=ADPC_UPDATE1 && g_ca_value!=1){ ltmp_adpc = atsc_para.system_para.adpc; } } atsc_para.system_para.adpc = ltmp_adpc; c256_bytewrite(EEPROM_DPD_ADDR, atsc_para.system_para.adpc); log_printf(LOG_INFO, I_USER_CFG, "[ set adpc] atsc_para.system_para.adpc=%d\n", atsc_para.system_para.adpc); } return ltmp_adpc; } extern void enter_update_lcd(void); void udp_trigger_adpc(uint8 adpc) { uint8 adpc_bak = atsc_para.system_para.adpc; usr_remote_adpc(adpc); if((adpc_bak!=adpc)&&(adpc>=ADPC_UPDATE1))//ADPC有更新 { auto_update = TRUE; adpc_source_udp = 1; adpc_source_web = 0; enter_update_lcd(); } } #endif void save_sys_para(void *psave) { PS_SYSTEM_PARA ppara = (PS_SYSTEM_PARA)psave; //输入更改为tuner时,要立即初始化tuner // if((ppara->input==ASI_INPUT_TUNER)&&(atsc_para.system_para.input!=ASI_INPUT_TUNER)) // { // atsc_para.system_para.input = ppara->input; // task_stop_sec_msg(); // tuner_init(atsc_para.rf_para.rxfreq); // task_resume_sec_msg(); // } if(ppara->mode == SYS_MODE_ATSC30) //LDL ppara->mode = SYS_MODE_LEGACY; if(g_ca_value!=1 && ppara->adpc >= ADPC_UPDATE1){ ppara->adpc = ADPC_OFF; } e2rom_save_sys(ppara); cfg_adrv_orx_manu_gain(ppara->orx_manu_gain); #if USE_NEW_POWER_CFG fpga_save_power(&atsc_para.we_para, &atsc_para.rf_para); #else cfg_adrv_att(ppara->adrv9009_att); #endif if(atsc_para.system_para.test != ppara->test) { if(ppara->test > TEST_OFF) ppara->test = TEST_ON; fpga_byte_write(0x01, 0xF3, ppara->test); } ppara->adpc = usr_remote_adpc(ppara->adpc); fpga_save_sys(ppara); memcpy(&atsc_para.system_para,ppara,sizeof(atsc_para.system_para)); } void save_rf_para(void *psave) { uint8 agc_force_close=0; PS_RF_PARA ppara = (PS_RF_PARA)psave; #if USE_NEW_AGC BOOL agc_flag = FALSE; #endif if(ppara->power!=atsc_para.rf_para.power){ turn_off_rf_agc_state(E_CHG_TX_POWER); agc_force_close++; ppara->agc=0; } if(ppara->txfreq!=atsc_para.rf_para.txfreq){ turn_off_rf_agc_state(E_CHG_TX_FREQ); agc_force_close++; ppara->agc=0; } if(ppara->cw!=atsc_para.rf_para.cw){ turn_off_rf_agc_state(E_CHG_CW); agc_force_close++; ppara->agc=0; } if(ppara->rf!=atsc_para.rf_para.rf){ turn_off_rf_agc_state(E_CHG_TX_RF); agc_force_close++; ppara->agc=0; } if(agc_force_close!=0){ ppara->agc=0; } else{ log_printf(LOG_INFO, I_USER_CFG, "lcd agc=%d\n",ppara->agc); if(ppara->agc!=atsc_para.rf_para.agc) { if(ppara->agc==0){ set_sys_rf_agc(0); printf(">> cfg set rf agc off\n"); } else{ printf(">> cfg trigger rf agc on proc\n"); trigger_rf_agc_proc(1); } } } /*if(ppara->agc!=atsc_para.rf_para.agc) { #if USE_NEW_AGC if((atsc_para.ref_agc != ppara->agc) && (atsc_para.rf_para.agc == 0) && (atsc_para.ref_agc)) { // ON1 -->OFF-->ON2 清标志位 if(atsc_para.ad3_para.cor==0) { c256_bytewrite(EEPROM_PWRVREF_VLDO_ADDR,0); c256_bytewrite(EEPROM_PWRVREF_O_HADDR,0x00); c256_bytewrite(EEPROM_PWRVREF_O_LADDR,0x00); } else { c256_bytewrite2(E2_PWRVREF_VLDO_ADDR,0); c256_bytewrite2(E2_PWRVREF_O_HADDR,0x00); c256_bytewrite2(E2_PWRVREF_O_LADDR,0x00); } agc_flag = TRUE; } #endif if(ppara->agc!=0) //OFF--ON AGC_Start(); else //ON---OFF AGC_Set(); #if USE_NEW_AGC if(!ppara->agc) atsc_para.ref_agc = atsc_para.rf_para.agc; //保存当前AGC #endif }*/ e2rom_save_rf(ppara); #if 0 if((ppara->ssref) && (atsc_para.latch_para.u1 == 0)) { atsc_para.latch_para.u1 = 1; atsc_para.system_para.ctrl= CTRL_REMOTE; e2rom_save_latch(&atsc_para.latch_para, &atsc_para.system_para); fpga_save_latch(&atsc_para.latch_para, &atsc_para.system_para); } atsc_para.latch_para.u1 = ppara->ssref; #endif memcpy(&atsc_para.rf_para,ppara,sizeof(atsc_para.rf_para)); fpga_save_rf(ppara); if(current_menu->item_index==current_menu->item_total-1) //当前处于LVL处 要将当前ENUM存入FAGC { //若AGC为ON,要先关掉AGC,然后发送标志与参考电平,然后开AGC,若AGC为OFF,只发送参数即可 /*if(atsc_para.ad3_para.cor==0) { c256_bytewrite(EEPROM_PWRVREF_VLDO_ADDR,1); //写1 c256_bytewrite(EEPROM_PWRVREF_O_HADDR,(ppara->lvl&0xff00)>>8); c256_bytewrite(EEPROM_PWRVREF_O_LADDR,ppara->lvl&0x00ff); } else { c256_bytewrite2(E2_PWRVREF_VLDO_ADDR,1); //写1 c256_bytewrite2(E2_PWRVREF_O_HADDR,(ppara->lvl&0xff00)>>8); c256_bytewrite2(E2_PWRVREF_O_LADDR,ppara->lvl&0x00ff); } atsc_para.rf_para.ref = ppara->lvl; if(ppara->agc) { fpga_byte_write(0x1,0x4A,agc_value[0]); fpga_save_agc_vol(); fpga_byte_write(0x1,0x4A,agc_value[ppara->agc]); // bit0=1 for all } else { fpga_save_agc_vol(); }*/ } #if USE_NEW_AGC if(agc_flag) { show_wait_info_with_sec(2); } #endif } void set_sys_rf_agc(uint8 agc) { /*if(atsc_para.ad3_para.cor == 0) c256_bytewrite(EEPROM_AGC_ADDR,agc); else c256_bytewrite2(E2_AGC_ADDR,agc);*/ fpga_byte_write(0x1,0x02,agc&0x1); atsc_para.rf_para.agc = agc; } void save_freq_para(void *psave) { int txfreq_changed = 0; PS_RF_PARA ppara = (PS_RF_PARA)psave; int32 hz_bak = ppara->hz; if(ppara->hz >= RF_MAX_HZ) //+ { ppara->hz = ppara->hz-RF_MAX_HZ; if(ppara->hz > RF_MAX_HZ) ppara->hz = RF_MAX_HZ; } else //- { ppara->hz = RF_MAX_HZ - ppara->hz; if(ppara->hz>RF_MAX_HZ) ppara->hz = RF_MAX_HZ; ppara->hz|=0x10000; //负值第3字节写1 否则写0 } e2rom_save_rf(ppara); #if USE_TUNER if(ppara->rxfreq!=atsc_para.rf_para.rxfreq) { tuner_init(ppara->rxfreq); bak_tuner_freq = ppara->rxfreq; } #endif txfreq_changed = (atsc_para.rf_para.txfreq != ppara->txfreq)? 1 : 0; log_printf(LOG_INFO, I_USER_CFG,"txfreq=%d, rxfreq=%d, hz=%d\n", ppara->txfreq, ppara->rxfreq, ppara->hz); memcpy(&atsc_para.rf_para,ppara,sizeof(atsc_para.rf_para)); fpga_save_rf(ppara); if(txfreq_changed){ if(atsc_para.system_para.adpc==ADPC_HOLD){ printf("checked txfreq change to :%d (ADPC set to OFF)\n",ppara->txfreq); usr_remote_adpc(ADPC_OFF); } #if USE_FREQ_CHANGE_RESET_PWR printf("checked txfreq change to :%d (rst pwr)\n",ppara->txfreq); usr_set_exc_pwr(-25*100); usleep(4000000); // delay 4s case Slow boot #endif } chang_freq(1, txfreq_changed); ppara->hz = hz_bak; } #if AW_ATSC_5X void save_net_para(void *psave) { S_NETWORK_PARA *ppara = (S_NETWORK_PARA *)psave; e2rom_save_network(ppara); fpga_save_network(ppara); memcpy(&atsc_para.network_para,ppara,sizeof(atsc_para.network_para)); } #endif void detect_id(void) { memset(&atsc_para.pid_status,0,sizeof(atsc_para.pid_status)); lcd_detect_id_flag = 0; enter_menu(SYS_LCD+5); } uint32 get_max_index(uint32 *pdate,uint32 max_num) { uint32 i,j; uint32 value; for(i=0;i=*(pdate+j)) continue; else break; } if(j==max_num) return i; } return (uint32)-1; } //连续刷新20秒钟的pid数据信息; //" DET_CNT DET_PID " static void refresh_pid(void *parg,void *parv) { uint32 i; uint8 pid_h,pid_l; uint32 pid; PMENU_S pmenu = (PMENU_S)parg; PS_PID_STATUS_PARA ppara = (PS_PID_STATUS_PARA)&atsc_para.pid_status; disp_common_string(pmenu); pid_h = fpga_byte_read(0x3,0x09); pid_l = fpga_byte_read(0x3,0x0a); pid= ((pid_h&0x1f)<<8)|pid_l; if(pid) { for(i=0;i<5;i++) { if(ppara->det_pid_count[i]!=pid) { if(ppara->det_pid_count[i]==0) { ppara->det_pid_count[i]=pid; ppara->pid_count[i]++; break; } } else if(ppara->det_pid_count[i]==pid) { ppara->det_pid_count[i]=pid; ppara->pid_count[i]++; break; } } } sprintf(out_str,"%d",ppara->count); lcd_write_string(1,7,out_str); sprintf(out_str,"%X",pid); lcd_write_string(1,24,out_str); atsc_para.pid_status.det_cnt = ppara->count; atsc_para.pid_status.det_pid = pid; atsc_para.pid_status.pid_det = 0; if(ppara->count++>=REFRESH_PID_TIME) {//找到出现次数最多的pid i = get_max_index(ppara->pid_count,5); if(i!=(uint32)-1) pid=ppara->det_pid_count[i]; else pid = 0; atsc_para.pid_status.det_cnt = 0; atsc_para.pid_status.det_pid = 0; atsc_para.pid_status.pid_det = pid; ppara->count = 0; if(pmenu->save_para_func) { pmenu->save_para_func(para_middle); if(lcd_detect_id_flag) ret_father_menu(); else enter_menu(0); lcd_detect_id_flag = 1; } } } void save_fpga_pid(uint32 type) { switch(type) { case 0: //OFF fpga_byte_write(0x3,0x6,0); break; case 1: //START fpga_byte_write(0x3,0x6,1); delay_ms(100); fpga_byte_write(0x3,0x6,0); break; case 2: //CLEAR fpga_byte_write(0x03,0x6,1); delay_ms(10); fpga_byte_write(0x03,0x6,0); break; } } void save_mode_para(void *psave) { S_MODE_PARA *ppara = (S_MODE_PARA *)psave; e2rom_save_mode(ppara); fpga_save_mode(ppara); memcpy(&atsc_para.mode_para,ppara,sizeof(atsc_para.mode_para)); } void save_pid_para(void *psave) { return; } void save_ad1_para(void *psave) { S_ADVANCE_PARA *ppara = (S_ADVANCE_PARA *)psave; e2rom_save_ad(ppara); fpga_save_ad(ppara); memcpy(&atsc_para.ad_para,ppara,sizeof(atsc_para.ad_para)); } void save_ad2_para(void *psave) { S_ADVANCE2_PARA *ppara = (S_ADVANCE2_PARA *)psave; e2rom_save_ad2(ppara); fpga_save_ad2(ppara); memcpy(&atsc_para.ad2_para,ppara,sizeof(atsc_para.ad2_para)); } void save_new_cor(uint32 cor) { uint8 power_v = 0; uint8 flash_valid=0; //切换COR时,向0x01 0x48 bit1发1 发送完功率后bit在发0,bit0为功率有效标志,前后保持不变 e2rom_read_power_db(cor); /*if(cor==0) { atsc_para.rf_para.agc= c256_byteread(EEPROM_AGC_ADDR); power_v = c256_byteread(EEPROM_PWRVREF_VLDO_ADDR); } else { atsc_para.rf_para.agc= c256_byteread2(E2_AGC_ADDR); power_v = c256_byteread2(E2_PWRVREF_VLDO_ADDR); }*/ fpga_byte_write(0x1,0x4A,0); power_v&=1; //for 4.1 /*if(atsc_para.rf_para.agc) //ON时发送 判断有效标志 { fpga_save_agc_vol(); } fpga_byte_write(0x1,0x4A,agc_value[atsc_para.rf_para.agc]); power_v|=2; fpga_byte_write(0x1,0x48,power_v);*/ fpga_save_power(&atsc_para.we_para,&atsc_para.rf_para); power_v&=1; fpga_byte_write(0x1,0x48,power_v); if(atsc_para.system_para.adpc==ADPC_HOLD) { atsc_para.ad5_para.use_dpd = atsc_para.ad5_para.dpd; #if 1 flash_valid = c256_byteread(EEPROM_DPD_FLASH_VALID); if(flash_valid){ dpd_curve_proc(E_LOAD_TO_FPGA); } #endif //fpga_write_adpc(ADPC_HOLD); } } void freq_nochange(uint8 chn,uint8 chn2) { atsc_para.rf_para.txfreq = chn; atsc_para.rf_para.rxfreq = chn2; c256_bytewrite(EEPROM_CHANNEL_ADDR,atsc_para.rf_para.txfreq); c256_bytewrite(EEPROM_RXCHANNEL_ADDR,atsc_para.rf_para.rxfreq); #if BAK_PARA_CHECK c256_bytewrite2(BAK_EEPROM_CHANNEL_ADDR,atsc_para.rf_para.txfreq); c256_bytewrite2(BAK_EEPROM_RXCHANNEL_ADDR,atsc_para.rf_para.rxfreq); #endif } void save_ad3_para(void *psave) { S_ADVANCE3_PARA *ppara = (S_ADVANCE3_PARA *)psave; uint8 typebak=atsc_para.ad3_para.cor; uint8 txfreqbak=atsc_para.rf_para.txfreq; uint8 rxfreqbak=atsc_para.rf_para.rxfreq; int cw_changed =(atsc_para.ad3_para.cw != ppara->cw)? 1 : 0; if(ppara->rst) { log_printf(LOG_INFO, I_USER_CFG, "rst %d\n", ppara->rst); e2rom_load_default_param(ppara->rst); freq_nochange(txfreqbak,rxfreqbak); fpga_save_all_para(TRUE); return; //复位时,其他参数不再保存 } log_printf(LOG_INFO, I_USER_CFG, "max_power=%d, old_max_power=%d\n", ppara->max_power,atsc_para.rf_para.power); if(atsc_para.rf_para.power>ppara->max_power) { rf_power_set_new(ppara->max_power); } e2rom_save_ad3(ppara); fpga_save_ad3(ppara); if(typebak!=ppara->cor) //type变化 若为HOLD重新加载曲线 { atsc_para.ad3_para.cor = ppara->cor; save_new_cor(ppara->cor); } memcpy(&atsc_para.ad3_para,ppara,sizeof(atsc_para.ad3_para)); chang_cw(cw_changed); } void save_ad4_para(void *psave) { S_ADVANCE4_PARA *ppara = (S_ADVANCE4_PARA *)psave; ppara->pdt |=(atsc_para.ad4_para.pdt&0xf0); //ppara->cfr |=(atsc_para.ad4_para.cfr&0xf0); //高4位,还使用原来的值 #if USE_UPDATA5 if(ppara->adpc==ADPC_UPDATE5)// 5 #else if(ppara->adpc==5) #endif { ppara->adpc = ADPC_UPDATE1; ppara->auto_adpc = TRUE; } else ppara->auto_adpc = FALSE; e2rom_save_ad4(ppara); fpga_save_ad4(ppara); atsc_para.wf_para.pdt = ppara->pdt; //atsc_para.wb_para.cfr = ppara->cfr; if(ppara->adpc!=atsc_para.system_para.adpc) { if((ppara->adpc>=ADPC_UPDATE1)&&(atsc_para.system_para.adpc==ADPC_OFF)) { atsc_para.ad5_para.use_dpd = 1; //fpga_write_adpc(ppara->adpc); } else { atsc_para.ad5_para.use_dpd = atsc_para.ad5_para.dpd; //fpga_write_adpc(ppara->adpc); } } atsc_para.system_para.adpc = ppara->adpc; memcpy(&atsc_para.ad4_para,ppara,sizeof(atsc_para.ad4_para)); //log_printf(LOG_INFO, I_USER_CFG, "pdt=%d,cfr=%d,adpc=%d\n", ppara->pdt,ppara->cfr,ppara->adpc); log_printf(LOG_INFO, I_USER_CFG, "pdt=%d,adpc=%d\n", ppara->pdt,ppara->adpc); } void save_ad5_para(void *psave) { S_ADVANCE5_PARA *ppara = (S_ADVANCE5_PARA *)psave; e2rom_save_ad5(ppara); memcpy(&atsc_para.ad5_para,ppara,sizeof(atsc_para.ad5_para)); log_printf(LOG_INFO, I_USER_CFG, "time=%d,a_snr=%d,a_imd=%d,r_imd=%d,r_snr=%d,dpd=%d\n", ppara->time,ppara->a_snr,ppara->a_imd,ppara->r_imd,ppara->r_snr,ppara->dpd); } void save_sn_para(void *psave) { S_SN_PARA *ppara = (S_SN_PARA *)psave; e2rom_save_sn(ppara); memcpy(&atsc_para.sn_para,ppara,sizeof(atsc_para.sn_para)); } static void clear_web_sessions(void) { DIR *dir; struct dirent *entry; char path[256]; dir = opendir("/tmp/sessions"); if (!dir) { printf("clear_web_sessions: cannot open /tmp/sessions\n"); return; } while ((entry = readdir(dir)) != NULL) { if (entry->d_name[0] == '.') continue; snprintf(path, sizeof(path), "/tmp/sessions/%s", entry->d_name); unlink(path); } closedir(dir); log_printf(LOG_INFO, I_USER_CFG, "web sessions cleared (password changed)\n"); } extern int check_and_restore_config(char *pname, char *ppasswd); void save_user_para(void *psave) { S_USER_INFO *ppara = (S_USER_INFO *)psave; S_USER_INFO ptemp; memset(&ptemp,0,sizeof(ptemp)); #if 1//_USE_RVL_ str_trunc_space(ppara->name); str_trunc_space(ppara->password); #endif memcpy(ptemp.name,ppara->name,strlen(ppara->name)); memcpy(ptemp.password,ppara->password,strlen(ppara->password)); ptemp.user_type = ppara->user_type; e2rom_save_user_info(&ptemp); memcpy(&atsc_para.reg_user_info[0],&ptemp,sizeof(S_USER_INFO)); check_and_restore_config(atsc_para.reg_user_info[0].name, atsc_para.reg_user_info[0].password); clear_web_sessions(); } #if USA_ATSC_5X void save_latch_para(void *psave) { S_LATCH_PARA *ppara = (S_LATCH_PARA *)psave; S_SYSTEM_PARA *psys = (S_SYSTEM_PARA *)&atsc_para.system_para; if(ppara->reset) { ppara->reset=0; ppara->u1=0; ppara->u2=0; memset(&atsc_para.latch_para,0,sizeof(atsc_para.latch_para)); atsc_para.rf_para.ssref = atsc_para.latch_para.u1; return; } if( ppara->u1 != atsc_para.latch_para.u1) { if(ppara->u1) psys->ctrl = CTRL_REMOTE; } atsc_para.latch_para.u1 = ppara->u1; atsc_para.latch_para.u2 = ppara->u2; atsc_para.rf_para.ssref = atsc_para.latch_para.u1; e2rom_save_latch(ppara,psys); fpga_save_latch(ppara,psys); } #endif void save_config_para(void *psave) { S_CONFIG_PARA *ppara = (S_CONFIG_PARA *)psave; static MSG bps_msg = {MSG_UART_RE_INIT, MSG_NO_NEED_FREE,}; e2rom_save_config(ppara); #if 0//@TMP_NOT_USED if(ppara->bps!=atsc_para.config_para.bps) { atsc_para.config_para.bps = ppara->bps; send_msg(UART_TASK_ID,&bps_msg); } #endif memcpy(&atsc_para.config_para,ppara,sizeof(atsc_para.config_para)); } #if ATSC_USA_AMP void save_pa_config(void *psave) { S_PA_CONFIG_PARA *ppara = (S_PA_CONFIG_PARA *)psave; //e2rom_save_pa_config(ppara); memcpy(&atsc_para.pa_config_para,ppara,sizeof(atsc_para.pa_config_para)); } #endif void save_wb_para(void *psave) { S_WB_PARA *ppara = (S_WB_PARA *)psave; if(ppara->rst) { if(ppara->rst==MENU_FACTORY-1) { #if 0//@TMP_NOT_USED log_system_event_generate(NULL,LOG_TYPE_SYS_PARA_CHANGE,"FACTORY RST",sizeof("FACTORY RST")); #endif e2rom_load_default_param(MENU_FACTORY); } else if(ppara->rst==MENU_POWER-1) { #if 0//@TMP_NOT_USED log_system_event_generate(NULL,LOG_TYPE_SYS_PARA_CHANGE,"POWER RST",sizeof("POWER RST")); #endif e2rom_load_default_param(MENU_POWER); } else if(ppara->rst==MENU_LOG-1) { e2rom_load_default_param(MENU_LOG); } fpga_save_all_para(FALSE); return; } if(1==ppara->p0) // 1: Power clear { ppara->p0 = 0; atsc_para.rf_para.power = RF_POWER_ZERO; e2rom_save_rf(&atsc_para.rf_para); } e2rom_save_wb(ppara); fpga_save_wb(ppara); memcpy(&atsc_para.wb_para,ppara,sizeof(atsc_para.wb_para)); } void save_wc_para(void *psave) { #if ADDR_CONFLICT_DISABLED PS_DPD_PARA ppara = (PS_DPD_PARA)psave; e2rom_save_dpd_para(ppara); fpga_save_dpd_para(ppara); memcpy(&atsc_para.dpd_para,ppara,sizeof(atsc_para.dpd_para)); #else S_WC_PARA *ppara = (S_WC_PARA *)psave; e2rom_save_wc(ppara); fpga_save_wc(ppara); memcpy(&atsc_para.wc_para,ppara,sizeof(atsc_para.wc_para)); #endif } void save_wd_para(void *psave) { S_WD_PARA *ppara = (S_WD_PARA *)psave; e2rom_save_wd(ppara); if(ppara->cfr_work!=atsc_para.wd_para.cfr_work || ppara->cfr_clip!=atsc_para.wd_para.cfr_clip){ printf("usr_cfg: cfr_work=%d clip=%d\n", ppara->cfr_work, ppara->cfr_clip); } fpga_save_wd(ppara); memcpy(&atsc_para.wd_para,ppara,sizeof(atsc_para.wd_para)); } void save_we_para(void *psave) { S_WE_PARA *ppara = (S_WE_PARA *)psave; int txfreq_changed = (atsc_para.rf_para.txfreq != ppara->ch)? 1 : 0; int txpwr_changed = (atsc_para.we_para.power != ppara->power)? 1 : 0; if(txpwr_changed){ turn_off_rf_agc_state(E_CHG_TX_POWER); } e2rom_save_we(ppara); fpga_save_we(ppara); if(txfreq_changed) usleep(4000000); // delay 9.5s case Slow boot chang_freq(1, txfreq_changed); memcpy(&atsc_para.we_para,ppara,sizeof(atsc_para.we_para)); } void web_save_pdt(uint8 pdt) { S_WF_PARA tmp_para={0}; memcpy(&tmp_para,&atsc_para.wf_para,sizeof(atsc_para.wf_para)); tmp_para.pdt = pdt; e2rom_save_wf(&tmp_para); fpga_save_wf(&tmp_para); } void web_save_roll_off(uint8 roll_off) { if(atsc_para.wl_para.roll_off_sel != roll_off){ log_printf(LOG_DEBUG,I_NOUSED,"web set roll_off=%d\n",roll_off); atsc_para.wl_para.roll_off_sel = roll_off; e2rom_save_wl(&atsc_para.wl_para); fpga_save_wl(&atsc_para.wl_para); } } void web_save_gain_limit(uint16 gl) { if(atsc_para.dpd_para.gl != gl){ log_printf(LOG_DEBUG,I_NOUSED,"web set gl=0x%04X\n", gl); atsc_para.dpd_para.gl = gl; e2rom_save_dpd_para(&atsc_para.dpd_para); fpga_save_dpd_para(&atsc_para.dpd_para); } } void save_wf_para(void *psave) { #if ADDR_CONFLICT_DISABLED #else S_WF_PARA *ppara = (S_WF_PARA *)psave; uint8 data; e2rom_save_wf(ppara); fpga_save_wf(ppara); memcpy(&atsc_para.wf_para,ppara,sizeof(atsc_para.wf_para)); if(atsc_para.wf_para.l==0) { atsc_para.system_para.mode = 0; //只能为legaecy模式 c256_bytewrite(EEPROM_MODE_ADDR,0); fpga_byte_write(0x03,0x1 ,0); } if(atsc_para.wf_para.n==0) { //atsc_para.system_para.net = 1; //只能为MFN模式 //c256_bytewrite(EEPROM_NET_ADDR,1); //fpga_byte_write(0x01,0x2 ,1); } if((atsc_para.wf_para.g == 0)&&(atsc_para.system_para.gps!=0)) //EXT { atsc_para.system_para.gps = 0; c256_bytewrite(EEPROM_GPS_ADDR,0); data =(atsc_para.system_para.gps); fpga_byte_write(0x01,0x08 ,data);//0x05->0x08 } #endif } void save_wh_para(void *psave) { S_WH_PARA *ppara = (S_WH_PARA *)psave; e2rom_save_wh(ppara); fpga_save_wh(ppara); memcpy(&atsc_para.wh_para,ppara,sizeof(atsc_para.wh_para)); } void save_wj_para(void *psave) { S_WJ_PARA *ppara = (S_WJ_PARA *)psave; #if USE_GPS S_SYS_TIME *ptime = gps_get_time(); S_SYS_TIME tmptime={0}; #endif S_ADVANCE_DT_PARA dtpara; int8 temp=ppara->gmt-atsc_para.wj_para.gmt; e2rom_save_wj(ppara); fpga_save_wj(ppara); if(ppara->mode==1) { if(atsc_para.system_para.input != ASI_INPUT_TUNER) { atsc_para.system_para.input = ASI_INPUT_TUNER; // tuner_init(atsc_para.rf_para.rxfreq); e2rom_save_sys(&atsc_para.system_para); fpga_save_sys(&atsc_para.system_para); } } #if USE_GPS if(ppara->gmt!=atsc_para.wj_para.gmt) { if(ptime->valid) { if(ppara->gmt>atsc_para.wj_para.gmt) inc_hour((GPRMC_T *)gps_get_time(),ppara->gmt-atsc_para.wj_para.gmt); else dec_hour((GPRMC_T *)gps_get_time(),atsc_para.wj_para.gmt-ppara->gmt); } else { if(temp) { usr_get_sys_rtc_time(NULL,&dtpara);//rtc_get_date_time(&dtpara.dd,&dtpara.tt); if(temp>0) { if(dtpara.tt.RTC_Hours+temp>23) dtpara.tt.RTC_Hours+=(temp-24); else dtpara.tt.RTC_Hours += temp; } else { if(dtpara.tt.RTC_Hours+temp>=0) dtpara.tt.RTC_Hours+=temp; else dtpara.tt.RTC_Hours += temp+24; } tmptime.year = dtpara.dd.RTC_Year; tmptime.month = dtpara.dd.RTC_Month; tmptime.date = dtpara.dd.RTC_Date; tmptime.hour = dtpara.tt.RTC_Hours; tmptime.min = dtpara.tt.RTC_Minutes; tmptime.sec = dtpara.tt.RTC_Seconds; usr_set_sys_rtc_time(&tmptime);//rtc_set_date_time(&dtpara.dd,&dtpara.tt); } } } #endif memcpy(&atsc_para.wj_para,ppara,sizeof(atsc_para.wj_para)); } void save_wk_para(void *psave) { S_WK_PARA *ppara = (S_WK_PARA *)psave; e2rom_save_wk(ppara); memcpy(&atsc_para.wk_para,ppara,sizeof(atsc_para.wk_para)); } void save_wl_para(void *psave) { S_WL_PARA *ppara = (S_WL_PARA *)psave; if((ppara->eebak==2) && (atsc_para.wl_para.eebak!=2)) { eebak_clear(STANDARD_ATSC); ppara->eebak=0; } e2rom_save_wl(ppara); fpga_save_wl(ppara); memcpy(&atsc_para.wl_para,ppara,sizeof(atsc_para.wl_para)); } void save_dpd_test_para(uint16 tst) { c256_bytewrite(EEPROM_DPD_TEST_L,tst&0xff); c256_bytewrite(EEPROM_DPD_TEST_H,(tst>>8)&0xff); fpga_byte_write(0x05,0x02,(tst&0xff)); fpga_byte_write(0x05,0x03,(tst>>8)&0xff); } void save_dpd_config(void *psave) { PS_DPD_PARA ppara = (PS_DPD_PARA)psave; e2rom_save_dpd_para(ppara); fpga_save_dpd_para(ppara); memcpy(&atsc_para.dpd_para,ppara,sizeof(atsc_para.dpd_para)); } static void save_wm_para(void *psave) { //S_WE_PARA *ppara = (S_WE_PARA *)psave; //e2rom_save_we(ppara); //fpga_save_we(ppara); //memcpy(&cttb_para.we_para,ppara,sizeof(cttb_para.we_para)); save_dpd_config(psave); } #if USE_TS2IP void save_ts_ip(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; int ret = 0; if(memcmp(ppara->ip,ts_net_para.ip,sizeof(ts_net_para.ip))==0) return; memcpy(ts_net_para.ip,ppara->ip,sizeof(ts_net_para.ip)); ip2ts_i2c_rw(ts_net_para.ip,IP2TS_I2C_ADD_IP, sizeof(ts_net_para.ip), TS_NET_I2C_WRITE); temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; log_printf(LOG_INFO, I_USER_CFG, "ip=%d.%d.%d,%d\n", ppara->ip[0],ppara->ip[1],ppara->ip[2],ppara->ip[3]); MSG msg; S_TSOIP_CONFIG_PARA *p_ts_para = NULL ; p_ts_para = malloc((size_t)sizeof(S_TSOIP_CONFIG_PARA)); if(p_ts_para == NULL){ log_printf(LOG_ERR,I_NOUSED," malloc ppara memory failed\n"); return ; } http_load_default_para(CGI_CTTB_WEB_TS2IP_1, p_ts_para); memcpy(p_ts_para->ip, ts_net_para.ip, 4); msg.type = TSOIP_1_ETH_INDEX; msg.need_free = MSG_NO_NEED_FREE; msg.lPara = (uint32)p_ts_para; msg.wPara = WEB_TS2IP1; ret = msg_send_to_web(&msg); if(ret < 0){ log_printf(LOG_ERR,I_NOUSED,"send msg to WEB_MSG_THR faild. need free memory. \n"); if(p_ts_para != NULL) free(p_ts_para); } } void save_ts_gate(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; if(memcmp(ppara->gateway,ts_net_para.gateway,sizeof(ts_net_para.gateway))==0) return; memcpy(ts_net_para.gateway,ppara->gateway,sizeof(ts_net_para.gateway)); ip2ts_i2c_rw(ts_net_para.gateway,IP2TS_I2C_ADD_GATEWAY, sizeof(ts_net_para.gateway), TS_NET_I2C_WRITE); temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; log_printf(LOG_INFO, I_USER_CFG, "gateway=%d.%d.%d,%d\n", ppara->gateway[0],ppara->gateway[1],ppara->gateway[2],ppara->gateway[3]); MSG msg; int ret = 0; S_TSOIP_CONFIG_PARA *p_ts_para = NULL ; p_ts_para = malloc((size_t)sizeof(S_TSOIP_CONFIG_PARA)); if(p_ts_para == NULL){ log_printf(LOG_ERR,I_NOUSED," malloc ppara memory failed\n"); return ; } http_load_default_para(CGI_CTTB_WEB_TS2IP_1, p_ts_para); memcpy(p_ts_para->gateway, ts_net_para.gateway, 4); msg.type = TSOIP_1_ETH_INDEX; msg.need_free = MSG_NO_NEED_FREE; msg.lPara = (uint32)p_ts_para; msg.wPara = WEB_TS2IP1; ret = msg_send_to_web(&msg); if(ret < 0){ log_printf(LOG_ERR,I_NOUSED,"send msg to WEB_MSG_THR faild. need free memory. \n"); if(p_ts_para != NULL) free(p_ts_para); } } void save_ts_mask(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; if(memcmp(ppara->mask,ts_net_para.mask,sizeof(ts_net_para.mask))==0) return; memcpy(ts_net_para.mask,ppara->mask,sizeof(ts_net_para.mask)); ip2ts_i2c_rw(ts_net_para.mask,IP2TS_I2C_ADD_MASK, sizeof(ts_net_para.mask), TS_NET_I2C_WRITE); temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; log_printf(LOG_INFO, I_USER_CFG, "mask=%d.%d.%d,%d\n", ppara->mask[0],ppara->mask[1],ppara->mask[2],ppara->mask[3]); MSG msg; int ret = 0; S_TSOIP_CONFIG_PARA *p_ts_para = NULL ; p_ts_para = malloc((size_t)sizeof(S_TSOIP_CONFIG_PARA)); if(p_ts_para == NULL){ log_printf(LOG_ERR,I_NOUSED," malloc ppara memory failed\n"); return ; } http_load_default_para(CGI_CTTB_WEB_TS2IP_1, p_ts_para); memcpy(p_ts_para->mask, ts_net_para.mask, 4); msg.type = TSOIP_1_ETH_INDEX; msg.need_free = MSG_NO_NEED_FREE; msg.lPara = (uint32)p_ts_para; msg.wPara = WEB_TS2IP1; ret = msg_send_to_web(&msg); if(ret < 0){ log_printf(LOG_ERR,I_NOUSED,"send msg to WEB_MSG_THR faild. need free memory. \n"); if(p_ts_para != NULL) free(p_ts_para); } } void save_ts_muti(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; if(memcmp(ppara->multi_address,ts_net_para.multi_address,sizeof(ts_net_para.multi_address))) { memcpy(ts_net_para.multi_address,ppara->multi_address,sizeof(ts_net_para.multi_address)); ip2ts_i2c_rw(ts_net_para.multi_address,IP2TS_I2C_ADD_MULTI, sizeof(ts_net_para.multi_address), TS_NET_I2C_WRITE); temp = 0x01; } if(memcmp(ppara->ip_bak,ts_net_para.ip_bak,sizeof(ts_net_para.ip_bak))) { memcpy(ts_net_para.ip_bak,ppara->ip_bak,sizeof(ts_net_para.ip_bak)); ip2ts_i2c_rw(ts_net_para.ip_bak,IP2TS_I2C_IP_BAK, sizeof(ts_net_para.ip_bak), TS_NET_I2C_WRITE); temp = 0x01; } if(temp) { temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; } log_printf(LOG_INFO, I_USER_CFG, "multi_address=%d.%d.%d,%d\n", ppara->multi_address[0],ppara->multi_address[1],ppara->multi_address[2],ppara->multi_address[3]); MSG msg; int ret = 0; S_TSOIP_CONFIG_PARA *p_ts_para = NULL ; p_ts_para = malloc((size_t)sizeof(S_TSOIP_CONFIG_PARA)); if(p_ts_para == NULL){ log_printf(LOG_ERR,I_NOUSED," malloc ppara memory failed\n"); return ; } http_load_default_para(CGI_CTTB_WEB_TS2IP_1, p_ts_para); memcpy(p_ts_para->multi_address, ts_net_para.multi_address, 4); msg.type = TSOIP_1_ETH_INDEX; msg.need_free = MSG_NO_NEED_FREE; msg.lPara = (uint32)p_ts_para; msg.wPara = WEB_TS2IP1; ret = msg_send_to_web(&msg); if(ret < 0){ log_printf(LOG_ERR,I_NOUSED,"send msg to WEB_MSG_THR faild. need free memory. \n"); if(p_ts_para != NULL) free(p_ts_para); } } void save_ts_fec(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; uint32 flag = 0; uint16 ustemp; if(ppara->fec!=ts_net_para.fec) { flag++; ts_net_para.fec=ppara->fec; ustemp = htons(ts_net_para.fec); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_FEC,sizeof(ustemp), TS_NET_I2C_WRITE); } if(ts_net_para.row!=ppara->row) { flag++; ts_net_para.row=ppara->row; ustemp = htons(ts_net_para.row); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_ROW,sizeof(ustemp), TS_NET_I2C_WRITE); } if(ts_net_para.col!=ppara->col) { flag++; ts_net_para.col=ppara->col; ustemp = htons(ts_net_para.col); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_COL,sizeof(ustemp), TS_NET_I2C_WRITE); } if(ppara->delay!=ts_net_para.delay) { flag++; ts_net_para.delay=ppara->delay; ustemp = htons(ts_net_para.delay); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_DELAY,sizeof(ustemp), TS_NET_I2C_WRITE); } if(flag) { temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; } log_printf(LOG_INFO, I_USER_CFG, "fec=%d.delay=%d\n", ppara->fec,ppara->delay); } //" PORT TYPE LEN RECEIVE " void save_ts_misc(void *psave) { PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)psave; uint8 temp; uint32 flag = 0; uint16 ustemp; MSG msg; int ret = 0; //比较整个结构 if(memcmp(ppara,&ts_net_para,sizeof(ts_net_para))==0) return; if(ppara->port!=ts_net_para.port) { flag++; ts_net_para.port = ppara->port; ustemp = htons(ts_net_para.port); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_PORT, sizeof(ustemp), TS_NET_I2C_WRITE); } if(ppara->port_bak!=ts_net_para.port_bak) { flag++; ts_net_para.port_bak = ppara->port_bak; ustemp = htons(ts_net_para.port_bak); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_PORT_BAK, sizeof(ustemp), TS_NET_I2C_WRITE); } if(ppara->receive_type!=ts_net_para.receive_type) { flag++; ts_net_para.receive_type = ppara->receive_type; ustemp = htons(ts_net_para.receive_type); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_REC_TYPE, sizeof(ustemp), TS_NET_I2C_WRITE); } if(ppara->packet_len!=ts_net_para.packet_len) { flag++; ts_net_para.packet_len = ppara->packet_len; ustemp = htons(ts_net_para.packet_len); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_PACKET_LEN, sizeof(ustemp), TS_NET_I2C_WRITE); } if(ppara->udp_rtp!=ts_net_para.udp_rtp) { flag++; ts_net_para.udp_rtp = ppara->udp_rtp; ustemp = htons(ts_net_para.udp_rtp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_UDP_RTP, sizeof(ustemp), TS_NET_I2C_WRITE); } if(flag) { temp = 0x01; ip2ts_i2c_rw(&temp,IP2TS_I2C_ADD_RESET, 1, TS_NET_I2C_WRITE); ts_net_para.valid = 0; } log_printf(LOG_INFO, I_USER_CFG, "port=%d.receive_type=%d.packet_len=%d,udp_rtp=%d.\n", ppara->port,ppara->receive_type,ppara->packet_len,ppara->udp_rtp); if(flag) { ts_net_para.valid = 0; S_TSOIP_CONFIG_PARA *p_ts_para = NULL ; p_ts_para = malloc((size_t)sizeof(S_TSOIP_CONFIG_PARA)); if(p_ts_para == NULL){ log_printf(LOG_ERR,I_NOUSED," malloc ppara memory failed\n"); return ; } http_load_default_para(CGI_CTTB_WEB_TS2IP_1, p_ts_para); p_ts_para->port = ts_net_para.port; p_ts_para->udp_rtp = ts_net_para.udp_rtp; p_ts_para->packet_len = ts_net_para.packet_len; p_ts_para->receive_type = ts_net_para.receive_type; msg.type = TSOIP_1_ETH_INDEX; msg.need_free = MSG_NO_NEED_FREE; msg.lPara = (uint32)p_ts_para; // need free msg.wPara = WEB_TS2IP1; ret = msg_send_to_web(&msg); if(ret < 0){ log_printf(LOG_ERR,I_NOUSED,"send msg to WEB_MSG_THR faild. need free memory. \n"); if(p_ts_para != NULL) free(p_ts_para); } } } //简单点,全部拷贝完 static void read_ts_para(void) { memcpy(para_middle,&ts_net_para,sizeof(ts_net_para)); } #endif //" TX FWD SNR LIMD UIMD AMP " static void refresh_logo1(void *parg,void *parv) { int tmp_imd=0; PMENU_S pmenu = (PMENU_S)parg; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_2,2,7,14,21,28,34}; read_log_para(); //更新中间变量 disp_common_string(pmenu); #if 0 if(g_last_menu_id != current_menu->index) update_tsnr_uimd_limd(1); else update_tsnr_uimd_limd(0); #endif if(atsc_para.wh_para.func==0) { lcd_write_string(prompt_pos.line,prompt_pos.pos[0],(uint8*)switch_on_off[ppara->tx&1]); } else { lcd_write_string(LINE_1,prompt_pos.pos[0]," "); } #if USE_DRY_LOOP sprintf(out_str,"%02d%%",ppara->fwd); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); #else //lcd_write_string(LINE_1,prompt_pos.pos[1]," "); //lcd_write_string(LINE_2,prompt_pos.pos[1]," "); sprintf(out_str,"%02d%%",ppara->fwd); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); #endif if(atsc_para.wd_para.sa >= 0) ppara->tsnr += atsc_para.wd_para.sa; else ppara->tsnr -= (u8)(-1*atsc_para.wd_para.sa); sprintf(out_str,"%02d.%d",ppara->tsnr/2,ppara->tsnr%2*5); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); if(atsc_para.wd_para.sb >= 0) ppara->l_imd += atsc_para.wd_para.sb; else{ tmp_imd = ppara->l_imd - (int)(-1*atsc_para.wd_para.sb); if(tmp_imd<0) ppara->l_imd = 0; else ppara->l_imd -= (u8)(-1*atsc_para.wd_para.sb); } sprintf(out_str,"%02d.%d",(ppara->l_imd/2)+11,ppara->l_imd%2*5); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); if(atsc_para.wd_para.sc >= 0) ppara->u_imd += atsc_para.wd_para.sc; else{ tmp_imd = ppara->u_imd - (int)(-1*atsc_para.wd_para.sc); if(tmp_imd<0) ppara->u_imd = 0; else ppara->u_imd -= (u8)((-1)*atsc_para.wd_para.sc); } sprintf(out_str,"%02d.%d",(ppara->u_imd/2)+11,ppara->u_imd%2*5); lcd_write_string(prompt_pos.line,prompt_pos.pos[4],out_str); if(atsc_para.wh_para.func==0) { switch (ppara->amp) { case 1 :default: lcd_write_string(prompt_pos.line,prompt_pos.pos[5],"FLT"); break; case 0 : lcd_write_string(prompt_pos.line,prompt_pos.pos[5],"OK"); break; } } else { lcd_write_string(LINE_1,prompt_pos.pos[5]," "); } } //bit0,1: 00:ts1 01:ts2: 10:tuner 11:eas bit567 为1分别表示 ts1_lock eas_lock(ts2lock 复用) tuner_lock //bit567 1:lock 0:err void get_asi_input(uint8 asi,S_ASI_INPUT *pinput) { S_ASI_FPGA asi_fpga; static uint32 tickbak = 0; static uint32 sec = 0; if(!pinput) return; asi_fpga.asi=asi; pinput->status = ASI_ERR; /*sec++; if(sec>=10){ sec=0; printf("rd asi_state=0x%x %d\n",asi,asi_fpga.PART.ASI_STATUS); }*/ switch(asi_fpga.PART.ASI_STATUS) { case 0x00://000 pinput->input = ASI_TS1_USED; if(asi_fpga.PART.TS1) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } break; case 0x01://001 pinput->input = ASI_TS2_USED; if(asi_fpga.PART.TS2_EAS) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } break; case 0x02://010 pinput->input = ASI_TUNER_USED; if(asi_fpga.PART.TUNER) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } break; case 0x03://011 /*if(atsc_para.system_para.input==ASI_INPUT_TS) { if(check_delay_over(&tickbak,OS_TICKS_PER_SEC)) { sec++; } if(sec&1) { pinput->input = ASI_TS1_USED; } else { pinput->input = ASI_TS2_USED; } pinput->status = ASI_ERR; } else { pinput->input = ASI_EAS_USED; if(asi_fpga.PART.TS2_EAS) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } }*/ pinput->input = ASI_NONE_ERR; pinput->status = ASI_ERR; break; case 0x04://100-tsoip pinput->input = TSOIP_USED; if(asi_fpga.PART.TSOIP) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } break; case 0x06://110-smpte pinput->input = SMPTE_USED; if(asi_fpga.PART.SMPTE) { pinput->status = ASI_OK; } else { pinput->status = ASI_ERR; } break; } } //" INPUT STATUS TS_RATE TEMP " static void refresh_logo2(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; uint32 temp = 0; const PROMPT_POS prompt_pos = {LINE_2,1,8,16,32}; static uint32 ts_rate_flag = 0; const char* asi_in[] = {"ASI1","ASI2","EAS","TUNER","TSOIP","SMPTE","NONE"};//ASI_GRP_STATE //#if TEMPREATURE_DEGREE==0 int32 ltemp = 0; //#endif read_log_para(); //更新中间变量 disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],(char*)asi_in[ppara->asi_input&7]); #if 0 ppara->input_ok_flag = 1; atsc_para.log_para.ts_rate = 19392648; #endif if(ppara->input_ok_flag) lcd_write_string(prompt_pos.line,prompt_pos.pos[1],"OK"); else lcd_write_string(prompt_pos.line,prompt_pos.pos[1],"ERR"); //ts_rate if((atsc_para.log_para.ts_under)||(atsc_para.log_para.ts_rate&1)) { //若异常,则异常信息和ts_rate轮显 if(ts_rate_flag) { if(atsc_para.log_para.ts_under) lcd_write_string(prompt_pos.line,prompt_pos.pos[2],"Underflow"); else if(atsc_para.log_para.ts_rate&1) lcd_write_string(prompt_pos.line,prompt_pos.pos[2],"Overflow"); } else { sprintf(out_str,"%02d.%06d",atsc_para.log_para.ts_rate/1000000,atsc_para.log_para.ts_rate%1000000); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); } ts_rate_flag = !ts_rate_flag; } else { sprintf(out_str,"%02d.%06d",atsc_para.log_para.ts_rate/1000000,atsc_para.log_para.ts_rate%1000000); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); } temp = (ppara->temperature[1]<<8)| ppara->temperature[2]; //16 bit temp = temp & 0x03ff; //温度 if((ppara->temperature[0]&0x01) ==1) { lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"HIGH"); } else { if(temp&0x200) //- { temp = 1024-temp; if(get_temp_unit()==1){ sprintf(out_str,"-%02d.%02d",temp/4,(temp%4)*25); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); lcd_write_temp_c(prompt_pos.line,prompt_pos.pos[3]+strlen((const char *)out_str)); } else{ ltemp = temp/4*100+temp%4*25; ltemp = -ltemp; ltemp = degree2fah(ltemp); sprintf(out_str,"%02d.%02d",ltemp/100,math_abs(ltemp)%100); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); lcd_write_temp_f(prompt_pos.line,prompt_pos.pos[3]+strlen((const char *)out_str)); } } else { temp &=0x1ff; if(get_temp_unit()==1){ sprintf(out_str,"+%02d.%02d",temp/4,(temp%4)*25); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); lcd_write_temp_c(prompt_pos.line,prompt_pos.pos[3]+strlen((const char *)out_str)); } else{ ltemp = temp/4*100+temp%4*25; ltemp = degree2fah(ltemp); sprintf(out_str,"%02d.%02d",ltemp/100,math_abs(ltemp)%100); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); lcd_write_temp_f(prompt_pos.line,prompt_pos.pos[3]+strlen((const char *)out_str)); } } } } //"RXFREQ TXFREQ AGC GPS 1PPS CTRL ADPC" USA/AW 5K+ //"RXFREQ TXFREQ UP_LMT UNLOCK ERR RMT HOLD" static void refresh_logo3(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_2,1,8,14,19,26,31,36}; read_log_para(); //更新中间变量 disp_common_string(pmenu); sprintf(out_str,"%dM",txfreq_to_hz(ppara->rxfreq)); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],out_str); //频道 sprintf(out_str,"%dM",txfreq_to_hz(ppara->txfreq)); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); //频道 /*#if USE_NEW_AGC == 0 lcd_write_string(prompt_pos.line,prompt_pos.pos[2],(char*)switch_on_off[ppara->agc&3]); #else switch(ppara->agc) { case 0: default: lcd_write_string(prompt_pos.line,prompt_pos.pos[2],"OFF"); break; case 1: lcd_write_string(prompt_pos.line,prompt_pos.pos[2],"ON"); break; } #endif*/ if(ppara->gps==0) lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"NOGPS"); else if(ppara->gps==1) lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"UNLOCK"); else if(ppara->gps==2) lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"LOCK"); if(ppara->gps_1pps==0) lcd_write_string(prompt_pos.line,prompt_pos.pos[4],"OK"); else lcd_write_string(prompt_pos.line,prompt_pos.pos[4],"ERR"); if(atsc_para.system_para.ctrl==CTRL_REMOTE) lcd_write_string(prompt_pos.line,prompt_pos.pos[5],"RMT"); else lcd_write_string(prompt_pos.line,prompt_pos.pos[5],"LCA"); switch(ppara->adpc) //预校正 0:on&hold 1:on&update1 2:off 3;update2 { case ADPC_UPDATE1: case ADPC_UPDATE2: case ADPC_UPDATE3: #if USE_UPDATA5 case ADPC_UPDATE4: #endif case ADPC_HOLD: lcd_write_string(prompt_pos.line,prompt_pos.pos[6],"HOLD"); break; case ADPC_OFF: lcd_write_string(prompt_pos.line,prompt_pos.pos[6],"OFF"); break; default: lcd_write_string(prompt_pos.line,prompt_pos.pos[6],"ERR"); break; } } //" YYYY_MM_DD Sat Status Freq " static void refresh_logo4(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,2,14,19,27,35}; static const char s_astatus[][10] ={"INIT","UNKNOW","OK","SHORT","OPEN"}; #if USE_GPS S_UBLOX_HW_PARA *phw = gps_ublox_get_hw_info(); #endif S_SYS_TIME time; #if USE_GPS GPGSA_T *gps_gsa = gps_get_sa(); #endif PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; read_log_para(); //if((atsc_para.system_para.gps==1)&&(atsc_para.log_para.use_gps)) //INT if(atsc_para.log_para.use_gps) //INT { disp_common_string(pmenu); get_sys_time(&time); #if USE_GPS if(gps_gsa->fix_status<=1) sprintf(out_str," NA-NA-NA "); else sprintf(out_str,"%04d-%02d-%02d",time.year,time.month,time.date); #endif lcd_write_string(LINE_1,prompt_pos.pos[0],out_str); sprintf(out_str,"%02d-%02d-%02d",time.hour,time.min,time.sec); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); #if USE_GPS sprintf(out_str,"%02d",gps_gsa->sv); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); lcd_write_string(1,prompt_pos.pos[2],(void*)s_astatus[phw->a_status<=4?phw->a_status:0]); #endif sprintf(out_str,"%02X",ppara->gps_status); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); if(ppara->gps_freq[0]) sprintf(out_str,"-%dE-%02d",(ppara->gps_freq[1]&0xf0)>>4,ppara->gps_freq[1]&0x0f); else sprintf(out_str,"+%dE-%02d",(ppara->gps_freq[1]&0xf0)>>4,ppara->gps_freq[1]&0x0f); lcd_write_string(LINE_2,prompt_pos.pos[4]-1,out_str); } else { lcd_write_string(LINE_1,0," GPS:EXT "); lcd_write_string(LINE_2,0," "); } } //" RX_FREQ SNR STENGTH LOCK " static void refresh_logo5(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,2,14,22,33}; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; //update_tune_info(); memcpy(ppara,&atsc_para.log_para,sizeof(atsc_para.log_para)); if(ppara->tuner_init_status==1) { disp_common_string(pmenu); sprintf(out_str,"%03d",txfreq_to_hz(ppara->rxfreq)); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],out_str); sprintf(out_str,"%ddB",ppara->tuner_snr); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); sprintf(out_str,"%ddBm",ppara->tuner_strength); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); if(ppara->tuner_lock_status) { lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"Locked"); } else { lcd_write_string(prompt_pos.line,prompt_pos.pos[3],"UnLock"); } } else { lcd_write_string(LINE_1,0,"Initialize Tuner Failed! "); lcd_write_string(LINE_2,0,"Please Check and Cycle the Power. "); } } //"0123456789012345689" //" AGC STATUS " //" OFF UP_LIMIT " static void refresh_logo6(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,1,6}; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; char str_tmp[20]; read_log_para(); //更新中间变量 // "0123456789012345678901234567890123456789" disp_common_string(pmenu); switch(ppara->agc) { case 0: default: lcd_write_string(prompt_pos.line,prompt_pos.pos[0],"OFF"); break; case 1: lcd_write_string(prompt_pos.line,prompt_pos.pos[0],"ON "); break; } switch(ppara->agc_state) { case E_RFAGC_NORMAL: default: if(atsc_para.rf_para.agc){ memset(str_tmp,0,sizeof(str_tmp)); lcd_write_string(prompt_pos.line,prompt_pos.pos[1]," "); if(atsc_para.log_para.agc_adj>0){ sprintf(str_tmp,"+%02d.%02d", atsc_para.log_para.agc_adj/100, atsc_para.log_para.agc_adj%100); } else if(atsc_para.log_para.agc_adj<0){ sprintf(str_tmp,"-%02d.%02d", -atsc_para.log_para.agc_adj/100, -atsc_para.log_para.agc_adj%100); } else{ sprintf(str_tmp,"%02d.%02d", atsc_para.log_para.agc_adj/100, atsc_para.log_para.agc_adj%100); } lcd_write_string(prompt_pos.line,prompt_pos.pos[1],str_tmp); } else{ lcd_write_string(prompt_pos.line,prompt_pos.pos[1],"OK "); } break; case E_RFAGC_DOWN_LIMIT: lcd_write_string(prompt_pos.line,prompt_pos.pos[1],"DW_LIMIT"); break; case E_RFAGC_UP_LIMIT: lcd_write_string(prompt_pos.line,prompt_pos.pos[1],"UP_LIMIT"); break; } } //" CFR_BUSY1 CFR_BUSY2 CFR_BUSY3 " //" FF FF FF " //"0123456789012345678901234567890123456789" static void refresh_logo7(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,5,16,27}; PS_LOG_PARA ppara = (PS_LOG_PARA)para_middle; uint32 u32Val; read_log_para(); disp_common_string(pmenu); sprintf(out_str,"%02X",ppara->cfr_busy_stage1); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],out_str); sprintf(out_str,"%02X",ppara->cfr_busy_stage2); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); sprintf(out_str,"%02X",ppara->cfr_busy_stage3); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); } //" SYS RF FREQ TSID MODE TS CONFIG PA_CFG" //aw //" SYSTEM RF FREQ MODE CONFIG TS PA_CFG" //cormark static void refresh_main(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; #if AW_ATSC_5X const PROMPT_POS prompt_pos = {LINE_2,{0,4,7,12,17,22,25,33}}; #else const PROMPT_POS prompt_pos = {LINE_2,{0,7,10,16,22,29,33}}; #endif disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); #if ATSC_USA_AMP if((atsc_para.wh_para.pac==0)&&(atsc_para.pac_flag==0)) { lcd_write_string(LINE_2,33," "); } #endif } static void refresh_STSC30(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; disp_common_string(pmenu); } //" CTL ADPC INPUT GPS " //" CTL ADPC INPUT " static void refresh_sys1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_SYSTEM_PARA ppara = (PS_SYSTEM_PARA)para_middle; #if AW_ATSC_5X const PROMPT_POS prompt_pos = {LINE_1,{1,7,16,23,30,35}}; #else const PROMPT_POS prompt_pos = {LINE_1,{3,9,16}}; #endif disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.system_para.ctrl==CTRL_REMOTE){ // remote refrash if(g_remote_changed_byweb==1){ //printf("change ctrl!!\n"); g_remote_changed_byweb = 0; if(ppara->ctrl != atsc_para.system_para.ctrl) ppara->ctrl = atsc_para.system_para.ctrl; } if(ppara->mode != atsc_para.system_para.mode) ppara->mode = atsc_para.system_para.mode; if(ppara->input != atsc_para.system_para.input) ppara->input = atsc_para.system_para.input; if(ppara->adpc != atsc_para.system_para.adpc) ppara->adpc = atsc_para.system_para.adpc; if(ppara->gps != atsc_para.system_para.gps) ppara->gps = atsc_para.system_para.gps; } if(atsc_para.system_para.ctrl==CTRL_LOCAL){ if(g_remote_changed_byweb==1){ //printf("change ctrl!!\n"); g_remote_changed_byweb = 0; if(ppara->ctrl != atsc_para.system_para.ctrl) ppara->ctrl = atsc_para.system_para.ctrl; } } #if AW_ATSC_5X if(ppara->ctrl==CTRL_LOCAL) //CTRL 0:REMOTE 1:LOCAL { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"LCA"); } else { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"RMT"); } if(ppara->mode == SYS_MODE_LEGACY) { lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"ATSC1.0"); } /*else { lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"ATSC3.0"); }*/ switch(ppara->adpc) { case ADPC_OFF: sprintf(out_str,"OFF"); break; case ADPC_HOLD: sprintf(out_str,"HOLD"); break; case ADPC_UPDATE1: sprintf(out_str,"UPDATE"); break; case ADPC_UPDATE2: sprintf(out_str,"UPDLIN"); break; case ADPC_UPDATE3: sprintf(out_str,"UPDNL"); break; default: sprintf(out_str,"UPDATE"); break; } lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); //adpc switch(ppara->input) { case ASI_INPUT_TUNER: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"TUNER"); break; case ASI_INPUT_TS: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"ASI");//TS break; case ASI_INPUT_EAS: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"EAS"); break; case TSOIP_INPUT_IP: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"TSOIP"); break; case SMPTE_INPUT: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"SMPTE"); break; default: break; } if(ppara->gps==0) //GPS { lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"EXT"); } else if(ppara->gps==1) { lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"INT"); } else { lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"AUTO"); } #if USE_KOREA_VERSION if(ppara->test==0) //TEST { lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"OFF"); } else if(ppara->test==1) { lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"ON"); } #endif #else if(ppara->ctrl==CTRL_LOCAL) //CTRL 0:REMOTE 1:LOCAL { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"LCA"); } else { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"RMT"); } switch(ppara->adpc) { case ADPC_OFF: sprintf(out_str,"OFF"); break; case ADPC_HOLD: sprintf(out_str,"HOLD"); break; default: sprintf(out_str,"UPDATE"); break; } lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); //adpc switch(ppara->input) { case ASI_INPUT_TUNER: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"TUNER"); break; case ASI_INPUT_TS: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"ASI"); break; default: break; } #endif } void apply_rf_power_para(S_RF_PARA *ppara) { uint16 limited_power; uint16 rejected_steps; limited_power = fpga_limit_power_target(&atsc_para.we_para, &atsc_para.rf_para, ppara->power); if(limited_power < ppara->power) { rejected_steps = ppara->power - limited_power; ppara->power = limited_power; if(ppara->db >= rejected_steps) ppara->db -= rejected_steps; else ppara->db = 0; } if(ppara->power == atsc_para.rf_para.power) return; turn_off_rf_agc_state(E_CHG_TX_POWER); ppara->agc = 0; fpga_save_power(&atsc_para.we_para, ppara); atsc_para.rf_para.power = ppara->power; atsc_para.rf_para.db = ppara->db; e2rom_save_power(&atsc_para.rf_para); } //" TX RF POWER AGC SSREF LVL: " static void refresh_rf1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_RF_PARA ppara = (PS_RF_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{0,5,10,18,25,30}}; uint32 temp; //使用控制模式下,若为remote模式,每次均更新数据,以实时刷新dryloop改动(有延迟,液晶刷新周期1s) #if USE_CTRL_MODE if(atsc_para.system_para.ctrl==CTRL_REMOTE) pmenu->read_para_func(); #endif update_lvl_ref(ppara); disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.wh_para.func==0) lcd_write_string(LINE_2,prompt_pos.pos[0]+1,(uint8*)switch_on_off[ppara->tx&1]); else lcd_write_string(LINE_1,prompt_pos.pos[0]+1," "); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,(uint8*)switch_on_off[ppara->rf&1]); temp = ppara->power; //power -25到+5可调 内部值 0-600 0-500 -25~0 500-600 0~5 一个代表0.05db if(temp >RF_POWER_P_C_ON) temp = RF_POWER_P_C_ON; temp = temp>=RF_POWER_ZERO?(temp-RF_POWER_ZERO):(RF_POWER_ZERO - temp); if(ppara->power>=RF_POWER_ZERO) { sprintf(out_str,"+%d.%02d",temp/20,temp%20*5); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); } else { sprintf(out_str,"-%d.%02d",temp/20,temp%20*5); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); } if(atsc_para.wk_para.ss) { if(ppara->ssref) lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"SET"); else lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"OK"); } else { lcd_write_string(LINE_1,prompt_pos.pos[3]+1," "); } switch(ppara->agc) { #if USE_NEW_AGC == 0 case 0: default: lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"OFF"); break ; case 1: lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"ON"); break ; #else lcd_write_string(LINE_2,prompt_pos.pos[4]+1,(uint8*)switch_agc_sct[ppara->agc&1]); #endif } sprintf(out_str,"%03d",ppara->lvl>>4); //第一行显示的为LVL RF屏ENUM lcd_write_string(LINE_1,prompt_pos.pos[5]+5,out_str); sprintf(out_str,"%03d", ppara->ref>>4); //第二行显示的为REF RF屏FAGC (ppara->ref&0xff00)>>8 lcd_write_string(LINE_2,prompt_pos.pos[5]+5,out_str); /*if(atsc_para.log_para.agc_state==1){ lcd_write_string(LINE_1,prompt_pos.pos[5]+5,"LOW");//POWER LOW lcd_write_string(LINE_2,prompt_pos.pos[5]+5,"ERR"); } else if(atsc_para.log_para.agc_state==2){ lcd_write_string(LINE_1,prompt_pos.pos[5]+5,"HIGH");//POWER HIGH lcd_write_string(LINE_2,prompt_pos.pos[5]+5,"ERR"); } else if(atsc_para.log_para.agc_state==3){ lcd_write_string(LINE_1,prompt_pos.pos[5]+5,"DOWN");//DOWN LIMIT lcd_write_string(LINE_2,prompt_pos.pos[5]+5,"WARN"); } else if(atsc_para.log_para.agc_state==4){ lcd_write_string(LINE_1,prompt_pos.pos[5]+5,"UP");//UP LIMIT lcd_write_string(LINE_2,prompt_pos.pos[5]+5,"WARN"); } else{ lcd_write_string(LINE_1,prompt_pos.pos[5]+5,"-"); lcd_write_string(LINE_2,prompt_pos.pos[5]+5,"OK"); }*/ if(para_change_flag==TRUE) { apply_rf_power_para(ppara); } } static void refresh_freq(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_RF_PARA ppara = (PS_RF_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{1,10,20,21,22,23,24}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.system_para.ctrl==CTRL_REMOTE){ // remote refrash if(ppara->rxfreq != atsc_para.rf_para.rxfreq) ppara->rxfreq = atsc_para.rf_para.rxfreq; if(ppara->txfreq != atsc_para.rf_para.txfreq) ppara->txfreq = atsc_para.rf_para.txfreq; if(ppara->hz != atsc_para.rf_para.hz){ ppara->hz = atsc_para.rf_para.hz; if(ppara->hz&0xf0000) { //- ppara->hz = RF_MAX_HZ-ppara->hz&0xffff ; } else {//+ ppara->hz =(ppara->hz&0xffff)+RF_MAX_HZ; } } } sprintf(out_str,"%dM",txfreq_to_hz(ppara->rxfreq)); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); sprintf(out_str,"%dM",txfreq_to_hz(ppara->txfreq)); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); if(ppara->hz>=RF_MAX_HZ) //此处hz做了处理,E2ROM和FPGA保存时,只保存3字节,最高字节1表示负数,0表示整数,后两字节为HZ值 { //在此直接转换为0--100000 0表示-50000 100000表示+50000 保存时也要做逆向处理 sprintf(out_str,"+%05d",ppara->hz-RF_MAX_HZ); } else { sprintf(out_str,"-%05d",RF_MAX_HZ-ppara->hz); } lcd_write_string(LINE_2,prompt_pos.pos[2]-1,out_str); } #if AW_ATSC_5X void refresh_net1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_NETWORK_PARA ppara = (PS_NETWORK_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,5,6,7,9 }}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //DelayTime; sprintf(out_str,"%06d.%dus",ppara->delay/10,ppara->delay%10); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); //TXID sprintf(out_str,"%03X",ppara->txid); lcd_write_string(LINE_2,14,out_str); //NETID sprintf(out_str,"%03X",ppara->netid); lcd_write_string(LINE_2,22,out_str); //Bratio 0:off 1:39 2:36 7 if(ppara->bratio) { sprintf(out_str,"%ddB",42-ppara->bratio*3); lcd_write_string(LINE_2,31,out_str); } else lcd_write_string(LINE_2,31+1,"OFF"); } #endif //" SYNC TCP_C ZP1F PID_DET " static void refresh_mode(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{1,9,19}}; PS_MODE_PARA ppara = (PS_MODE_PARA)para_middle; //LEAGCY MFN if((atsc_para.log_para.mode == 0)) { lcd_write_string(LINE_1,0," LEGACY "); lcd_write_string(LINE_2,0," 8VSB "); return; } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //sync if(ppara->sync==0) lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"DUMMY"); else lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"TCP"); //tcp_c if(ppara->tcp_c) //SFN lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"ENABLE"); else lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"DISABLE"); //zp1f sprintf(out_str,"%01X",ppara->zp1f); //SFN lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); //pid_det sprintf(out_str,"%04X",ppara->pid_det&0x1fff); lcd_write_string(LINE_2,29,out_str); //此处比较特殊,该值为只读,直接跳过 } //" AD1 MUTE AD3 DPD SN D&T USER PAC" //AW //" AD1 MUTE TX_EX DPD SN D&T PAC " //USA //"0123456789012345678901234567890123456789" //" AD1 MUTE AD3 DPD SN D&T ACCT PAC" // 0 5 11 16 21 25 30 36 //"0123456789012345678901234567890123456789" //" AD1 MUTE AD3 DPD SN D&T ACCT PAC A_DPD " // 0 4 9 13 17 20 24 29 33 static void refresh_ad_m(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; #if AW_ATSC_5X const PROMPT_POS prompt_pos = {LINE_2,{0,4,9,13,17,20,24,29,33}};//{0,5,11,16,21,25,30,36} disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); if((atsc_para.pac_flag==0)&&(atsc_para.wh_para.pac==0)) { lcd_write_string(LINE_2,prompt_pos.pos[7]+1," "); } #else const PROMPT_POS prompt_pos = {LINE_2,{0,5,10,16,22,26,31}}; disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); if((atsc_para.pac_flag==0)&&(atsc_para.wh_para.pac==0)) { lcd_write_string(LINE_2,prompt_pos.pos[6]+1," "); } #endif } //" PCRL Sw_Up Sw_Down Sw_RT PAC " static void refresh_ad1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{0,6,13,24,25,29,33}}; PS_ADVANCE_PARA ppara = (PS_ADVANCE_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //pcr sprintf(out_str,"%01X",ppara->pcr&0x07); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); //slow_up lcd_write_string(LINE_2,prompt_pos.pos[1]+1,(uint8*)switch_on_off[ppara->slow_up&1]); //slow_down lcd_write_string(LINE_2,prompt_pos.pos[2]+1,(uint8*)switch_on_off[ppara->slow_down&1]); #if ADDR_CONFLICT_DISABLED //SW_RT sprintf(out_str,"%02X",ppara->swrt); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); #else //SW_RT sprintf(out_str,"%02X",ppara->swrt); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); #endif #if ATSC_USA_AMP if(ppara->pac) lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"RF"); else lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"DC"); #endif switch(ppara->asiout) { case 0: lcd_write_string(LINE_2,prompt_pos.pos[6]+1,"ASI1"); break; case 1: lcd_write_string(LINE_2,prompt_pos.pos[6]+1,"ASI2"); break; case 2: lcd_write_string(LINE_2,prompt_pos.pos[6]+1,"RFIN"); break; case 3: lcd_write_string(LINE_2,prompt_pos.pos[6]+1,"AUTO"); break; } } //" M_TS M_10M M_1PPS M_DLY " AW //" M_TS M_10M M_1PPS M_DLY " USA static void refresh_ad2(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; #if 0//AW_ATSC_5X const PROMPT_POS prompt_pos = {LINE_1,{1,7,14,22,23,25,26,28,29}}; #else const PROMPT_POS prompt_pos = {LINE_1,{1,7,14,22,23,25,26,28,29}}; #endif PS_ADVANCE2_PARA ppara = (PS_ADVANCE2_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //M_ts if(ppara->m_ts) lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"0"); //m_10m if(ppara->m_10m) lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"0"); //m_1pps if(ppara->m_1pps) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"0"); //m_dly sprintf(out_str,"%02d/%02d/%02d",ppara->m_dly_hh,ppara->m_dly_mm,ppara->m_dly_ss); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); } static void refresh_ad3(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; #if USA_ATSC_5X //" RC_CMD FWD_CAL CW RST " const PROMPT_POS prompt_pos = {LINE_1,{1,9,25,33}}; PS_ADVANCE3_PARA ppara = (PS_ADVANCE3_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //RC_CMD if(ppara->rc_cmd==0) lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"IO"); else lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"Other"); //FWD_CAL if(ppara->fwd_cal==0) lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"Cal"); else lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"OK"); #if 0 //COR <-- TYPE if(atsc_para.system_para.ctrl==CTRL_REMOTE) { if(atsc_para.ad3_para.cor==0) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"2"); } else { if(ppara->cor==0) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"2"); } #endif //CW lcd_write_string(LINE_2,prompt_pos.pos[2]+1,(void*)switch_on_off[ppara->cw&1]); //RST switch(ppara->rst) { case 0: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"NO"); break; case 1: default: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"YES"); break; } #else //" MP_LP CRM FWD_CAL CW MAX_POW RST " const PROMPT_POS prompt_pos = {LINE_1,{0,7,12,21,26,34}}; PS_ADVANCE3_PARA ppara = (PS_ADVANCE3_PARA)para_middle; uint32 temp; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->mptv==0) lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"LPTV"); else lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"MPTV"); //RC_CMD if(ppara->rc_cmd==0) lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"IO"); else lcd_write_string(LINE_2,prompt_pos.pos[1]+1,"WEB"); //FWD_CAL if(ppara->fwd_cal==0) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"Cal"); else lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"OK"); //CW lcd_write_string(LINE_2,prompt_pos.pos[3]+1,(uint8 *)switch_on_off[ppara->cw&1]); temp = ppara->max_power; //power -25到+5可调 内部值 0-600 0-500 -25~0 500-600 0~5 一个代表0.05db if(temp >RF_POWER_P_C_ON) temp = RF_POWER_P_C_ON; temp = temp>=RF_POWER_ZERO?(temp-RF_POWER_ZERO):(RF_POWER_ZERO - temp); if(ppara->max_power>=RF_POWER_ZERO) { sprintf(out_str,"+%d.%02d",temp/20,temp%20*5); } else { sprintf(out_str,"-%d.%02d",temp/20,temp%20*5); } lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); //RST switch(ppara->rst) { case 0: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"NO"); break; case 1: default: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"YES"); break; } #endif } static uint8 ad_fssi_calc(uint16 reg_value) { uint8 fssi = 0; if(reg_value>=DPD_FSSI_MAX_VALUE) { fssi = 100; } else if(reg_value<=DPD_FSSI_MIN_VALUE) { fssi = 0; } else { fssi = (reg_value-DPD_FSSI_MIN_VALUE)*100/(DPD_FSSI_MAX_VALUE-DPD_FSSI_MIN_VALUE); } if(fssi>20) { fssi -=20; } else { fssi = 0; } if(atsc_para.rf_para.txfreq<=FREQ_MAX_V) { if(fssi>18) { fssi-=18; } } return fssi; } //" PDT CFR ADPC FSSI " static void refresh_ad4(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{1,7,13,22}}; PS_ADVANCE4_PARA ppara = (PS_ADVANCE4_PARA)para_middle; uint16 usfssi; uint8 data; static uint32 tickbak=0; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); //pdt sprintf(out_str,"%01X",ppara->pdt&0x0f); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); // cfr //sprintf(out_str,"%01X",ppara->cfr&0x0f); //lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); //ADPC switch(ppara->adpc) { case 0:default: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"OFF"); break; case 1: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"HOLD"); break; case 2: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"UPDATE");//UPDATE1 break; /*case 3: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"UPDLIN"); break; case 4: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"UPDATE3"); break; case 5: #if USE_UPDATA5 lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"UPDATE4"); break; case 6: #endif lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"UPDATE"); break;*/ } #if 1 //需添加A:FSSI和B:FSSI if(check_delay_over(&tickbak,50)==TRUE) { //05 3a 发1 为A 发0 为B if(++ppara->ab_sec>16) { ppara->ab_flag = ppara->ab_flag?FALSE:TRUE; ppara->ab_sec = 0; } set_ab_switch(ppara->ab_flag); usfssi = read_ob_fb_rms_pwr(); /* PR10: ORx实测功率, 原0x36/0x37 */ ppara->fssi = ad_fssi_calc(usfssi); } if(ppara->ab_flag) { st_extend_state.a_fssi=ppara->fssi; if((ppara->fssi > 75) || (ppara->fssi < 20)) { if(ppara->ab_sec&1) sprintf(out_str,"B:%d%%!",ppara->fssi); //250307 feedback, need to change A->B else return; } else { sprintf(out_str,"B:%d%%",ppara->fssi); } } else { st_extend_state.b_fssi=ppara->fssi; if((ppara->fssi > 75) || (ppara->fssi < 20)) { if(ppara->ab_sec&1) sprintf(out_str,"A:%d%%!",ppara->fssi); //250307 feedback, need to change B->A else return; } else { sprintf(out_str,"A:%d%%",ppara->fssi); } } #else set_ab_switch(0); // 0 : A //printf("ad4 AB - A\n"); usfssi = read_ob_fb_rms_pwr(); /* PR10: ORx实测功率, 原0x36/0x37 */ ppara->fssi = ad_fssi_calc(usfssi); st_extend_state.a_fssi = ppara->fssi; if((ppara->fssi > 75) || (ppara->fssi < 20)) { sprintf(out_str,"%d%%!",ppara->fssi); } else { sprintf(out_str,"%d%%",ppara->fssi); } #endif lcd_write_string(LINE_2,prompt_pos.pos[3]+1,out_str); } #if ATSC_USA_AMP #define LCD_CLR " " #define LCD_ZERO "0" #define LCD_NULL "NULL" // " Vol_9 Vol_50 Cur_50 Vol_Dac PA_fwd" static void refresh_pac1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{0,8,16,24,32}}; disp_common_string(pmenu); if(atsc_para.pac_flag == 0) { lcd_write_string(LINE_2,prompt_pos.pos[0]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[1]+2,LCD_NULL); lcd_write_string(LINE_2,prompt_pos.pos[2]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[3]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[4]+3,LCD_ZERO); } else { sprintf(out_str,"%6.2fV",atsc_para.avr_pa_para.vol_9v); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); sprintf(out_str,"%6.2fV",atsc_para.avr_pa_para.vol_12v); if(atsc_para.avr_pa_para.pac_lev==3) lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); else lcd_write_string(LINE_2,prompt_pos.pos[1]+1,LCD_NULL); sprintf(out_str,"%6.2fV",atsc_para.avr_pa_para.vol_50v); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); if(atsc_para.avr_pa_para.pa_fwd <(float)0.001) atsc_para.avr_pa_para.pa_fwd = (float)0.00; else if(atsc_para.avr_pa_para.pa_fwd>(float)10000.0) atsc_para.avr_pa_para.pa_fwd = (float)0.00; sprintf(out_str,"%6.2fW",atsc_para.avr_pa_para.pa_fwd); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); if(atsc_para.avr_pa_para.pa_reflect <(float)0.001) atsc_para.avr_pa_para.pa_reflect = 0.00; else if(atsc_para.avr_pa_para.pa_reflect>(float)10000.0) atsc_para.avr_pa_para.pa_reflect = 0.00; sprintf(out_str,"%6.2fW",atsc_para.avr_pa_para.pa_reflect); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); } } //" PA_Ref VSWR PA_TEMP Cur2_50 PA_Lvl" static void refresh_pac2(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; float temp=0.0; const PROMPT_POS prompt_pos = {LINE_1,{0,9,17,24,33}}; disp_common_string(pmenu); if(atsc_para.pac_flag == 0) { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,LCD_NULL); lcd_write_string(LINE_2,prompt_pos.pos[1]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[2]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[3]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[4]+3,LCD_ZERO); } else { if(atsc_para.avr_pa_para.pac_lev==3) { sprintf(out_str,"%6.2fdBm",atsc_para.avr_pa_para.pa_in); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); } else lcd_write_string(LINE_2,prompt_pos.pos[0]+2,LCD_NULL); sprintf(out_str,"%6.2fV",atsc_para.avr_pa_para.gv_881); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); sprintf(out_str,"%5.2f",atsc_para.avr_pa_para.swr); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); // F=c*9/5+32 temp = atsc_para.avr_pa_para.temp_pa; if(get_temp_unit()==1){ sprintf(out_str,"%6.2f",temp); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); lcd_write_temp_c(LINE_2,prompt_pos.pos[3]+strlen((const char *)out_str)); } else{ temp = ((float)atsc_para.avr_pa_para.temp_pa*(float)9/((float)5.0)+(float)32.0); sprintf(out_str,"%6.2f",temp); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); lcd_write_temp_f(LINE_2,prompt_pos.pos[3]+strlen((const char *)out_str)); } if(atsc_para.avr_pa_para.pac_lev == 1) sprintf(out_str,"%s","160W"); else if(atsc_para.avr_pa_para.pac_lev == 2) sprintf(out_str,"%s","310W"); else if(atsc_para.avr_pa_para.pac_lev == 3) sprintf(out_str,"%s","610W"); else sprintf(out_str,"%s","160W"); lcd_write_string(LINE_2,prompt_pos.pos[4]+1,out_str); } } static void refresh_pac3(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{0,11,21,31}}; disp_common_string(pmenu); if(atsc_para.pac_flag == 0) { lcd_write_string(LINE_2,prompt_pos.pos[0]+3,LCD_ZERO); if(atsc_para.avr_pa_para.pac_lev==3) { lcd_write_string(LINE_2,prompt_pos.pos[1]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[2]+3,LCD_ZERO); lcd_write_string(LINE_2,prompt_pos.pos[3]+3,LCD_ZERO); } else if (atsc_para.avr_pa_para.pac_lev==2) { lcd_write_string(LINE_2,prompt_pos.pos[1]+3,LCD_ZERO); lcd_write_string(LINE_1,prompt_pos.pos[2] ,LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[3] ,LCD_CLR); } else { lcd_write_string(LINE_1,prompt_pos.pos[1] ,LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[2] ,LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[3] ,LCD_CLR); } } else { sprintf(out_str,"%6.2fA",atsc_para.avr_pa_para.cur_50v); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); if(atsc_para.avr_pa_para.pac_lev==3) { sprintf(out_str,"%6.2fA",atsc_para.avr_pa_para.cur_50V_2); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); sprintf(out_str,"%6.2fA",atsc_para.avr_pa_para.cur_50v_3); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); sprintf(out_str,"%6.2fA",atsc_para.avr_pa_para.cur_50v_4); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); } else if (atsc_para.avr_pa_para.pac_lev==2) { sprintf(out_str,"%6.2fA",atsc_para.avr_pa_para.cur_50V_2); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); lcd_write_string(LINE_1,prompt_pos.pos[2],(uint8 *)LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[3],(uint8 *)LCD_CLR); } else { lcd_write_string(LINE_1,prompt_pos.pos[1],(uint8 *)LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[2],(uint8 *)LCD_CLR); lcd_write_string(LINE_1,prompt_pos.pos[3],(uint8 *)LCD_CLR); } } } static BOOL proc_key_pac1(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_UP: enter_menu(ADV_LCD+11); need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(ADV_LCD+10); need_refresh = TRUE; break; case KEY_ENTER: JUDGE_CTRL(); need_refresh = TRUE; break; case KEY_EXIT: if( (atsc_para.pac_flag == 0) && (atsc_para.wh_para.pac == 0) ) enter_menu(ADV_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_pac2(void *parg,uint8 key) { //PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; //PS_ADVANCE_PARA ppara = (PS_ADVANCE_PARA)para_middle; switch(key) { case KEY_LEFT: case KEY_UP: enter_menu(ADV_LCD+9); need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(ADV_LCD+11); need_refresh = TRUE; break; case KEY_ENTER: JUDGE_CTRL(); need_refresh = TRUE; break; case KEY_EXIT: if( (atsc_para.pac_flag == 0) && (atsc_para.wh_para.pac == 0) ) enter_menu(ADV_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_pac3(void *parg,uint8 key) { //PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; //PS_ADVANCE_PARA ppara = (PS_ADVANCE_PARA)para_middle; switch(key) { case KEY_LEFT: case KEY_UP: enter_menu(ADV_LCD+10); need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(ADV_LCD+9); need_refresh = TRUE; break; case KEY_ENTER: JUDGE_CTRL(); need_refresh = TRUE; break; case KEY_EXIT: if( (atsc_para.pac_flag == 0) && (atsc_para.wh_para.pac == 0) ) enter_menu(ADV_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static void read_pac_para(void) { } #endif //" TIME A_SNR A_IMD R_SNR R_IMD C_T DPD " //" TIME A_SNR A_IMD R_SNR R_IMD DPD C_T " // TIME A_SNR A_IMD R_SNR R_IMD C_T DPD //"0123456789012345679801234567890123456789" //" TIME A_SNR A_IMD R_SNR R_IMD DPD C_T " //" TIME A_SNR A_IMD R_SNR R_IMD CONT C_T " static void refresh_ad5(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{0,5,11,17,23,29,34}}; S_ADVANCE5_PARA *ppara = (S_ADVANCE5_PARA *)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->time<=MAX_AUTO_UPDATE_TIME) sprintf(out_str,"%01d",ppara->time); else sprintf(out_str,"MAX"); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); sprintf(out_str,"%02d",ppara->a_snr); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02d",ppara->a_imd); lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); sprintf(out_str,"%02d",ppara->r_snr); lcd_write_string(LINE_2,prompt_pos.pos[3]+1,out_str); sprintf(out_str,"%02d",ppara->r_imd); lcd_write_string(LINE_2,prompt_pos.pos[4]+1,out_str); switch (ppara->dpd) { case 0: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"CLR"); break; case 1: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"NEW"); break; case 2: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"CONT"); break; case 3: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"LIN"); break; default: lcd_write_string(LINE_2,prompt_pos.pos[5]+1,"NEW"); break; } if(ppara->c_t<=MAX_AUTO_UPDATE_TIME) sprintf(out_str,"%01d",ppara->c_t); else sprintf(out_str,"MAX"); lcd_write_string(LINE_2,prompt_pos.pos[6]+1,out_str); } //" YY/MM/DD HH:MM:SS " //" 20 " static void refresh_ad_dt(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{3,4,6,7,9,10,13,14,16,17,19,20,23}}; S_ADVANCE_DT_PARA *ppara = (S_ADVANCE_DT_PARA*)para_middle; disp_common_string(p); lcd_write_prompt(&prompt_pos,p); if(!para_change_flag) //若没有处于改动状态,实时刷新 { usr_get_sys_rtc_time(NULL,ppara);//rtc_get_date_time(&ppara->dd,&ppara->tt); //ppara->gmt = atsc_para.wj_para.gmt; } if(ppara->dd.RTC_Year>100){ sprintf(out_str,"%02d/%02d/%02d",ppara->dd.RTC_Year-100,ppara->dd.RTC_Month,ppara->dd.RTC_Date); } else{ sprintf(out_str,"%02d/%02d/%02d",ppara->dd.RTC_Year,ppara->dd.RTC_Month,ppara->dd.RTC_Date); } lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); sprintf(out_str,"%02d:%02d:%02d",ppara->tt.RTC_Hours,ppara->tt.RTC_Minutes,ppara->tt.RTC_Seconds); lcd_write_string(LINE_2,prompt_pos.pos[6],out_str); } //"NAME: PWD: " static void refresh_user(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; const PROMPT_POS prompt_n = {LINE_1,{5, 6, 7, 8, 9,10,11,12,13,14,15,16, 24,25,26,27,28,29,30,31,32,33,34,35}}; S_USER_INFO *puser = (S_USER_INFO*)para_middle; disp_common_string(p); lcd_write_prompt(&prompt_n,p); sprintf(out_str,"%s",puser->name); lcd_write_string(LINE_2,prompt_n.pos[0],out_str); sprintf(out_str,"%s",puser->password); lcd_write_string(LINE_2,prompt_n.pos[12],out_str); } void save_ad_dt_para(void *psave) { S_ADVANCE_DT_PARA *ppara = (S_ADVANCE_DT_PARA *)psave; S_SYS_TIME tmptime={0}; tmptime.year = ppara->dd.RTC_Year; tmptime.month = ppara->dd.RTC_Month; tmptime.date = ppara->dd.RTC_Date; tmptime.hour = ppara->tt.RTC_Hours; tmptime.min = ppara->tt.RTC_Minutes; tmptime.sec = ppara->tt.RTC_Seconds; usr_set_sys_rtc_time(&tmptime);//rtc_set_date_time(&ppara->dd,&ppara->tt); log_printf(LOG_INFO, I_USER_CFG, "y=%d,m=%d,d=%d h=%d,m=%d,s=%d\n",ppara->dd.RTC_Year, ppara->dd.RTC_Month, ppara->dd.RTC_Date, ppara->tt.RTC_Hours, ppara->tt.RTC_Minutes,ppara->tt.RTC_Seconds); #if 0 temp=ppara->gmt-atsc_para.wj_para.gmt; if(temp) { if(temp>0) { if(ppara->tt.Hours+temp>23) ppara->tt.Hours+=(temp-24); else ppara->tt.Hours += temp; } else { if(ppara->tt.Hours+temp>=0) ppara->tt.Hours+=temp; else ppara->tt.Hours += temp+24; } rtc_set_date_time(&ppara->dd,&ppara->tt); atsc_para.wj_para.gmt = ppara->gmt; c256_bytewrite(EEPROM_WJ_ADDR+OFFSET_OF_STRUCT(S_WJ_PARA,gmt),ppara->gmt); } delay_ms(1000); #endif } static uint32 get_month_day_num(uint32 month,uint32 year) { const static uint8 m_day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //各月的天数 if(month!=2) { return m_day[month]; } else {//能被4并且不能被100整除,或者能被400整除 if(((year%4==0) && (year%100!=0))||(year%400==0)) { return m_day[2]+1; } else { return m_day[2]; } } } static uint32 get_corrent_month_day_num(uint32 date,uint32 month,uint32 year) { uint32 max_num = get_month_day_num(month,year); if(date>max_num) { date = max_num; } return date; } //" YY/MM/DD HH:MM:SS " static BOOL proc_key_ad_dt(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_ADVANCE_DT_PARA ppara = (PS_ADVANCE_DT_PARA)para_middle; uint32 d_num = 0; right_flag = FALSE; left_flag = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: if(ppara->dd.RTC_Year+10<=99) ppara->dd.RTC_Year+=10; else ppara->dd.RTC_Year = 99; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 1: if(ppara->dd.RTC_Year+1<=99) ppara->dd.RTC_Year++; else ppara->dd.RTC_Year = 99; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 2: if(ppara->dd.RTC_Month+10<=12) ppara->dd.RTC_Month+=10; else ppara->dd.RTC_Month = 12; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 3: if(ppara->dd.RTC_Month+1<=12) ppara->dd.RTC_Month++; else ppara->dd.RTC_Month = 12; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 4: d_num = get_month_day_num(ppara->dd.RTC_Month,ppara->dd.RTC_Year+2000); if(ppara->dd.RTC_Date+10<=d_num) ppara->dd.RTC_Date+=10; else ppara->dd.RTC_Date = d_num; break; case 5: d_num = get_month_day_num(ppara->dd.RTC_Month,ppara->dd.RTC_Year+2000); if(ppara->dd.RTC_Date+1<=d_num) ppara->dd.RTC_Date++; else ppara->dd.RTC_Date = d_num; break; case 6: if(ppara->tt.RTC_Hours+10<=23) ppara->tt.RTC_Hours+=10; else ppara->tt.RTC_Hours = 23; break; case 7: if(ppara->tt.RTC_Hours+1<=23) ppara->tt.RTC_Hours++; else ppara->tt.RTC_Hours = 23; break; case 8: if(ppara->tt.RTC_Minutes+10<=59) ppara->tt.RTC_Minutes+=10; else ppara->tt.RTC_Minutes = 59; break; case 9: if(ppara->tt.RTC_Minutes+1<=59) ppara->tt.RTC_Minutes++; else ppara->tt.RTC_Minutes = 59; break; case 10: if(ppara->tt.RTC_Seconds+10<=59) ppara->tt.RTC_Seconds+=10; else ppara->tt.RTC_Seconds = 59; break; case 11: if(ppara->tt.RTC_Seconds+1<=59) ppara->tt.RTC_Seconds++; else ppara->tt.RTC_Seconds = 59; break; case 12: if(ppara->gmt<12) ppara->gmt++; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: if(ppara->dd.RTC_Year>=10) ppara->dd.RTC_Year-=10; else ppara->dd.RTC_Year = 0; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 1: if(ppara->dd.RTC_Year>=1) ppara->dd.RTC_Year--; else ppara->dd.RTC_Year = 0; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 2: if(ppara->dd.RTC_Month>10) ppara->dd.RTC_Month-=10; else ppara->dd.RTC_Month = 1; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 3: if(ppara->dd.RTC_Month>1) ppara->dd.RTC_Month--; else ppara->dd.RTC_Month = 1; ppara->dd.RTC_Date = get_corrent_month_day_num(ppara->dd.RTC_Date,ppara->dd.RTC_Month,ppara->dd.RTC_Year); break; case 4: if(ppara->dd.RTC_Date>10) ppara->dd.RTC_Date-=10; else ppara->dd.RTC_Date = 1; break; case 5: if(ppara->dd.RTC_Date>1) ppara->dd.RTC_Date--; else ppara->dd.RTC_Date = 1; break; case 6: if(ppara->tt.RTC_Hours>=10) ppara->tt.RTC_Hours-=10; else ppara->tt.RTC_Hours = 0; break; case 7: if(ppara->tt.RTC_Hours>=1) ppara->tt.RTC_Hours--; else ppara->tt.RTC_Hours = 0; break; case 8: if(ppara->tt.RTC_Minutes>=10) ppara->tt.RTC_Minutes-=10; else ppara->tt.RTC_Minutes = 0; break; case 9: if(ppara->tt.RTC_Minutes>=1) ppara->tt.RTC_Minutes--; else ppara->tt.RTC_Minutes = 0; break; case 10: if(ppara->tt.RTC_Seconds>=10) ppara->tt.RTC_Seconds-=10; else ppara->tt.RTC_Seconds = 0; break; case 11: if(ppara->tt.RTC_Seconds>=1) ppara->tt.RTC_Seconds--; else ppara->tt.RTC_Seconds = 0; break; case 12: if(ppara->gmt>-12) ppara->gmt--; break; } need_refresh = TRUE; break; case KEY_ENTER: JUDGE_CTRL(); p->save_para_func(para_middle); //ret_father_menu(); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //"NAME: PWD: " static BOOL proc_key_user(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_USER_INFO *puser =(S_USER_INFO*)para_middle; uint32 len = 0; right_flag = FALSE; left_flag = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: len = strlen(puser->name); if(p->item_indexname[p->item_index]++; psts_name_add_judge((uint8*)&puser->name[p->item_index]); } break; case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: len = strlen(puser->password); if(p->item_index-12password[p->item_index-12]++; psts_name_add_judge((uint8*)&puser->password[p->item_index-12]); } break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: len = strlen(puser->name); if(p->item_indexname[p->item_index]--; psts_name_dec_judge((uint8*)&puser->name[p->item_index]); } break; case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: len = strlen(puser->password); if(p->item_index-12password[p->item_index-12]--; psts_name_dec_judge((uint8*)&puser->password[p->item_index-12]); } break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: JUDGE_CTRL(); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #if USA_ATSC_5X static void refresh_latch(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{0,7,10,13,16,20,23,27,32}}; S_LATCH_PARA *ppara = (S_LATCH_PARA *)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); update_latch_para(); if(ppara->reset) lcd_write_string(prompt_pos.line,prompt_pos.pos[0]+1,"CLR"); else lcd_write_string(prompt_pos.line,prompt_pos.pos[0]+1,"OK"); sprintf(out_str,"%d",ppara->u1); lcd_write_string(prompt_pos.line,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%d",ppara->u2); lcd_write_string(prompt_pos.line,prompt_pos.pos[2]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.rf); lcd_write_string(prompt_pos.line,prompt_pos.pos[3]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.gps); lcd_write_string(prompt_pos.line,prompt_pos.pos[4]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.ts); lcd_write_string(prompt_pos.line,prompt_pos.pos[5]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.sys); lcd_write_string(prompt_pos.line,prompt_pos.pos[6]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.m_1pps); lcd_write_string(prompt_pos.line,prompt_pos.pos[7]+1,out_str); sprintf(out_str,"%d",atsc_para.latch_para.sfn); lcd_write_string(prompt_pos.line,prompt_pos.pos[8]+1,out_str); } #endif static void refresh_up_confirm_ad3(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{18,25}}; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; disp_common_string(pmenu); if(ppara->confirm) lcd_write_string(prompt_pos.line,prompt_pos.pos[0],PROMPT_CHAR); else lcd_write_string(prompt_pos.line,prompt_pos.pos[1],PROMPT_CHAR); } //" SN:0123456789123 GUI_KEY:01234567 " //" PSIP_KEY:01234567 EAS_KEY:01234567 " static void refresh_sn(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1, {4,5,6,7,8,9,10,11,12,13,14,15,16, 29,30,31,32,33,34,35,36}}; const PROMPT_POS prompt_pos2 = {LINE_1,{10,11,12,13,14,15,16,17, 29,30,31,32,33,34,35,36}}; S_SN_PARA *ppara = (S_SN_PARA *)para_middle; static uint32 sec = 0; disp_common_string(pmenu); //lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%013lld",ppara->sn); lcd_write_string(LINE_1,prompt_pos.pos[0],out_str); sprintf(out_str,"%08X",ppara->gui_key); lcd_write_string(LINE_1,prompt_pos.pos[13],out_str); sprintf(out_str,"%08X",ppara->psip_key); lcd_write_string(LINE_2,prompt_pos2.pos[0],out_str); sprintf(out_str,"%08X",ppara->eas_key); lcd_write_string(LINE_2,prompt_pos2.pos[8],out_str); if(sec&1) { if(pmenu->item_index<21) { if(para_change_flag==TRUE) lcd_write_string(LINE_1,prompt_pos.pos[pmenu->item_index],PROMPT_CHANGE); else lcd_write_string(LINE_1,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); } else { if(para_change_flag==TRUE) lcd_write_string(LINE_2,prompt_pos2.pos[pmenu->item_index-21],PROMPT_CHANGE); else lcd_write_string(LINE_2,prompt_pos2.pos[pmenu->item_index-21],PROMPT_CHAR); } } sec++; } //" YES NO " static void refresh_up_confirm_fac(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{6,23}}; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; disp_common_string(pmenu); if(ppara->confirm) lcd_write_string(prompt_pos.line,prompt_pos.pos[0],PROMPT_CHAR); else lcd_write_string(prompt_pos.line,prompt_pos.pos[1],PROMPT_CHAR); } void refresh_cycle_power2(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; disp_common_string(pmenu); light_on_forever(); if(get_fpga_up_result()==1){ lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_1,0," FPGA Upgrade Failed "); lcd_write_string(LINE_2,0," "); } else if((get_fpga_up_result()==2)){ // "0123456789012345678901234567890123456789" lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_1,0," FPGA Upgrade Succeed "); lcd_write_string(LINE_2,0," Please cycle the power...... "); } else if((get_fpga_up_result()==3)){ lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_1,0," FPGA Upgrade Timeout "); lcd_write_string(LINE_2,0," Please cycle the power...... "); } else{ enter_menu(0); } light_on(); } void refresh_cfg_waiting(void *parg,void *parv) { uint8 retime = atsc_para.system_para.final_stage; char show_perc[5] = {0}; lcd_write_string(LINE_1,0," WAIT A MOMENT .... "); lcd_write_string(LINE_2,0," "); } void refresh_alarm_info(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; disp_common_string(pmenu); light_on_forever(); if(get_display_result()==DISPALY_RFAGC_ERR_POWER_LOW){ lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_1,0," RFAGC failed - Power low! [4] "); lcd_write_string(LINE_2,0," "); } else if((get_fpga_up_result()==DISPALY_RFAGC_ERR_POWER_HIGH)){ // "0123456789012345678901234567890123456789" lcd_write_string(LINE_1,0," "); lcd_write_string(LINE_1,0," RFAGC failed - Power high! [5] "); lcd_write_string(LINE_2,0," "); } else{ enter_menu(0); } light_on(); } //" ICNT DCNT FIFO M_SNR M_IMD " static void refresh_ri1(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; S_RI_PARA *ppara = (S_RI_PARA*)para_middle; const PROMPT_POS prompt_pos = {LINE_2,{2,8,14,20,27,34}}; read_ri_para(); disp_common_string(p); sprintf(out_str,"%04X",ppara->i_cnt); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],out_str); //ICNT sprintf(out_str,"%04X",ppara->d_cnt); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); //DCNT sprintf(out_str,"%04X",ppara->fifo); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); //FIFO sprintf(out_str,"%02d",ppara->m_snr); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); sprintf(out_str,"%02d",ppara->m_imd); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); //sprintf(out_str,"%d",ppara->rst_time); //lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); } #if ATSC_USA_AMP //" ID BPS IP GATE MASK" //" ID BPS IP GATEWAY MASK " //" ID BPS IP GATEWAY MASK UPGRADE " static void refresh_pa_config(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{1,7,17}}; disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); } //IP:" ___ ___ ___ ___ " static void refresh_pa_ip(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%03d.%03d.%03d.%03d",ppara->ip[0],ppara->ip[1],ppara->ip[2],ppara->ip[3]); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); } //GATE:" ___ ___ ___ ___ ", static void refresh_pa_gate(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%03d.%03d.%03d.%03d",ppara->gateway[0],ppara->gateway[1],ppara->gateway[2],ppara->gateway[3]); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); } //MASK:" ___ ___ ___ ___ ", static void refresh_pa_mask(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%03d.%03d.%03d.%03d",ppara->mask[0],ppara->mask[1],ppara->mask[2],ppara->mask[3]); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); } #endif #if USE_PSTS void psts_para_clear(S_PSTS_PARA *ppara) { uint32 i = 0; ppara->tsid = 0; ppara->ts_ctrl = PSTS_CTRL_DISABLE; ppara->channel_max = 0; ppara->index = 0xff; for(i=0;isip_para[i].sht_name[0] = '0'; ppara->sip_para[i].sht_name[1] = '0'; ppara->sip_para[i].sht_name[2] = '0'; ppara->sip_para[i].sht_name[3] = '0'; ppara->sip_para[i].sht_name[4] = '0'; ppara->sip_para[i].sht_name[5] = '0'; ppara->sip_para[i].sht_name[6] = 0; ppara->sip_para[i].sht_name[7] = 0; } } void psts_para_update(S_PSTS_PARA *ppara) { uint32 i=0; uint8 addr=0; uint32 num = 0; if(ppara->ts_ctrl==PSTS_CTRL_ENABLE) { return; } ppara->tsid=fpga_byte_read(0x02,0xf8); ppara->tsid=(ppara->tsid<<8) | fpga_byte_read(0x02,0xf9); ppara->channel_max=fpga_byte_read(0x02,0xfa); #if TEST_PSTS ppara->tsid =66; ppara->channel_max = 2; #endif // 0 ~ 13 // if(ppara->channel_max>PSIP_MAX_CHANNLE_NUM) { ppara->channel_max = PSIP_MAX_CHANNLE_NUM; } //if(0 == ppara->channel_max) //{ // ppara->index = 0; // return; //} //更新全部信息 for(num=0;numchannel_max;num++) { addr=num*19; for(i=0; isip_para[num].sht_name[i]=fpga_byte_read(0x02,0x02*i+2+addr);; } if((ppara->sip_para[num].sht_name[0]<32) || (ppara->sip_para[num].sht_name[0]>132)) { for(i=0; isip_para[num].sht_name[i]=' '; } } ppara->sip_para[num].maj_num = fpga_byte_read(0x02,0x0f+addr); ppara->sip_para[num].maj_num = (((ppara->sip_para[num].maj_num)&0x0f)<<6) | (fpga_byte_read(0x02,0x10+addr)>>2); ppara->sip_para[num].min_num = fpga_byte_read(0x02,0x10+addr)&0x3; ppara->sip_para[num].min_num = fpga_byte_read(0x02,0x11+addr) | (ppara->sip_para[num].min_num<<8); ppara->sip_para[num].channel_num = fpga_byte_read(0x02,0x12+addr); ppara->sip_para[num].channel_num = (ppara->sip_para[num].channel_num<<8) | fpga_byte_read(0x02,0x13+addr); } if(ppara->local_update_flag) { ppara->local_update_flag--; if(ppara->local_update_flag == 0) { #if TEST_PSTS ppara->sip_para[0].maj_num = 1; ppara->sip_para[0].min_num = 2; ppara->sip_para[0].channel_num = 3; ppara->sip_para[0].sht_name[0]= 'a'; ppara->sip_para[0].sht_name[1]= 's'; ppara->sip_para[1].maj_num = 4; ppara->sip_para[1].min_num = 5; ppara->sip_para[1].channel_num = 6; ppara->sip_para[1].sht_name[0]= 'd'; ppara->sip_para[1].sht_name[1]= 'f'; #endif //若当前系统输入异常,则置个默认值 if((atsc_para.log_para.input_ok_flag==0)&&(ppara->channel_max==0)) { ppara->channel_max = 1; ppara->tsid = 0; memset(ppara->sip_para,0,sizeof(ppara->sip_para)); ppara->sip_para[0].channel_num = 1; ppara->sip_para[0].maj_num = 2; ppara->sip_para[0].min_num = 3; ppara->sip_para[0].sht_name[0]= 'A'; ppara->sip_para[0].sht_name[1]= 'W'; ppara->sip_para[0].sht_name[2]= ' '; } ppara->local_update_flag = 0; c256_bytewrite(EEPROM_PSTS_UP_FLAG,atsc_para.psts_para.local_update_flag); e2rom_save_psts(&atsc_para.psts_para); } } #if TEST_PSTS ppara->sip_para[0].maj_num = 1; ppara->sip_para[0].min_num = 2; ppara->sip_para[0].channel_num = 3; ppara->sip_para[0].sht_name[0]= 'a'; ppara->sip_para[0].sht_name[1]= 's'; ppara->sip_para[1].maj_num = 4; ppara->sip_para[1].min_num = 5; ppara->sip_para[1].channel_num = 6; ppara->sip_para[1].sht_name[0]= 'd'; ppara->sip_para[1].sht_name[1]= 'f'; #endif } static BOOL proc_key_psts_sht(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); if(p->item_index) { PSTS_CTRL(); JUDGE_PSIP_KEY(); } switch(p->item_index) { case 0: ppara->index++; if(ppara->index>=ppara->channel_max) { ppara->index = 0; } break; case 1: ppara->sip_para[ppara->index].sht_name[0]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[0]); break; case 2: ppara->sip_para[ppara->index].sht_name[1]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[1]); break; case 3: ppara->sip_para[ppara->index].sht_name[2]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[2]); break; case 4: ppara->sip_para[ppara->index].sht_name[3]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[3]); break; case 5: ppara->sip_para[ppara->index].sht_name[4]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[4]); break; case 6: ppara->sip_para[ppara->index].sht_name[5]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[5]); break; case 7: ppara->sip_para[ppara->index].sht_name[6]++; psts_name_add_judge(&ppara->sip_para[ppara->index].sht_name[6]); break; case 8: ppara->sip_para[ppara->index].maj_num+=10; if(ppara->sip_para[ppara->index].maj_num>99) ppara->sip_para[ppara->index].maj_num=0; break; case 9: ppara->sip_para[ppara->index].maj_num++; if(ppara->sip_para[ppara->index].maj_num>99) ppara->sip_para[ppara->index].maj_num=0; break; case 10: ppara->sip_para[ppara->index].min_num+=100; if(ppara->sip_para[ppara->index].min_num>999) ppara->sip_para[ppara->index].min_num=0; break; case 11: ppara->sip_para[ppara->index].min_num+=10; if(ppara->sip_para[ppara->index].min_num>999) ppara->sip_para[ppara->index].min_num=0; break; case 12: ppara->sip_para[ppara->index].min_num++; if(ppara->sip_para[ppara->index].min_num>999) ppara->sip_para[ppara->index].min_num=0; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); if(p->item_index) { PSTS_CTRL(); JUDGE_PSIP_KEY(); } switch(p->item_index) { case 0: if(ppara->index) { ppara->index--; } else { ppara->index=ppara->channel_max-1; } break; case 1: ppara->sip_para[ppara->index].sht_name[0]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[0]); break; case 2: ppara->sip_para[ppara->index].sht_name[1]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[1]); break; case 3: ppara->sip_para[ppara->index].sht_name[2]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[2]); break; case 4: ppara->sip_para[ppara->index].sht_name[3]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[3]); break; case 5: ppara->sip_para[ppara->index].sht_name[4]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[4]); break; case 6: ppara->sip_para[ppara->index].sht_name[5]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[5]); break; case 7: ppara->sip_para[ppara->index].sht_name[6]--; psts_name_dec_judge(&ppara->sip_para[ppara->index].sht_name[6]); break; case 8: if(ppara->sip_para[ppara->index].maj_num>10) ppara->sip_para[ppara->index].maj_num-=10; else ppara->sip_para[ppara->index].maj_num+=90; break; case 9: if(ppara->sip_para[ppara->index].maj_num>0) ppara->sip_para[ppara->index].maj_num--; else ppara->sip_para[ppara->index].maj_num=99; break; case 10: if(ppara->sip_para[ppara->index].min_num>100) ppara->sip_para[ppara->index].min_num-=100; else ppara->sip_para[ppara->index].min_num+=900; break; case 11: if(ppara->sip_para[ppara->index].min_num>10) ppara->sip_para[ppara->index].min_num-=10; else ppara->sip_para[ppara->index].min_num+=90; break; case 12: if(ppara->sip_para[ppara->index].min_num>0) ppara->sip_para[ppara->index].min_num--; else ppara->sip_para[ppara->index].min_num=999; break; } need_refresh = TRUE; break; case KEY_ENTER: PSTS_CTRL(); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_psts_ctrl(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_PSIP_KEY(); switch(p->item_index) { case 0: if(ppara->ts_ctrlts_ctrl++; else ppara->ts_ctrl=0; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_PSIP_KEY(); switch(p->item_index) { case 0: if(ppara->ts_ctrl) ppara->ts_ctrl--; else ppara->ts_ctrl=PSTS_CTRL_CLEAR; break; } need_refresh = TRUE; break; case KEY_ENTER: p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_psts_id(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); PSTS_CTRL(); switch(p->item_index) { case 0: ppara->tsid+=10000; break; case 1: ppara->tsid+=1000; break; case 2: ppara->tsid+=100; break; case 3: ppara->tsid+=10; break; case 4: ppara->tsid+=1; break; /* case 5: if(ppara->ts_ctrl==PSTS_CTRL_ENABLE) { if(ppara->channel_maxchannel_max++; } else { ppara->channel_max = 1; } } break; */ } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); PSTS_CTRL(); switch(p->item_index) { case 0: ppara->tsid-=10000; break; case 1: ppara->tsid-=1000; break; case 2: ppara->tsid-=100; break; case 3: ppara->tsid-=10; break; case 4: ppara->tsid-=1; break; /* case 5: if(ppara->ts_ctrl==PSTS_CTRL_ENABLE) { if(ppara->channel_max>1) { ppara->channel_max--; } else { ppara->channel_max = PSIP_MAX_CHANNLE_NUM; } } break; */ } need_refresh = TRUE; break; case KEY_ENTER: PSTS_CTRL(); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_psts_menu(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } void save_psts_para(void *psave) { S_PSTS_PARA *ppara = (S_PSTS_PARA *)psave; log_printf(LOG_DEBUG,I_NOUSED,"1store ts_id=%d\n",ppara->tsid); log_printf(LOG_DEBUG,I_NOUSED,"1store sht_name=%s\n",ppara->sip_para[0].sht_name); log_printf(LOG_DEBUG,I_NOUSED,"1store sht_namelst=%s\n",ppara->sip_para[12].sht_name); if(ppara->ts_ctrl==PSTS_CTRL_CLEAR) { //1.强行置为disable, 2.从FPGA更新PSIP信息 ppara->local_update_flag = 2; psts_para_clear(ppara); c256_bytewrite(EEPROM_PSTS_UP_FLAG,ppara->local_update_flag); e2rom_save_psts(ppara); fpga_save_psts(ppara); memcpy(&atsc_para.psts_para,ppara,sizeof(atsc_para.psts_para)); return; } if(atsc_para.sn_para.psip_key_valid == FALSE){ return; } //功能打开,要从本地E2PROM更新数据 if((ppara->ts_ctrl!=atsc_para.psts_para.ts_ctrl)&&(ppara->ts_ctrl==PSTS_CTRL_ENABLE)) { ppara->local_update_flag = 0; ppara->ts_ctrl = PSTS_CTRL_ENABLE; ppara->index = 0; atsc_para.psts_para.ts_ctrl = PSTS_CTRL_ENABLE; e2rom_read_psts(ppara); //从E2PROM读取数据 ppara->ts_ctrl = PSTS_CTRL_ENABLE; c256_bytewrite(EEPROM_PSTS_TS_EDIT,ppara->ts_ctrl); fpga_save_psts(ppara); memcpy(&atsc_para.psts_para,ppara,sizeof(atsc_para.psts_para)); return; } e2rom_save_psts(ppara); fpga_save_psts(ppara); memcpy(&atsc_para.psts_para,ppara,sizeof(atsc_para.psts_para)); log_printf(LOG_DEBUG,I_NOUSED,"2store sht_name=%s\n",atsc_para.psts_para.sip_para[0].sht_name); log_printf(LOG_DEBUG,I_NOUSED,"2store sht_namelst=%s\n",atsc_para.psts_para.sip_para[12].sht_name); log_printf(LOG_DEBUG,I_NOUSED,"2store ts_id=%d\n",atsc_para.psts_para.tsid); } static void refresh_psts_menu(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{1,8,15}}; disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); } static void read_psts_para(void) { PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; memcpy(ppara,&atsc_para.psts_para,sizeof(atsc_para.psts_para)); ppara->index = 0; } void psts_name_check_null(S_PSIP_PARA *ppara) { uint32 len = 0; uint32 j=0; for(j=0;jsht_name[j]!=0) { len = j; //找到最后一个非0字符 } } if(len) { for(j=0;jsht_name[j]==0) { ppara->sht_name[j] = ' '; } } } } //" Chanel Sht_Name Maj_Num Min_Num " static void refresh_psts_sht(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{1,10,11,12,13,14,15,16,20,21,30,31,32}}; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(atsc_para.psts_para.channel_max != ppara->channel_max){ ppara->channel_max = atsc_para.psts_para.channel_max; } if(0 != memcmp(ppara->sip_para, atsc_para.psts_para.sip_para, PSIP_MAX_CHANNLE_NUM*sizeof(S_PSIP_PARA))){ memcpy(ppara->sip_para, atsc_para.psts_para.sip_para, PSIP_MAX_CHANNLE_NUM*sizeof(S_PSIP_PARA)); } } if(ppara->channel_max) { sprintf(out_str,"%0d",ppara->sip_para[ppara->index].channel_num); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); psts_name_check_null(&ppara->sip_para[ppara->index]); //防止用户直接跳过更改,如WE 直接改为WE EW 由于第三个字符原先为0,此处%c也为0,液晶屏上将不显示后面的EW sprintf(out_str,"%c%c%c%c%c%c%c",ppara->sip_para[ppara->index].sht_name[0], ppara->sip_para[ppara->index].sht_name[1],ppara->sip_para[ppara->index].sht_name[2],ppara->sip_para[ppara->index].sht_name[3], ppara->sip_para[ppara->index].sht_name[4],ppara->sip_para[ppara->index].sht_name[5],ppara->sip_para[ppara->index].sht_name[6]); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); sprintf(out_str,"%02d",ppara->sip_para[ppara->index].maj_num); lcd_write_string(LINE_2,prompt_pos.pos[8],out_str); sprintf(out_str,"%03d",ppara->sip_para[ppara->index].min_num); lcd_write_string(LINE_2,prompt_pos.pos[10],out_str); } else { lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"NULL"); lcd_write_string(LINE_2,prompt_pos.pos[1],"NULL"); lcd_write_string(LINE_2,prompt_pos.pos[8],"NULL"); lcd_write_string(LINE_2,prompt_pos.pos[10],"NULL"); } } static void refresh_psts_ctrl(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{3}}; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(atsc_para.psts_para.ts_ctrl != ppara->ts_ctrl){ ppara->ts_ctrl = atsc_para.psts_para.ts_ctrl; } } switch(ppara->ts_ctrl) { case PSTS_CTRL_DISABLE: lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"DISABLE"); break; case PSTS_CTRL_ENABLE: lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"ENABLE"); break; case PSTS_CTRL_CLEAR: lcd_write_string(LINE_2,prompt_pos.pos[0]+1,"CLEAR"); break; } } //" TSID Channle_Num " static void refresh_psts_id(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{4,5,6,7,8,12}}; PS_PSTS_PARA ppara = (PS_PSTS_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(atsc_para.psts_para.tsid != ppara->tsid){ ppara->tsid = atsc_para.psts_para.tsid; } if(atsc_para.psts_para.channel_max != ppara->channel_max){ ppara->channel_max = atsc_para.psts_para.channel_max; } } if(ppara->ts_ctrl==PSTS_CTRL_DISABLE) { if(atsc_para.log_para.input_ok_flag) { sprintf(out_str,"%05d",ppara->tsid); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); sprintf(out_str,"%02d",ppara->channel_max); lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); } else { lcd_write_string(LINE_2,prompt_pos.pos[0],"NULL"); lcd_write_string(LINE_2,prompt_pos.pos[5],"NULL"); } } else { sprintf(out_str,"%05d",ppara->tsid); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); sprintf(out_str,"%02d",ppara->channel_max); lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); } } #endif //" ID BPS IP GATEWAY MASK UPGRADE " //" ID BPS IP GATEWAY MASK " void refresh_config(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; //const PROMPT_POS prompt_pos = {LINE_2,{0,4,9,13,23,31}}; const PROMPT_POS prompt_pos = {LINE_2,{0,4,9,13,23}}; disp_common_string(pmenu); lcd_write_string(prompt_pos.line,prompt_pos.pos[pmenu->item_index],PROMPT_CHAR); } //" ID: " void refresh_id(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{4,5}}; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%02XH",ppara->id); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); } //" BPS: " void refresh_bps(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{0,5}}; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); switch(ppara->bps) { case 0: sprintf(out_str,"9600bps"); break; case 1: sprintf(out_str,"19200bps"); break; case 2: sprintf(out_str,"38400bps"); break; default: sprintf(out_str,"38400bps"); break; } lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); } //液晶上显示IP地址类数据 void lcd_show_ip_struct_data(uint8 address[4],uint8 line,uint8 pos) { sprintf(out_str,"%03d.%03d.%03d.%03d",address[0],address[1],address[2],address[3]); lcd_write_string(line,pos,out_str); } //IP:" ___ ___ ___ ___ " void refresh_ip(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->ip, atsc_para.config_para.ip, 4)){ memcpy(ppara->ip, atsc_para.config_para.ip, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->ip,LINE_2,prompt_pos.pos[0]); } //GATE:" ___ ___ ___ ___ ", void refresh_gate(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->gateway, atsc_para.config_para.gateway, 4)){ memcpy(ppara->gateway, atsc_para.config_para.gateway, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->gateway,LINE_2,prompt_pos.pos[0]); } //MASK:" ___ ___ ___ ___ ", void refresh_mask(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->mask, atsc_para.config_para.mask, 4)){ memcpy(ppara->mask, atsc_para.config_para.mask, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->mask,LINE_2,prompt_pos.pos[0]); } //"0123456789012345678901234567890123456789" //" RA WB*WC*WD WE*WF RG*WH RI WJ WK WL WM " // RA WB WC WE RG RI WJ WK WL WM static void refresh_fac1(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; #if ADDR_CONFLICT_DISABLED //const PROMPT_POS prompt_pos = {LINE_2,{0,3,6, 12, 18 ,24,27,30,33,36}}; const PROMPT_POS prompt_pos = {LINE_2,{0,3,6,9,12,15,18,21,24,27,30,33,36}}; #else const PROMPT_POS prompt_pos = {LINE_2,{0,3,6,9,12,15,18,21,24,27,30,33,36}}; #endif disp_common_string(p); lcd_write_string(prompt_pos.line,prompt_pos.pos[p->item_index],PROMPT_CHAR); } //" ENUM STA FAGC PHA DAGC IQDC PERR " static void refresh_ra1(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; PS_RA_PARA ppara = (PS_RA_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_2,{1,8,14,20,25,30,35}}; read_ra_para(); disp_common_string(p); sprintf(out_str,"%04X",ppara->ra_enum); lcd_write_string(prompt_pos.line,prompt_pos.pos[0],out_str); //ENUM sprintf(out_str,"%02X",ppara->sta); lcd_write_string(prompt_pos.line,prompt_pos.pos[1],out_str); //sta sprintf(out_str,"%04X",ppara->fagc); lcd_write_string(prompt_pos.line,prompt_pos.pos[2],out_str); //fagc sprintf(out_str,"%04X",ppara->pha); lcd_write_string(prompt_pos.line,prompt_pos.pos[3],out_str); //pha sprintf(out_str,"%04X",ppara->dagc); lcd_write_string(prompt_pos.line,prompt_pos.pos[4],out_str); //dagc sprintf(out_str,"%04X",ppara->iqdc); lcd_write_string(prompt_pos.line,prompt_pos.pos[5],out_str); //iqdc sprintf(out_str,"%04X",ppara->perr); lcd_write_string(prompt_pos.line,prompt_pos.pos[6],out_str); //peer } //" B0 B1 B2 HZ P0 B8 GPSC CFR RST GPSW" static void refresh_wb1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_WB_PARA ppara = (PS_WB_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{0,4,8,9,11,12,13,14,15,18,22,23,24,25,26,31,36}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->b0) sprintf(out_str,"ON"); else sprintf(out_str,"OFF"); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); switch(ppara->b1) //CTRL Function switch { case 0: sprintf(out_str,"OFF"); break; case 1: sprintf(out_str,"ON"); break; case 2: sprintf(out_str,"KBD"); break; default: sprintf(out_str,"Unknow");break; } lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02X",ppara->b2); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); sprintf(out_str,"%04X",ppara->hz); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); sprintf(out_str,"%02X",ppara->p0); lcd_write_string(LINE_2,prompt_pos.pos[8]+1,out_str); //sprintf(out_str,"%02X",ppara->b8); //lcd_write_string(LINE_2,prompt_pos.pos[9]+1,out_str); sprintf(out_str,"%04X",ppara->gpsc); lcd_write_string(LINE_2,prompt_pos.pos[10],out_str); //sprintf(out_str,"%02X",ppara->cfr); //lcd_write_string(LINE_2,prompt_pos.pos[14]+1,out_str); switch(ppara->rst) { case 0: default: sprintf(out_str,"NO"); break; case 1: sprintf(out_str,"FAC"); break; case 2: sprintf(out_str,"IQ"); break; #if USE_LOG_MODULE case 3: sprintf(out_str,"LOG"); break; #endif } lcd_write_string(LINE_2,prompt_pos.pos[16]+1,out_str); switch(ppara->alarm) { case 0: default: sprintf(out_str,"NO"); break; case 1: sprintf(out_str,"UART"); break; case 2: sprintf(out_str,"ETH"); break; case 3: sprintf(out_str,"ALL"); break; } lcd_write_string(LINE_2,prompt_pos.pos[15]+1,out_str); } //" GL DPDCTL " //"0123456789012345678901234567890123456789" //"FFFF FF" static void refresh_wc1(void *parg,void *parv) { #if ADDR_CONFLICT_DISABLED // " GL " PMENU_S pmenu = (PMENU_S)parg; PS_DPD_PARA ppara = (PS_DPD_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1, { 0,1,2,3, 6,7}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos, pmenu); sprintf(out_str, "%04X", ppara->gl); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); sprintf(out_str, "%02X", ppara->dpd_ctl); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); lcd_write_prompt(&prompt_pos,pmenu); #else PMENU_S pmenu = (PMENU_S)parg; PS_WC_PARA ppara = (PS_WC_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{0,5,8,11,15,20,23,27,31,35}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%02X",ppara->crg); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); #if DEBUG_ERR_CHECK if(ppara->pr%2) sprintf(out_str,"%s","SF"); //改本身参数 else sprintf(out_str,"%s","BA"); //改备份参数 #else sprintf(out_str,"%X",ppara->pr&0x0f); #endif lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02X",ppara->ch); lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); sprintf(out_str,"%02X",ppara->cl); lcd_write_string(LINE_2,prompt_pos.pos[3]+1,out_str); sprintf(out_str,"%02X",ppara->dh); lcd_write_string(LINE_2,prompt_pos.pos[4]+1,out_str); sprintf(out_str,"%02X",ppara->dl); lcd_write_string(LINE_2,prompt_pos.pos[5]+1,out_str); sprintf(out_str,"%02X",ppara->til); lcd_write_string(LINE_2,prompt_pos.pos[6]+1,out_str); sprintf(out_str,"%02X",ppara->tfl); lcd_write_string(LINE_2,prompt_pos.pos[7]+1,out_str); sprintf(out_str,"%02X",ppara->tls); lcd_write_string(LINE_2,prompt_pos.pos[8]+1,out_str); sprintf(out_str,"%02X",ppara->pg); lcd_write_string(LINE_2,prompt_pos.pos[9]+1,out_str); #endif } //" TWK PFG PDG FEG DEG LCT SA SB SC SD" //" TWK PFG PDG FEG DEG LCT +21 +11 +12 +12" //"0123456789012345678901234567890123456789" //" CFR CLIP " //" OFF FFFF" //"0123456789012345678901234567890123456789" //" CFR CLIP SA SB SC " //" OFF FFFF +11 +23 +12 " static void refresh_wd1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; S_WD_PARA *ppara = (S_WD_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{1, 5,6,7,8, 10, 14, 18}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->cfr_work==1) lcd_write_string(LINE_2,prompt_pos.pos[0],"ON"); else lcd_write_string(LINE_2,prompt_pos.pos[0],"OFF"); sprintf(out_str,"%04X",ppara->cfr_clip); lcd_write_string(1,prompt_pos.pos[1],out_str); if(ppara->sa>=0) { sprintf(out_str,"+%02d",ppara->sa); } else { sprintf(out_str,"-%02d",ppara->sa*-1); } lcd_write_string(LINE_2, prompt_pos.pos[5],out_str); if(ppara->sb >= 0){ sprintf(out_str,"+%02d",ppara->sb); } else { sprintf(out_str,"-%02d",-1*ppara->sb); } lcd_write_string(LINE_2, prompt_pos.pos[6],out_str); if(ppara->sc >= 0) { sprintf(out_str,"+%02d",ppara->sc); } else { sprintf(out_str,"-%02d",-1*ppara->sc); } lcd_write_string(LINE_2, prompt_pos.pos[7],out_str); /*PMENU_S pmenu = (PMENU_S)parg; PS_WD_PARA ppara = (PS_WD_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{0,4,8,12,16,20,25,29,33,37}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->twk) sprintf(out_str,"1"); else sprintf(out_str,"0"); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); sprintf(out_str,"%02X",ppara->pfg); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02X",ppara->pdg); lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); sprintf(out_str,"%02X",ppara->feg); lcd_write_string(LINE_2,prompt_pos.pos[3]+1,out_str); sprintf(out_str,"%02X",ppara->deg); lcd_write_string(LINE_2,prompt_pos.pos[4]+1,out_str); sprintf(out_str,"%02X",ppara->lct); lcd_write_string(LINE_2,prompt_pos.pos[5]+1,out_str); #if USE_SNR_ADJ if(ppara->sa>=0) { sprintf(out_str,"+%02d",ppara->sa); } else { sprintf(out_str,"%02d",ppara->sa); } lcd_write_string(LINE_2,prompt_pos.pos[6],out_str); if(ppara->sb>=0) { sprintf(out_str,"+%02d",ppara->sb); } else { sprintf(out_str,"%02d",ppara->sb); } lcd_write_string(LINE_2,prompt_pos.pos[7],out_str); if(ppara->sc>=0) { sprintf(out_str,"+%02d",ppara->sc); } else { sprintf(out_str,"%02d",ppara->sc); } lcd_write_string(LINE_2,prompt_pos.pos[8],out_str); if(ppara->sd>=0) { sprintf(out_str,"+%02d",ppara->sd); } else { sprintf(out_str,"%02d",ppara->sd); } lcd_write_string(LINE_2,prompt_pos.pos[9],out_str); #else sprintf(out_str,"%02X",ppara->sa); lcd_write_string(LINE_2,prompt_pos.pos[6]+1,out_str); sprintf(out_str,"%02X",ppara->sb); lcd_write_string(LINE_2,prompt_pos.pos[7]+1,out_str); sprintf(out_str,"%02X",ppara->sc); lcd_write_string(LINE_2,prompt_pos.pos[8]+1,out_str); sprintf(out_str,"%02X",ppara->sd); lcd_write_string(LINE_2,prompt_pos.pos[9]+1,out_str); #endif*/ } static void update_we_para(void) { PS_WE_PARA ppara = (PS_WE_PARA)para_middle; e2rom_read_leak(ppara->ch,ppara); } //" CH POWER LTN DSC SNC DPG_____ FSC SPC" static void refresh_we1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PS_WE_PARA ppara = (PS_WE_PARA)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{1,6,12,16,20,24,25,27,28,30,31,33,34,37}}; BOOL positive; uint16 temp; const uint8 dis_sp[] = {0,1,3,4,0x0c}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%3d",txfreq_to_hz(ppara->ch)); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); if(ppara->power>=WE_POWER_ZERO) //-15dB~0dB~+10dB 0~300~500 { positive = TRUE; temp = ppara->power-WE_POWER_ZERO; } else { positive = FALSE; temp = WE_POWER_ZERO-ppara->power; } if(positive) sprintf(out_str,"+%d.%02d",temp/20,(temp%20)*5); else sprintf(out_str,"-%d.%02d",temp/20,(temp%20)*5); lcd_write_string(LINE_2,prompt_pos.pos[1]-1,out_str); sprintf(out_str,"%X",ppara->ltn); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); sprintf(out_str,"%X",ppara->dsc); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); sprintf(out_str,"%X",ppara->snc); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); sprintf(out_str,"%02X",ppara->dpgh); lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); sprintf(out_str,"%02X",ppara->dpgm); lcd_write_string(LINE_2,prompt_pos.pos[7],out_str); sprintf(out_str,"%02X",ppara->dpgl); lcd_write_string(LINE_2,prompt_pos.pos[9],out_str); //sprintf(out_str,"%02X",ppara->fsc); //lcd_write_string(LINE_2,prompt_pos.pos[11],out_str); sprintf(out_str,"%d",dis_sp[ppara->sp] ); lcd_write_string(LINE_2,prompt_pos.pos[13],out_str); } //" PDT SP EQUC L N M AH AL AGC " static void refresh_wf1(void *parg,void *parv) { #if ADDR_CONFLICT_DISABLED PMENU_S pmenu = (PMENU_S)parg; S_WF_PARA *ppara = (S_WF_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{0}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); // sprintf(out_str,"coming soon..."); // lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); #else PMENU_S pmenu = (PMENU_S)parg; S_WF_PARA *ppara = (S_WF_PARA *)para_middle; #if USE_ADPC_LONG const PROMPT_POS prompt_pos = {LINE_1,{1,2,5,10,11,12,13,16,18,20,24,25,28,29,31,35,38,39 }}; #else const PROMPT_POS prompt_pos = {LINE_1,{1,2,5,12,13,14,15,18,20,22,26,27,30,31,33,37}}; #endif disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%02X",ppara->pdt); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); switch(ppara->sp) { case 0: default: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"OFF"); break ; case 1: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"1/2"); break ; case 2: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"OFF"); break ; case 3: lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"1/4"); break ; } sprintf(out_str,"%04X",ppara->equc); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); if(ppara->l) lcd_write_string(LINE_2,prompt_pos.pos[7]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[7]+1,"0"); if(ppara->n) lcd_write_string(LINE_2,prompt_pos.pos[8]+1,"1"); else lcd_write_string(LINE_2,prompt_pos.pos[8]+1,"0"); sprintf(out_str,"%X",ppara->m); lcd_write_string(LINE_2,prompt_pos.pos[9]+1,out_str); sprintf(out_str,"%02X",ppara->ah); lcd_write_string(LINE_2,prompt_pos.pos[10],out_str); sprintf(out_str,"%02X",ppara->al); lcd_write_string(LINE_2,prompt_pos.pos[12],out_str); lcd_write_string(LINE_2,prompt_pos.pos[14]+1,(uint8*)switch_on_off[ppara->agc&1]); sprintf(out_str,"%d",ppara->g&1); lcd_write_string(LINE_2,prompt_pos.pos[15]+1,out_str); #if USE_ADPC_LONG sprintf(out_str,"%02X",ppara->th); lcd_write_string(LINE_2,prompt_pos.pos[16] ,out_str); #endif #endif } static void refresh_rg1(void *parg,void *parv) { PMENU_S p = (PMENU_S)parg; S_RG_PARA *ppara = (S_RG_PARA *)para_middle; disp_common_string(p); lcd_write_arrow(LINE_1,LINE_MAX_NUM-1,ARROW_RIGHT); lcd_write_string(LINE_1,5,ppara->attr); #if USE_DRY_LOOP lcd_write_string(LINE_2,28,ppara->dryloop); #endif lcd_write_string(LINE_1,25,ppara->fpga); //lcd_write_string(LINE_2,4,ppara->mcu); lcd_write_string(LINE_2,4,release_ver); } //" GMT P_C RF_DLY MODE S I S2 I2" //" GMT P_C RF_DLY MODE PIC " //全波版本 //"0123456789012345678901234567890123456789" //" GMT P_C RF_DLY MODE PIC CTLDPD " // disable 00 //" GMT P_C RF_DLY MODE PIC CTLDPD P10" // disable 00 00 static void refresh_wj1(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; S_WJ_PARA *ppara = (S_WJ_PARA *)para_middle; #if DEBUG_AUTO_ADPC const PROMPT_POS prompt_pos = {LINE_1,{0,4,8,16,29,31,34,37}}; #else #if AW_ATSC_5X const PROMPT_POS prompt_pos = {LINE_1,{0,4,8,16,22, 32,33, 38,39}}; #else const PROMPT_POS prompt_pos = {LINE_1,{0,4,8,16}}; #endif #endif disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->gmt>=0) sprintf(out_str,"+%d",ppara->gmt); else sprintf(out_str,"%d",ppara->gmt); lcd_write_string(LINE_2,prompt_pos.pos[0]+1,out_str); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,(uint8 *)switch_on_off[ppara->p_c&1]); sprintf(out_str,"%d",ppara->rf_dly); lcd_write_string(LINE_2,prompt_pos.pos[2]+1,out_str); switch(ppara->mode) { case 0:default: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"0"); break; case 1: lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"1"); break; } #if AW_ATSC_5X if(ppara->picture) { lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"Enable"); } else { lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"Disable"); } #endif #if DEBUG_AUTO_ADPC sprintf(out_str,"%d",ppara->snr); lcd_write_string(LINE_2,prompt_pos.pos[4]+1,out_str); sprintf(out_str,"%d",ppara->imd); lcd_write_string(LINE_2,prompt_pos.pos[5]+1,out_str); sprintf(out_str,"%d",ppara->snr2); lcd_write_string(LINE_2,prompt_pos.pos[6]+1,out_str); sprintf(out_str,"%d",ppara->imd2); lcd_write_string(LINE_2,prompt_pos.pos[7]+1,out_str); #endif //CTLDPD sprintf(out_str,"%02X",ppara->ctl_dpd); lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); //ph10_time sprintf(out_str,"%02d",ppara->ph10_time); lcd_write_string(LINE_2,prompt_pos.pos[7],out_str); } //" PD BW RALH RALL BALH BALL RWRT FUNC " //"0123456789012345678901234567890123456789" //"CHIP BALH BALL TEMP " //"CHIP BALH BALL C " static void refresh_wh1(void *parg,void *parv) { #if ADDR_CONFLICT_DISABLED // "CHIP BALH BALL " PMENU_S pmenu = (PMENU_S)parg; S_WH_PARA *ppara = (S_WH_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1, {0, 5,6, 10, 15}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); // CHIP - 1655/4821 if(ppara->chip==0){ lcd_write_string(LINE_2,prompt_pos.pos[0], "1655"); } else { lcd_write_string(LINE_2,prompt_pos.pos[0], "4821"); } // BALL - XXXX sprintf(out_str,"%02X",ppara->balh); lcd_write_string(LINE_2,prompt_pos.pos[1],out_str); sprintf(out_str,"%02X",ppara->ball); lcd_write_string(LINE_2,prompt_pos.pos[3],out_str); if(ppara->temp_unit==1){ lcd_write_string(LINE_2,prompt_pos.pos[4]+2, "C"); } else { lcd_write_string(LINE_2,prompt_pos.pos[4]+2, "F"); } #else PMENU_S pmenu = (PMENU_S)parg; S_WH_PARA *ppara = (S_WH_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1, {0,3,8,9, 13,14, 18,19, 22,23, 28,29,31,36 }}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_write_string(LINE_2,prompt_pos.pos[0],(uint8*)switch_on_off[ppara->pd&1]); sprintf(out_str,"%X",ppara->bw&0x0f); lcd_write_string(LINE_2,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02X",ppara->ralh); lcd_write_string(LINE_2,prompt_pos.pos[2],out_str); sprintf(out_str,"%02X",ppara->rall); lcd_write_string(LINE_2,prompt_pos.pos[4],out_str); sprintf(out_str,"%02X",ppara->balh); lcd_write_string(LINE_2,prompt_pos.pos[6],out_str); sprintf(out_str,"%02X",ppara->ball); lcd_write_string(LINE_2,prompt_pos.pos[8],out_str); sprintf(out_str,"%02X",ppara->pwrt); lcd_write_string(LINE_2,prompt_pos.pos[10],out_str); #if USE_DRY_LOOP if(ppara->func == 0) lcd_write_string(LINE_2,prompt_pos.pos[12]+2,"TX"); else lcd_write_string(LINE_2,prompt_pos.pos[12]+2,"EX"); #endif #if ATSC_USA_AMP if(ppara->pac) lcd_write_string(LINE_2,prompt_pos.pos[13]+1,"RF"); else lcd_write_string(LINE_2,prompt_pos.pos[13]+1,"DC"); #endif #endif } //" ALARM_IP SS MAC " //" 192.168.001.100 static void refresh_wk(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; S_WK_PARA *ppara = (S_WK_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{1,2,3,5,6,7,9,10,11,13,14,15,17}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%03d.%03d.%03d.%03d",ppara->alarm_ip[0],ppara->alarm_ip[1],ppara->alarm_ip[2],ppara->alarm_ip[3]); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); #if ERR_TO_LCM sprintf(out_str,"%d",ppara->ss); lcd_write_string(LINE_2,prompt_pos.pos[12]+1,out_str); #endif sprintf(out_str,"%02X%02X%02X", ppara->mac[0], ppara->mac[1], ppara->mac[2]); lcd_write_string(LINE_2,23,"9440A2"); lcd_write_string(LINE_2,29,out_str); } //" SPE EEBK TS2IP " //" SPE EEBK TS2IP EXC RO SFT " //" SPE EEBK TS2IP 5X+ 1 OFF " //"0123456789012345678901234567890123456789" static void refresh_wl(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; S_WL_PARA *ppara = (S_WL_PARA *)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{2,3,8,15,23,29,32}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%02X",ppara->spe); lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); if(ppara->eebak==2) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"CLR"); else if(ppara->eebak==1) lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"ON"); else lcd_write_string(LINE_2,prompt_pos.pos[2]+1,"OFF"); if(ppara->ip2ts==0) lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"OFF"); else lcd_write_string(LINE_2,prompt_pos.pos[3]+1,"ON"); if(ppara->exc_5x==0) lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"3X+"); else lcd_write_string(LINE_2,prompt_pos.pos[4]+1,"5X+"); //roll_off_sel sprintf(out_str,"%1d",ppara->roll_off_sel); lcd_write_string(LINE_2,prompt_pos.pos[5],out_str); //spec_shift if(ppara->spec_shift==1) lcd_write_string(LINE_2,prompt_pos.pos[6],"OFF"); else lcd_write_string(LINE_2,prompt_pos.pos[6],"ON"); } //"0123456789012345678901234567890123456789" //"DST TST AGCPWR ERRTH CNTTH AMPSAT ST TM " //" 7 1234 65535 65535 255 65535 1 10 " //"DST TST WPPTH ERRTH CNTTH AMPSAT ST TM " //" 7 1234 65535 65535 255 65535 1 10 " static void refresh_dpd_config(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PROMPT_POS prompt_pos = {LINE_1,{1, 3,4,5,6, 8,9,10,11,12, 15,16,17,18,19, 22,23,24, 27,28,29,30,31, 34, 37,38}}; PS_DPD_PARA ppara = (PS_DPD_PARA)para_middle; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%1d",ppara->distortion_sw); lcd_write_string(1,prompt_pos.pos[0],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%04x",ppara->dpd_test); lcd_write_string(1,prompt_pos.pos[1],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%05d",ppara->wpp_th); lcd_write_string(1,prompt_pos.pos[5],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%05d",ppara->err_th); lcd_write_string(1,prompt_pos.pos[10],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%03d",ppara->err_cnt_th); lcd_write_string(1,prompt_pos.pos[15],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%05d",ppara->amp_sat); lcd_write_string(1,prompt_pos.pos[18],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%01d",ppara->dpd_mode); lcd_write_string(1,prompt_pos.pos[23],out_str); memset(out_str,0,sizeof(out_str)); sprintf(out_str,"%02d",ppara->phase6_minute); lcd_write_string(1,prompt_pos.pos[24],out_str); lcd_write_prompt(&prompt_pos,pmenu); } static void refresh_wm(void *parg,void *parv) { refresh_dpd_config(parg,parv); } #define ADPC_DEBUG 0 #if 0 void refresh_update(void *parg,void *parv) { S_SYSTEM_PARA *psys; uint8 U8_temp; uint8 U8_temp38; static uint32 sec = 0; uint8 tsnr = 0,l_imd = 0,u_imd = 0; psys = &atsc_para.system_para; sec ++; while(psys->adpc_step == 0) { (void)check_lcd_light(TYPE_KEY); //确保屏幕不灭 update_flag = 1; psys->adpc_err = 0xff; l_imd = fpga_byte_read(0x1,0x45); u_imd = fpga_byte_read(0x1,0x47); tsnr = fpga_byte_read(0x1,0x46); atsc_para.log_para.l_imd = l_imd; atsc_para.log_para.u_imd = u_imd; atsc_para.log_para.tsnr = tsnr; U8_temp = fpga_byte_read(0x5,0x38); #if ADPC_DEBUG U8_temp = 0; //测试 #endif U8_temp38=U8_temp&0x0f; //低4位 if(U8_temp38==0x0a)//功率变化错误 { psys->adpc = ADPC_OFF; delay_ms(20); fpga_byte_write(0x5,0x31,0x07); c256_bytewrite(EEPROM_DPD_ADDR,ADPC_OFF ); update_flag = 0; dec_auto_adpc_time(); psys->adpc_delay =0; psys->adpc_err= ADPC_STATUS_ERR1; psys->adpc_step = 0x10+ADPC_STATUS_ERR1; light_on_forever(); break; } U8_temp38=U8_temp&0xf0; //高4位 if(U8_temp38==0x50) { delay_ms(20); psys->adpc = ADPC_OFF; fpga_byte_write(0x5,0x31,0x07); c256_bytewrite(EEPROM_DPD_ADDR,ADPC_OFF); update_flag = 0; dec_auto_adpc_time(); psys->adpc_delay =0; psys->adpc_err= ADPC_STATUS_ERR2; psys->adpc_step = 0x10+ADPC_STATUS_ERR2; light_on_forever(); break; } U8_temp = fpga_byte_read(0x05,0x37); #if ADPC_DEBUG U8_temp=0; //测试 #endif #if DBG_ADPC_NO_FEEDBACK_ERR U8_temp = 0; #endif if(U8_temp==0x0a)//报错 TOO SMALL { psys->adpc = ADPC_OFF; fpga_byte_write(0x5,0x31,0x07);//此位置地址与fpga_write_adpc相应位置一致 c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); update_flag = 0; psys->adpc_delay =0; psys->adpc_err= ADPC_STATUS_SMALL; psys->adpc_step = 0x10+ADPC_STATUS_SMALL; light_on_forever(); break; } else if(U8_temp==0x50)//报错 TOO BIG { psys->adpc = ADPC_OFF; fpga_byte_write(0x5,0x31,0x07); psys->adpc = ADPC_OFF; c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); update_flag = 0; psys->adpc_delay =0; psys->adpc_err= ADPC_STATUS_LARGE; psys->adpc_step = 0x10+ADPC_STATUS_LARGE; light_on_forever(); break; } delay_ms(20); /////////////////////////// U8_temp = fpga_byte_read(0x5,0x36); #if ADPC_DEBUG U8_temp=0x5a; //测试 #endif if((U8_temp38!=0x50) &&(U8_temp==0x5a))//校验完成 { delay_ms(20); fpga_byte_write(0x5,0x30,0); #if 0// func no neeed if(udp_adj_auto_adpc != TRUE) adpc_load_data(RW_ADPC_SAVE,psys->adpc); #endif delay_ms(20); if(auto_update==FALSE) { psys->adpc = ADPC_HOLD; c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); atsc_para.ad4_para.adpc = ADPC_HOLD; update_flag = 0; psys->adpc_delay =0; psys->adpc_err= 0; psys->adpc_step = 0x21; } else { switch(psys->adpc) { case ADPC_UPDATE1: case ADPC_UPDATE2: case ADPC_UPDATE3: #if USE_UPDATA5 case ADPC_UPDATE4: #endif psys->adpc++; fpga_write_adpc(psys->adpc); break; default: #if USE_UPDATA5 case ADPC_UPDATE5://ADPC_UPDATE4 #else case ADPC_UPDATE4:// #endif psys->adpc = ADPC_HOLD; c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); psys->adpc_delay =0; psys->adpc_err= 0; psys->adpc_step = 0x21; update_flag = 0; if(( TRUE == auto_update ) &&(s_check_signal.adpc_flag) ) { update_adpc_para_flag.flag=TRUE; update_adpc_para_flag.sec = 60; s_check_signal.adpc_flag = FALSE; } break; } } break; } break; } //////////////////////////////// switch(psys->adpc_step) { case 0: //校正中 switch(sec%3) { case 0: sprintf(out_str, "WAIT A MOMENT(%d). SNR LIMD UIMD ",psys->adpc-ADPC_HOLD); break; case 1: sprintf(out_str, "WAIT A MOMENT(%d).. SNR LIMD UIMD ",psys->adpc-ADPC_HOLD); break; case 2: sprintf(out_str, "WAIT A MOMENT(%d)... SNR LIMD UIMD ",psys->adpc-ADPC_HOLD); break; } lcd_write_string(0,0,out_str); lcd_write_string(1,0, " *CANCEL (ADPC OFF) "); sprintf(out_str,"%02d.%01d",tsnr/2,tsnr%2*5); lcd_write_string(1,23,out_str); sprintf(out_str,"%02d.%01d",l_imd/2,l_imd%2*5); lcd_write_string(1,29,out_str); sprintf(out_str,"%02d.%01d",u_imd/2,u_imd%2*5); lcd_write_string(1,35,out_str); break; case 0x10+ADPC_STATUS_ERR1: lcd_write_string(0,0, " FEEDBACK LINK ERROR! "); lcd_write_string(1,0, " Press Any key to ESC "); break; case 0x10+ADPC_STATUS_ERR2: lcd_write_string(0,0, " ADPC ERROR! "); lcd_write_string(1,0, " Press Any key to ESC "); break; case 0x10+ADPC_STATUS_SMALL: lcd_write_string(0,0, " FEEDBACK TOO SMALL! "); lcd_write_string(1,0, " Press Any key to ESC "); break; case 0x10+ADPC_STATUS_LARGE: lcd_write_string(0,0, " FEEDBACK TOO BIG! "); lcd_write_string(1,0, " Press Any key to ESC "); break; case 0x21: //美国版本 sec = 0; ret_father_menu(); psys->adpc_step = 0; psys->adpc_err = 0; break; } if(atsc_adpc_force_stop_flag==TRUE) { atsc_adpc_force_stop_flag = FALSE; switch(atsc_para.system_para.adpc_step) { case 0: delay_ms(1); fpga_byte_write(0x5,0x30,0); delay_ms(1); fpga_byte_write(0x5,0x31,0x07); atsc_para.system_para.adpc = ADPC_OFF; atsc_para.system_para.adpc_err= 0; c256_bytewrite(EEPROM_DPD_ADDR,ADPC_OFF); ret_father_menu(); break; case 0x10:case 0x11:case 0x12:case 0x13:case 0x14:case 0x15: delay_ms(20); fpga_byte_write(0x5,0x30,0); delay_ms(20); atsc_para.system_para.adpc_err= 0; ret_father_menu(); break; default: ret_father_menu(); break; } } } #endif #if USE_TS2IP==1 //" IP MASK GATE MUTI MISC " static void refresh_ts(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_2,{0,5,12,19,26,33}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); } static void refresh_ts_ip(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->ip, ts_net_para.ip, 4)){ memcpy(ppara->ip, ts_net_para.ip, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->ip,LINE_2,prompt_pos.pos[0]); } static void refresh_ts_mask(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->mask, ts_net_para.mask, 4)){ memcpy(ppara->mask, ts_net_para.mask, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->mask,LINE_2,prompt_pos.pos[0]); } static void refresh_ts_gate(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16}}; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->gateway, ts_net_para.gateway, 4)){ memcpy(ppara->gateway, ts_net_para.gateway, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->gateway,LINE_2,prompt_pos.pos[0]); } //" ___ ___ ___ ___ BAK:___ ___ ___ ___ " static void refresh_ts_muti(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,6,7,8,10,11,12,14,15,16, 23,24,25,27,28,29,31,32,33,35,36,37}}; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; if(atsc_para.system_para.ctrl==CTRL_REMOTE){ if(0!=memcmp(ppara->multi_address, ts_net_para.multi_address, 4)){ memcpy(ppara->multi_address, ts_net_para.multi_address, 4); } } disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); lcd_show_ip_struct_data(ppara->multi_address,LINE_2,prompt_pos.pos[0]); lcd_show_ip_struct_data(ppara->ip_bak,LINE_2,prompt_pos.pos[12]); } static void refresh_ts_fec(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{3,9,16,23,24,25,26}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); if(ppara->fec) lcd_write_string(1,prompt_pos.pos[0]+1,"ENA"); else lcd_write_string(1,prompt_pos.pos[0]+1,"DIS"); sprintf(out_str,"%02d",ppara->row); lcd_write_string(1,prompt_pos.pos[1]+1,out_str); sprintf(out_str,"%02d",ppara->col); lcd_write_string(1,prompt_pos.pos[2]+1,out_str); sprintf(out_str,"%04dms",ppara->delay); lcd_write_string(1,prompt_pos.pos[3],out_str); } //" PORT TYPE LEN PROTOCOL PORT2 " //" 12345 aaa 188 udp 12345 " static void refresh_ts_misc(void *parg,void *parv) { PMENU_S pmenu = (PMENU_S)parg; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; const PROMPT_POS prompt_pos = {LINE_1,{2,3,4,5,6,9,17,23,34,35,36,37,38}}; disp_common_string(pmenu); lcd_write_prompt(&prompt_pos,pmenu); sprintf(out_str,"%05d",ppara->port); //PORT lcd_write_string(LINE_2,prompt_pos.pos[0],out_str); //TYPE switch(ppara->receive_type) { case IP2TS_REC_TYPE_SINGLE: lcd_write_string(1,prompt_pos.pos[5]+1,"UNI"); break; case IP2TS_REC_TYPE_MULTI: lcd_write_string(1,prompt_pos.pos[5]+1,"MULTI"); break; default: lcd_write_string(1,prompt_pos.pos[5]+1,"NULL"); break; } //LEN switch(ppara->packet_len) { case IP2TS_PACKET_204: lcd_write_string(1,prompt_pos.pos[6]+1,"204"); break; case IP2TS_PACKET_188: lcd_write_string(1,prompt_pos.pos[6]+1,"188"); break; default: lcd_write_string(1,prompt_pos.pos[6]+1,"NULL"); break; } switch(ppara->udp_rtp) { case IP2TS_TYPE_RTP: lcd_write_string(1,prompt_pos.pos[7]+1,"RTP"); break; case IP2TS_TYPE_UDP: lcd_write_string(1,prompt_pos.pos[7]+1,"UDP"); break; default: lcd_write_string(1,prompt_pos.pos[7]+1,"NULL"); break; } sprintf(out_str,"%05d",ppara->port_bak); //PORT lcd_write_string(LINE_2,prompt_pos.pos[8],out_str); } static void refresh_ts_ver(void *parg,void *parv) { char buf[41]={0}; char temp_buf[20]; uint32 i = 0; disp_common_string(parg); lcd_write_arrow(LINE_1,0,ARROW_LEFT); sprintf(buf,"TSoIP:"); i=ts_net_para.ts2ip_version; if((ts_net_para.ts2ip_version!=0)&&(ts_net_para.ts2ip_version!=0xffffffff)) { i = (ts_net_para.ts2ip_version&0xff000000)>>24; sprintf(temp_buf,"V%d.%d",i/10,i%10); strcat(buf,temp_buf); i = (ts_net_para.ts2ip_version&0xff0000)>>16; sprintf(temp_buf,"-%d",i); strcat(buf,temp_buf); i = (ts_net_para.ts2ip_version&0xff00)>>8; sprintf(temp_buf,"%d",i); strcat(buf,temp_buf); i = (ts_net_para.ts2ip_version&0xff); sprintf(temp_buf,"(V%d)",i); strcat(buf,temp_buf); } else { strcat(buf,"INVALID"); } lcd_write_string(0,2,buf); } #endif static BOOL proc_key_logo1(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_UP: case KEY_LEFT: #if AW_ATSC_5X /*if(atsc_para.system_para.input==ASI_INPUT_TUNER) { enter_menu(4); } else { enter_menu(3); }*/ enter_menu(7); #else if(atsc_para.system_para.input==ASI_INPUT_TUNER) { enter_menu(4); } else { enter_menu(2); } #endif need_refresh = TRUE; break; case KEY_DOWN: case KEY_RIGHT: enter_menu(1); need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: break; default: break; } return need_refresh; } static BOOL proc_key_logo2(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_UP: case KEY_LEFT: enter_menu(0); need_refresh = TRUE; break; case KEY_DOWN: case KEY_RIGHT: enter_menu(2); need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_logo3(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_UP: case KEY_LEFT: enter_menu(1); need_refresh = TRUE; break; case KEY_DOWN: case KEY_RIGHT: #if AW_ATSC_5X enter_menu(3); #else if(atsc_para.system_para.input==ASI_INPUT_TUNER) { enter_menu(4); } else { enter_menu(0); } #endif need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_logo4(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_UP: case KEY_LEFT: enter_menu(2); need_refresh = TRUE; break; case KEY_DOWN: case KEY_RIGHT: if(atsc_para.system_para.input==ASI_INPUT_TUNER) { enter_menu(4); } else { enter_menu(5); } need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_logo5(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_UP: #if AW_ATSC_5X enter_menu(3); #else enter_menu(2); #endif need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(5); need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_logo6(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_UP: #if AW_ATSC_5X //enter_menu(4); if(atsc_para.system_para.input==ASI_INPUT_TUNER){ enter_menu(4); } else{ enter_menu(3); } #else enter_menu(2); #endif need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(7); need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_logo7(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_UP: #if AW_ATSC_5X enter_menu(5); #else enter_menu(5); #endif need_refresh = TRUE; break; case KEY_RIGHT: case KEY_DOWN: enter_menu(0); need_refresh = TRUE; break; case KEY_LEFT_RIGHT: enter_menu(SYS_LCD); need_refresh = TRUE; break; case KEY_RIGHT_UP_DOWN: enter_menu(FAC_LCD); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(0); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_main(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); #if ATSC_USA_AMP if( (atsc_para.wh_para.pac == 0) && (atsc_para.pac_flag == 0) ) { if(p->item_index == p->item_total-1) { p->item_index = p->item_total-2; } } #endif need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); #if ATSC_USA_AMP if( (atsc_para.wh_para.pac == 0) && (atsc_para.pac_flag == 0) ) { if(p->item_index == p->item_total-1) { p->item_index = 0; } } #endif need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_UP_DOWN: //高级菜单 enter_menu(ADV_LCD); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } void enter_update_lcd(void) { atsc_para.system_para.adpc_err = 0; //atsc_para.system_para.adpc_step = 0; if(atsc_para.system_para.adpc >= ADPC_UPDATE1){ atsc_para.system_para.adpc_step=1; } else{ atsc_para.system_para.adpc_step=0; } delay_ms(100); atsc_adpc_force_stop_flag = FALSE; enter_menu(SPE_LCD); } static BOOL proc_ATSC30_info(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_RIGHT: case KEY_UP: case KEY_DOWN: case KEY_ENTER: case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; } return need_refresh; } //" CTL MODE ADPC NET TS INPUT GPS RST" //" static BOOL proc_key_sys1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_SYSTEM_PARA ppara = (PS_SYSTEM_PARA)para_middle; uint8 adpc_bak = atsc_para.system_para.adpc; static uint8 mode_m = SYS_MODE_LEGACY; right_flag = TRUE; left_flag = TRUE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: #if USE_CTRL_MODE if(atsc_para.system_para.ctrl==CTRL_REMOTE) { if(p->item_index!=0) break; } #endif JUDGE_AGC_ON(); para_change_flag = TRUE; switch(p->item_index) { #if AW_ATSC_5X case 0: NOT_SW_PARA(ppara->ctrl); break; case 1: if(ppara->mode == SYS_MODE_LEGACY) { //ppara->mode = SYS_MODE_ATSC30; //mode_m = SYS_MODE_ATSC30; } else { ppara->mode = SYS_MODE_LEGACY; mode_m = SYS_MODE_LEGACY; } break; case 2: if(ppara->adpc+1 <=ADPC_UPDATE3) ppara->adpc++; else ppara->adpc = ADPC_OFF; break; case 3: if(atsc_para.wj_para.mode==1) { ppara->input = ASI_INPUT_TUNER; } else { if(atsc_para.sn_para.eas_key_valid) { if(ppara->input+1input++; } else { ppara->input = 0; } } else { if(ppara->input+1input++; if(ppara->input==ASI_INPUT_EAS) ppara->input++; } else { ppara->input = 0; } } } break; case 4: if(atsc_para.wf_para.g ==0) ppara->gps=0; else { if(ppara->gps<2) ppara->gps++; else ppara->gps=0; } break; case 5: NOT_SW_PARA(ppara->test); break; #else case 0: NOT_SW_PARA(ppara->ctrl); break; case 1: if(ppara->adpc+1 <=ADPC_UPDATE1) ppara->adpc++; else ppara->adpc = ADPC_OFF; break; case 2: if(atsc_para.wj_para.mode==1) { ppara->input = ASI_INPUT_TUNER; } else { NOT_SW_PARA(ppara->input); } break; #endif } need_refresh = TRUE; break; case KEY_DOWN: #if USE_CTRL_MODE if(atsc_para.system_para.ctrl==CTRL_REMOTE) { if(p->item_index!=0) break; } #endif JUDGE_AGC_ON(); para_change_flag = TRUE; switch(p->item_index) { #if AW_ATSC_5X case 0: NOT_SW_PARA(ppara->ctrl); break; case 1: if(ppara->mode == SYS_MODE_LEGACY) { //ppara->mode = SYS_MODE_ATSC30; //mode_m = SYS_MODE_ATSC30; } else { ppara->mode = SYS_MODE_LEGACY; mode_m = SYS_MODE_LEGACY; } break; case 2: if(ppara->adpc-1 >=ADPC_OFF) ppara->adpc--; else ppara->adpc = ADPC_UPDATE3; break; case 3: if(atsc_para.wj_para.mode==1) { ppara->input = ASI_INPUT_TUNER; } else { if(atsc_para.sn_para.eas_key_valid) { if(ppara->input) { ppara->input--; } else { ppara->input = ASI_INPUT_END-1; } } else { if(ppara->input) { ppara->input--; if(ppara->input==ASI_INPUT_EAS)//add ppara->input--; } else { ppara->input = ASI_INPUT_END-1;//ASI_INPUT_EAS-1; } } } break; case 4: if(atsc_para.wf_para.g ==0) ppara->gps = 0; else { if(ppara->gps>0) ppara->gps--; else ppara->gps=2; } break; case 5: NOT_SW_PARA(ppara->test); break; #else case 0: NOT_SW_PARA(ppara->ctrl); break; case 1: if(ppara->adpc-1 >=ADPC_OFF) ppara->adpc--; else ppara->adpc = ADPC_UPDATE2; break; case 2: if(atsc_para.wj_para.mode==1) { ppara->input = ASI_INPUT_TUNER; } else { NOT_SW_PARA(ppara->input); } break; #endif } need_refresh = TRUE; break; case KEY_ENTER: if(g_trigger_up_tsnr_flg == 0 ) { // 不在小均衡 if((atsc_para.system_para.ab_mode==1 && ppara->adpc == ADPC_OFF ) //ab切 - 可以配置off , 不可以配置 大于off的 . ||( atsc_para.system_para.ab_mode==0) ) { // only A log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); //ADPC已经保存 if((adpc_bak!=ppara->adpc)&&(ppara->adpc>=ADPC_UPDATE1)) { if(g_ca_value!=1){ break; } auto_update = TRUE; adpc_source_udp = 0; adpc_source_web = 0; printf("enter update\n"); enter_update_lcd(); } else if((adpc_bak!=ppara->adpc)&&(ppara->adpc<=ADPC_HOLD)) { if(adpc_bak >= ADPC_UPDATE1) { set_force_stop_adpc(TRUE); enter_menu(SPE_LCD); } else { printf("enter spe_lcd\n"); enter_menu(SPE_LCD+5); } } para_change_flag = FALSE; need_refresh = TRUE; if(mode_m == SYS_MODE_ATSC30) { enter_menu(6); mode_m = SYS_MODE_LEGACY; } } } else{ // if(ppara->adpc!=atsc_para.system_para.adpc){ enter_menu(SPE_LCD+7); printf("waitting for resync done\n"); } } break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } ////" TX RF POWER HZ AGC LVL: " static BOOL proc_key_rf1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; //menu BOOL need_refresh = FALSE; PS_RF_PARA ppara = (PS_RF_PARA)para_middle; right_flag = TRUE; left_flag = TRUE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); if((atsc_para.wh_para.func!=0)&&(p->item_index==0)) p->item_index=p->item_total-1; if( (atsc_para.wk_para.ss == 0) && (p->item_index ==3)) p->item_index = 2; need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); if((atsc_para.wh_para.func!=0)&&(p->item_index==0)) p->item_index=1; if( (atsc_para.wk_para.ss == 0) && (p->item_index ==3)) p->item_index =4; need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: if(atsc_para.wh_para.func==0) NOT_SW_PARA(ppara->tx); break; case 1: #if USE_DRY_LOOP #if 1//_USE_RVL_ if(dryloop_status.rf!=INVALID_DATA) break; #endif #endif NOT_SW_PARA(ppara->rf); break; case 2: #if USE_DRY_LOOP #if 1//_USE_RVL_ if(dryloop_status.power!=INVALID_DATA) break; #endif #endif if(atsc_para.wj_para.p_c) { if((ppara->powerdbpowerpower+1)>ppara->power)) { ppara->power++; ppara->db++; } } else { if((ppara->powerdbpowerpower+1)>ppara->power)) { ppara->power++; ppara->db++; } } break; case 3: NOT_SW_PARA(ppara->ssref); break; case 4: #if USE_NEW_AGC == 0 if(ppara->agc<1) ppara->agc++; else ppara->agc=0; #else if(atsc_para.rf_para.agc) { ppara->agc=ppara->agc?0:atsc_para.rf_para.agc; } else { ppara->agc++; if(ppara->agc == 4) ppara->agc=0; } #endif break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); switch(p->item_index) { case 0: if(atsc_para.wh_para.func==0) NOT_SW_PARA(ppara->tx); break; case 1: #if USE_DRY_LOOP #if 1//_USE_RVL_ if(dryloop_status.rf!=INVALID_DATA) break; #endif #endif NOT_SW_PARA(ppara->rf); break; case 2: #if USE_DRY_LOOP #if 1//_USE_RVL_ if(dryloop_status.power!=INVALID_DATA) break; #endif #endif if((ppara->power>0)&&(ppara->db>0)) { ppara->power--; ppara->db--; } break; case 3: NOT_SW_PARA(ppara->ssref); break; case 4: #if USE_NEW_AGC == 0 //41版本agc if(ppara->agc) ppara->agc--; else ppara->agc=1; #else if(atsc_para.rf_para.agc) //由打开状态只能切换到关闭 { ppara->agc=ppara->agc?0:atsc_para.rf_para.agc; } else { if(ppara->agc) ppara->agc--; else ppara->agc=3; } #endif break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_freq(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; //menu BOOL need_refresh = FALSE; PS_RF_PARA ppara = (PS_RF_PARA)para_middle; uint8 left=2,right=5; if((p->item_index >= left) &&(p->item_index <= right)) right_flag = TRUE; else right_flag = FALSE; if((p->item_index >= left+1) &&(p->item_index <= right+1)) left_flag = TRUE; else left_flag = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->rxfreqrxfreq++; else ppara->rxfreq=FREQ_MIN_V1; break; case 1: if(ppara->txfreqtxfreq++; else ppara->txfreq=FREQ_MIN_V1; break; case 2: if(ppara->hz+10000<=RF_MAX_HZ*2) ppara->hz+=10000; break; case 3: if(ppara->hz+1000<=RF_MAX_HZ*2) ppara->hz+=1000; break; case 4: if(ppara->hz+100<=RF_MAX_HZ*2) ppara->hz+=100; break; case 5: if(ppara->hz+10<=RF_MAX_HZ*2) ppara->hz+=10; break; case 6: if(ppara->hz+1<=RF_MAX_HZ*2) ppara->hz+=1; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: if(ppara->rxfreq>FREQ_MIN_V1) ppara->rxfreq--; else ppara->rxfreq=FREQ_MAX_ALL; break; case 1: if(ppara->txfreq>FREQ_MIN_V1) ppara->txfreq--; else ppara->txfreq=FREQ_MAX_ALL; break; case 2: if(ppara->hz-10000>=0) ppara->hz-=10000; break; case 3: if(ppara->hz-1000>=0) ppara->hz-=1000; break; case 4: if(ppara->hz-100>=0) ppara->hz-=100; break; case 5: if(ppara->hz-10>=0) ppara->hz-=10; break; case 6: if(ppara->hz-1>=0) ppara->hz-=1; break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #if AW_ATSC_5X //" DELAY TXID NETID BRATIO " BOOL proc_key_net1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_NETWORK_PARA ppara = (PS_NETWORK_PARA)para_middle; right_flag = TRUE; left_flag = TRUE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: if(ppara->delay+1000000<=NET_MAX_DELAY) ppara->delay+=1000000; break; case 1: if(ppara->delay+100000<=NET_MAX_DELAY) ppara->delay+=100000; break; case 2: if(ppara->delay+10000<=NET_MAX_DELAY) ppara->delay+=10000; break; case 3: if(ppara->delay+1000<=NET_MAX_DELAY) ppara->delay+=1000; break; case 4: if(ppara->delay+100<=NET_MAX_DELAY) ppara->delay+=100; break; case 5: if(ppara->delay+10<=NET_MAX_DELAY) ppara->delay+=10; break; case 6: if(ppara->delay+1<=NET_MAX_DELAY) ppara->delay+=1; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: if((int32)ppara->delay-1000000>=0) ppara->delay-=1000000; break; case 1: if((int32)ppara->delay-100000>=0) ppara->delay-=100000; break; case 2: if((int32)ppara->delay-10000>=0) ppara->delay-=10000; break; case 3: if((int32)ppara->delay-1000>=0) ppara->delay-=1000; break; case 4: if((int32)ppara->delay-100>=0) ppara->delay-=100; break; case 5: if((int32)ppara->delay-10>=0) ppara->delay-=10; break; case 6: if((int32)ppara->delay-1>=0) ppara->delay-=1; break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #endif //" SYNC TCP_C ZP1F PID_DET " static BOOL proc_key_mode(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_MODE_PARA ppara = (PS_MODE_PARA)para_middle; switch(key) { case KEY_LEFT: if((atsc_para.system_para.mode == 0) &&(atsc_para.system_para.net==1)) break; DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: if((atsc_para.system_para.mode == 0) &&(atsc_para.system_para.net==1)) break; INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); if(atsc_para.system_para.mode == 0) break; JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->sync); break; case 1: if(atsc_para.system_para.net ==0) NOT_SW_PARA(ppara->tcp_c); break; case 2: if(atsc_para.system_para.net ==0) NOT_SW_PARA(ppara->zp1f); break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); if((atsc_para.system_para.mode == 0) &&(atsc_para.system_para.net==1)) break; JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->sync); break; case 1: if(atsc_para.system_para.net ==0) NOT_SW_PARA(ppara->tcp_c); break; case 2: if(atsc_para.system_para.net ==0) NOT_SW_PARA(ppara->zp1f); break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; if(atsc_para.system_para.mode == 0) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); //ret_father_menu(); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_ad_m(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); #if ATSC_USA_AMP //PAC开关关且未连功放,PAC不显示 if( (atsc_para.wh_para.pac==0) && (atsc_para.pac_flag==0)) { if(p->item_index == p->item_total-1) p->item_index = p->item_total-2; } #endif need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); #if ATSC_USA_AMP if( (atsc_para.wh_para.pac==0) && (atsc_para.pac_flag==0)) { if(p->item_index == p->item_total-1) p->item_index = 0; } #endif need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_EXIT: enter_menu(SYS_LCD); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PCRL Sw_Up Sw_Down CW GPS_V " static BOOL proc_key_ad1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_ADVANCE_PARA ppara = (PS_ADVANCE_PARA)para_middle; uint8 left=3,right=4; if(p->item_index == left) right_flag = TRUE; else right_flag = FALSE; if(p->item_index == right) left_flag = TRUE; else left_flag = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pcr++; ppara->pcr&=0x07; break; case 1: NOT_SW_PARA(ppara->slow_up); break; case 2: NOT_SW_PARA(ppara->slow_down); break; #if ADDR_CONFLICT_DISABLED case 3: ppara->swrt +=0x10; break; case 4: ppara->swrt++; break; #else case 3: ppara->swrt +=0x10; break; case 4: ppara->swrt++; break; #endif case 5: NOT_SW_PARA(ppara->pac); break; case 6: if(ppara->asiout < 3) { ppara->asiout++; } else { ppara->asiout = 0; } break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pcr--; ppara->pcr&=0x07; break; case 1: NOT_SW_PARA(ppara->slow_up); break; case 2: NOT_SW_PARA(ppara->slow_down); break; #if ADDR_CONFLICT_DISABLED case 3: ppara->swrt -=0x10; break; case 4: ppara->swrt--; break; #else case 3: ppara->swrt -=0x10; break; case 4: ppara->swrt--; break; #endif case 5: NOT_SW_PARA(ppara->pac); break; case 6: if(ppara->asiout > 0) { ppara->asiout--; } else { ppara->asiout = 3; } break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" M_TS M_10M M_1PPS M_DLY " static BOOL proc_key_ad2(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_ADVANCE2_PARA ppara = (PS_ADVANCE2_PARA)para_middle; if((p->item_index >= 3) && (p->item_index <= p->item_total-2)) right_flag = TRUE; else right_flag = FALSE; if((p->item_index >= 4) && (p->item_index <= p->item_total-1)) left_flag = TRUE; else left_flag = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->m_ts); break; case 1: NOT_SW_PARA(ppara->m_10m); break; case 2: NOT_SW_PARA(ppara->m_1pps); break; case 3: if(ppara->m_dly_hh+10<=99) ppara->m_dly_hh+=10; break; case 4: if(ppara->m_dly_hh<99) ppara->m_dly_hh+=1; break; case 5: if(ppara->m_dly_mm+10<=59) ppara->m_dly_mm+=10; else { if(ppara->m_dly_hh<99) { ppara->m_dly_hh++; ppara->m_dly_mm-=50; } } break; case 6: if(ppara->m_dly_mm<59) ppara->m_dly_mm+=1; else { if(ppara->m_dly_hh<99) { ppara->m_dly_hh++; ppara->m_dly_mm=0; } } break; case 7: if(ppara->m_dly_ss+10<=59) ppara->m_dly_ss+=10; else { if(ppara->m_dly_mm<59) { ppara->m_dly_mm++; ppara->m_dly_ss-=50; } else { if(ppara->m_dly_hh<99) { ppara->m_dly_hh++; ppara->m_dly_mm=0; ppara->m_dly_ss-=50; } } } break; case 8: if(ppara->m_dly_ss<59) ppara->m_dly_ss++; else { if(ppara->m_dly_mm<59) { ppara->m_dly_mm++; ppara->m_dly_ss=0; } else { if(ppara->m_dly_hh<99) { ppara->m_dly_hh++; ppara->m_dly_mm=0; ppara->m_dly_ss=0; } } } break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->m_ts); break; case 1: NOT_SW_PARA(ppara->m_10m); break; case 2: NOT_SW_PARA(ppara->m_1pps); break; case 3: if(ppara->m_dly_hh>=10) { ppara->m_dly_hh-=10; if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; } } break; case 4: if(ppara->m_dly_hh>0) { ppara->m_dly_hh--; if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; } } break; case 5: if(ppara->m_dly_mm>=10) { ppara->m_dly_mm-=10; if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; } } else { if(ppara->m_dly_hh>=1) { ppara->m_dly_hh--; ppara->m_dly_mm+=50; } } break; case 6: if(ppara->m_dly_mm>=1) { ppara->m_dly_mm-=1; if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; } } else { if(ppara->m_dly_hh>=1) { ppara->m_dly_hh--; ppara->m_dly_mm=59; } } break; case 7: if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; break; } if(ppara->m_dly_ss>=10) ppara->m_dly_ss-=10; else { if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) break; if(ppara->m_dly_mm>=1) { ppara->m_dly_mm--; ppara->m_dly_ss+=50; } else { if(ppara->m_dly_hh>=1) { ppara->m_dly_hh--; ppara->m_dly_mm=59; ppara->m_dly_ss+=50; } } } break; case 8: if((ppara->m_dly_ss<=4)&&(ppara->m_dly_hh==0)&&(ppara->m_dly_mm==0)) { ppara->m_dly_ss=4; break; } if(ppara->m_dly_ss>=1) ppara->m_dly_ss--; else { if(ppara->m_dly_mm>=1) { ppara->m_dly_mm--; ppara->m_dly_ss=59; } else { if(ppara->m_dly_hh>=1) { ppara->m_dly_hh--; ppara->m_dly_mm=59; ppara->m_dly_ss=59; } } } break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); //ret_father_menu(); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" FUNC RC_CMD FWD_CAL TYPE " static BOOL proc_key_ad3(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_ADVANCE3_PARA ppara = (PS_ADVANCE3_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { #if AW_ATSC_5X case 0: NOT_SW_PARA(ppara->mptv); break; case 1: //NOT_SW_PARA(ppara->rc_cmd); break; case 2: NOT_SW_PARA(ppara->fwd_cal); break; case 3: NOT_SW_PARA(ppara->cw); break; case 4: if(ppara->max_powermax_power++; } break; case 5: NOT_SW_PARA(ppara->rst); break; #else case 0: NOT_SW_PARA(ppara->rc_cmd); break; case 1: NOT_SW_PARA(ppara->fwd_cal); break; case 2: NOT_SW_PARA(ppara->cw); break; case 3: NOT_SW_PARA(ppara->rst); break; #endif } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { #if AW_ATSC_5X case 0: NOT_SW_PARA(ppara->mptv); break; case 1: // NOT_SW_PARA(ppara->rc_cmd); break; case 2: NOT_SW_PARA(ppara->fwd_cal); break; case 3: NOT_SW_PARA(ppara->cw); break; case 4: if(ppara->max_power) { ppara->max_power--; } break; case 5: NOT_SW_PARA(ppara->rst); break; #else case 0: //全波版本和美国版本显示不一致(同一个值,一个意思) NOT_SW_PARA(ppara->rc_cmd); break; case 1: NOT_SW_PARA(ppara->fwd_cal); break; case 2: NOT_SW_PARA(ppara->cw); break; case 3: NOT_SW_PARA(ppara->rst); break; #endif } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); if(ppara->rst) { atsc_para.ad3_para.rst = ppara->rst; enter_menu(SPE_LCD+2); need_refresh = TRUE; break; } p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_ad4(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_ADVANCE4_PARA ppara = (PS_ADVANCE4_PARA)para_middle; uint8 adpc_bak = atsc_para.ad4_para.adpc; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); if(p->item_index==1) p->item_index=0; need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); if(p->item_index==1) p->item_index=2; need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pdt++; ppara->pdt&=0x0f; break; case 1: /*ppara->cfr++; ppara->cfr&=0x0f;*/ break; case 2: ppara->adpc++; if(ppara->adpc>ADPC_UPDATE1) ppara->adpc = ADPC_OFF; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pdt--; ppara->pdt&=0x0f; break; case 1: /*ppara->cfr--; ppara->cfr&=0x0f;*/ break; case 2: if(ppara->adpc>ADPC_OFF) ppara->adpc--; else { ppara->adpc = ADPC_UPDATE1; } break; } need_refresh = TRUE; break; case KEY_ENTER: if(atsc_para.system_para.ctrl==CTRL_REMOTE) break; log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); if(g_trigger_up_tsnr_flg==1) break; if((atsc_para.system_para.ab_mode==1 && ppara->adpc == ADPC_OFF ) //ab切 - 可以配置off , 不可以配置 大于off的 . ||(atsc_para.system_para.ab_mode==0) ) { // only A p->save_para_func(para_middle); if((adpc_bak!=ppara->adpc)&&(ppara->adpc>=ADPC_UPDATE1)) { auto_update = ppara->auto_adpc; adpc_source_udp = 0; adpc_source_web = 0; enter_update_lcd(); } //set_ab_switch(0); ppara->ab_flag = FALSE; ppara->ab_sec = 0; para_change_flag = FALSE; need_refresh = TRUE; } break; case KEY_EXIT: //set_ab_switch(0); ppara->ab_flag = FALSE; ppara->ab_sec = 0; ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" TIME A_SNR A_IMD R_SNR R_IMD C_T " static BOOL proc_key_ad5(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_ADVANCE5_PARA *ppara = (S_ADVANCE5_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: if(ppara->timetime++; else if(ppara->time==MAX_AUTO_UPDATE_TIME) ppara->time = (uint8)-1; else ppara->time = 0; break; case 1: ppara->a_snr = ppara->a_snr>=99?0:(ppara->a_snr+1); break; case 2: ppara->a_imd = ppara->a_imd>=99?0:(ppara->a_imd+1); break; case 3: ppara->r_snr = ppara->r_snr>=99?0:(ppara->r_snr+1); break; case 4: ppara->r_imd = ppara->r_imd>=99?0:(ppara->r_imd+1); break; case 5: if(ppara->dpd<3) ppara->dpd++; else ppara->dpd=0; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: if((ppara->time>0)&&(ppara->time<=MAX_AUTO_UPDATE_TIME)) ppara->time--; else if(ppara->time >MAX_AUTO_UPDATE_TIME) ppara->time =MAX_AUTO_UPDATE_TIME; else ppara->time = (uint8)-1; break; case 1: ppara->a_snr = ppara->a_snr>TSNR_VALID_HOLD?(ppara->a_snr-1):99; break; case 2: ppara->a_imd = ppara->a_imd>0?(ppara->a_imd-1):99; break; case 3: ppara->r_snr = ppara->r_snr>0?(ppara->r_snr-1):99; break; case 4: ppara->r_imd = ppara->r_imd>0?(ppara->r_imd-1):99; break; case 5: if(ppara->dpd) ppara->dpd--; else ppara->dpd=3; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #if USA_ATSC_5X static BOOL proc_key_latch(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_LATCH_PARA *ppara = (S_LATCH_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->reset); break; case 1: NOT_SW_PARA(ppara->u1); break; case 2: NOT_SW_PARA(ppara->u2); break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->reset); break; case 1: NOT_SW_PARA(ppara->u1); break; case 2: NOT_SW_PARA(ppara->u2); break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #endif void add_sn(uint32 pos,uint64 *pip) { uint32 i; uint64 value=1; if(pos>13) return ; for(i=0; i<(12-pos); i++) { value *=10; } *pip+=value; if(*pip>9999999999999LL) *pip=0; } void dec_sn(uint32 pos,uint64 *pip) { uint32 i; uint64 value=1; if(pos>13) return ; for(i=0; i<(12-pos); i++) { value *=10; } *pip-=value; if(*pip>9999999999999LL) *pip=9999999999999LL; } static BOOL proc_key_sn(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_SN_PARA *ppara = (S_SN_PARA *)para_middle; right_flag = TRUE; left_flag = TRUE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: if(atsc_para.wl_para.spe == 0x35) { add_sn(p->item_index,&ppara->sn); } break; case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: ppara->gui_key+=(0x1<<(4*(20-p->item_index))); break; case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: ppara->psip_key+=(0x1<<(4*(28-p->item_index))); break; case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: ppara->eas_key+=(0x1<<(4*(36-p->item_index))); break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: if(atsc_para.wl_para.spe == 0x35) { dec_sn(p->item_index,&ppara->sn); } break; case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: ppara->gui_key-=(0x1<<(4*(20-p->item_index))); break; case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: ppara->psip_key-=(0x1<<(4*(28-p->item_index))); break; case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: ppara->eas_key-=(0x1<<(4*(36-p->item_index))); break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #if 1//ETH_UPGRADE static BOOL proc_key_up_confirm(void *parg,uint8 key) { //PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; switch(key) { case KEY_LEFT: JUDGE_CTRL(); ppara->confirm = ppara->confirm?0:1; need_refresh = TRUE; break; case KEY_RIGHT: JUDGE_CTRL(); ppara->confirm = ppara->confirm?0:1; need_refresh = TRUE; break; case KEY_ENTER: if(ppara->confirm) { lcd_write_string(0,0," Upgrade Mode... "); lcd_write_string(1,0," To Abort,Cycle The Power! "); lcd_write_cache(); SoftwareUpdateBegin(); //函数不会再返回! } else ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #endif static BOOL proc_key_rst_confirm(void *parg,uint8 key) { //PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; switch(key) { case KEY_LEFT: JUDGE_CTRL(); ppara->confirm = ppara->confirm?0:1; need_refresh = TRUE; break; case KEY_RIGHT: JUDGE_CTRL(); ppara->confirm = ppara->confirm?0:1; need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save,confirm=%d\n",ppara->confirm); if(ppara->confirm) { memcpy(para_middle,&atsc_para.ad3_para,sizeof(atsc_para.ad3_para)); save_ad3_para(para_middle); atsc_para.ad3_para.rst = 0; } para_change_flag=FALSE; ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_fac_confirm(void *parg,uint8 key) { //PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; switch(key) { case KEY_LEFT: JUDGE_CTRL(); NOT_SW_PARA(ppara->confirm); need_refresh = TRUE; break; case KEY_RIGHT: JUDGE_CTRL(); NOT_SW_PARA(ppara->confirm); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save,confirm=%d\n",ppara->confirm); if(ppara->confirm) { memcpy(para_middle,&atsc_para.wb_para,sizeof(atsc_para.wb_para)); save_wb_para(para_middle); atsc_para.wb_para.rst = 0; } ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: atsc_para.wb_para.rst =0; ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_upProc(void *parg,uint8 key) { BOOL need_refresh = FALSE; PS_UP_CONFIRM_PARA ppara = (PS_UP_CONFIRM_PARA)para_middle; switch(key) { case KEY_LEFT: ret_father_menu(); need_refresh = TRUE; break; case KEY_RIGHT: ret_father_menu(); need_refresh = TRUE; break; case KEY_ENTER: ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_info_proc(void *parg,uint8 key) { BOOL need_refresh = FALSE; PS_DISPINFO_CONFIRM_PARA ppara = (PS_DISPINFO_CONFIRM_PARA)para_middle; switch(key) { case KEY_LEFT: ret_father_menu(); need_refresh = TRUE; break; case KEY_RIGHT: ret_father_menu(); need_refresh = TRUE; break; case KEY_ENTER: ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_ri1(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: break; case KEY_RIGHT: break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #if ATSC_USA_AMP static BOOL proc_key_pa_config(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_EXIT: if((atsc_para.wh_para.pac == 0) && (atsc_para.pac_flag == 0)) enter_menu(SYS_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_pa_ip(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; //PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); //add_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); //dec_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: if((atsc_para.wh_para.pac==0) && (atsc_para.pac_flag==0)) enter_menu(SYS_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_pa_gate(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; //PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); //add_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); //dec_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); //ret_father_menu(); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: if((atsc_para.wh_para.pac==0) && (atsc_para.pac_flag==0)) enter_menu(SYS_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_pa_mask(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; //PS_PA_CONFIG_PARA ppara = (PS_PA_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); //JUDGE_AGC_ON(); //add_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); //JUDGE_AGC_ON(); //dec_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "[local] KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: if((atsc_para.wh_para.pac==0) && (atsc_para.pac_flag==0)) enter_menu(SYS_LCD); else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #endif BOOL proc_key_config(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: // if(p->item_index==p->item_total-1)//最后一个*号 // enter_menu(SPE_LCD+1);//以太网远程升级 // else enter_son_menu(p->item_index); need_refresh = TRUE; para_change_flag = FALSE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_id(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->id+=0x10; break; case 1: ppara->id+=0x1; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->id-=0x10; break; case 1: ppara->id-=0x1; break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, " KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_bps(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: break; case KEY_RIGHT: break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); if(ppara->bps+1<=2) ppara->bps++; else ppara->bps = 0; need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); if(ppara->bps-1>=0) ppara->bps--; else ppara->bps = 2; need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static void add_ipv4(uint32 pos,uint8 *pip) { uint32 i,j; uint8 value; if(pos>=12) return; i = pos%3; j = pos/3; value = *(pip+j); switch(i) { case 0: if(value +100<=255) value +=100; break; case 1: if(value +10<=255) value +=10; break; case 2: // 1 if(value +1<=255) value +=1; break; } *(pip+j) = value; } static void dec_ipv4(uint32 pos,uint8 *pip) { uint32 i,j; uint8 value; if(pos>=12) return; i = pos%3; j = pos/3; value = *(pip+j); switch(i) { case 0: if(value >=100) value -=100; break; case 1: if(value >=10) value -=10; break; case 2: // 1 if(value >=1) value -=1; break; } *(pip+j) = value; } BOOL proc_key_ip(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); add_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); dec_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_gate(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); add_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); dec_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, " KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_mask(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_CONFIG_PARA ppara = (PS_CONFIG_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); add_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); dec_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" RA WB WC WD WE " //" RA WB WC WD WE WF RG WH " static BOOL proc_key_fac1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_ra1(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: break; case KEY_RIGHT: break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: break; case KEY_EXIT: if(ra_update_flag) { enter_menu(SPE_LCD+0); ra_update_flag = 0; } else ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" B0 B1 B2 HZ P0 B8 EQUC CFR RST " static BOOL proc_key_wb1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_WB_PARA ppara = (PS_WB_PARA)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); if(p->item_index==14) p->item_index=13; else if(p->item_index==9) p->item_index=8; need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); if(p->item_index==14) p->item_index=15; else if(p->item_index==9) p->item_index=10; need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->b0 = ppara->b0?0:1; break; case 1: if(ppara->b1+1<3) ppara->b1++; else ppara->b1 = 0; break; case 2: ppara->b2+=0x10; break; case 3: ppara->b2++; break; case 4: ppara->hz+=0x1000; break; case 5: ppara->hz+=0x100; break; case 6: ppara->hz+=0x10; break; case 7: ppara->hz+=0x1; break; case 8: ppara->p0++; break; case 9: //ppara->b8++; break; case 10: ppara->gpsc+=0x1000; break; case 11: ppara->gpsc+=0x100; break; case 12: ppara->gpsc+=0x10; break; case 13: ppara->gpsc+=0x1; break; case 14: //ppara->cfr++; break; case 15: ppara->alarm++; if(ppara->alarm>3) ppara->alarm = 0; break; case 16: #if USE_LOG_MODULE if(ppara->rst<3) #else if(ppara->rst<2) #endif ppara->rst++; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->b0 = ppara->b0?0:1; break; case 1: /*if(ppara->b1-1>0) ppara->b1--; else ppara->b1 = 2; break;*/ case 2: ppara->b2-=0x10; break; case 3: ppara->b2--; break; case 4: ppara->hz-=0x1000; break; case 5: ppara->hz-=0x100; break; case 6: ppara->hz-=0x10; break; case 7: ppara->hz-=0x1; break; case 8: ppara->p0--; break; case 9: //ppara->b8 = ppara->b8--; break; case 10: ppara->gpsc-=0x1000; break; case 11: ppara->gpsc-=0x100; break; case 12: ppara->gpsc-=0x10; break; case 13: ppara->gpsc-=0x1; break; case 14: //ppara->cfr--; break; case 15: if(ppara->alarm) ppara->alarm--; else ppara->alarm=0x03; break; case 16: if(ppara->rst) ppara->rst--; else #if USE_LOG_MODULE ppara->rst = 3; #else ppara->rst = 2; #endif break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save, ppara->rst=%d\n",ppara->rst); if(ppara->rst) { atsc_para.wb_para.rst = ppara->rst; enter_menu(SPE_LCD+3); need_refresh = TRUE; break; } else p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" CRG PR CH CL DH " //" CRG PR CH CL DH DL TIL TFL TLS PG " static BOOL proc_key_wc1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; #if ADDR_CONFLICT_DISABLED // " GL " // "0000 " PS_DPD_PARA ppara = (PS_DPD_PARA )para_middle; switch(key) { case KEY_LEFT: if(para_change_flag == TRUE) { if((p->item_index>=0)&&(p->item_index<=3)) { p->item_index = p->item_index>=1 ? p->item_index-1 : 3; } } else { DEC_ITEM_INDEX(p); } need_refresh = TRUE; break; case KEY_RIGHT: if(para_change_flag == TRUE) { if((p->item_index>=0)&&(p->item_index<=3)) { p->item_index = p->item_index<3 ? p->item_index+1 : 0; } } else { INC_ITEM_INDEX(p); } need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); para_change_flag = TRUE; switch(p->item_index) { case 0: case 1: case 2: case 3: add_4_hex(&ppara->gl, p->item_index); break; case 4: ppara->dpd_ctl+=0x0010; break; case 5: ppara->dpd_ctl+=0x0001; break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); para_change_flag = TRUE; switch(p->item_index) { case 0: case 1: case 2: case 3: dec_4_hex(&ppara->gl, p->item_index); break; case 4: ppara->dpd_ctl-=0x0010; break; case 5: ppara->dpd_ctl-=0x0001; break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #else S_WC_PARA *ppara = (S_WC_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); #if ADDR_CONFLICT_DISABLED switch(p->item_index) { case 0: ppara->gl++; break; } #else switch(p->item_index) { case 0: ppara->crg++; break; case 1: if(ppara->pr+1>0x0f) ppara->pr=0; else ppara->pr++; break; case 2: ppara->ch++; break; case 3: ppara->cl++; break; case 4: ppara->dh++; break; case 5: ppara->dl++; break; case 6: ppara->til++; break; case 7: ppara->tfl++; break; case 8: ppara->tls++; break; case 9: ppara->pg++; break; } #endif need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); #if ADDR_CONFLICT_DISABLED switch(p->item_index) { case 0: ppara->gl--; break; } #else switch(p->item_index) { case 0: ppara->crg--; break; case 1: if(ppara->pr>0) ppara->pr--; else ppara->pr = 0x0f; break; case 2: ppara->ch--; break; case 3: ppara->cl--; break; case 4: ppara->dh--; break; case 5: ppara->dl--; break; case 6: ppara->til--; break; case 7: ppara->tfl--; break; case 8: ppara->tls--; break; case 9: ppara->pg--; break; } #endif need_refresh = TRUE; break; case KEY_ENTER: JUDGE_AGC_ON(); JUDGE_CTRL(); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #endif return need_refresh; } //" TWK PFG PDG FEG DEG LCT SA SB SC SD " static BOOL proc_key_wd1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WD_PARA *ppara = (S_WD_PARA *)para_middle; #if ADDR_CONFLICT_DISABLED switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->cfr_work); break; case 1: ppara->cfr_clip+=0x1000; break; case 2: ppara->cfr_clip+=0x0100; break; case 3: ppara->cfr_clip+=0x0010; break; case 4: ppara->cfr_clip+=0x0001; break; case 5: if(ppara->sa < KOREA_SNR_ADJ_MAX){ ppara->sa += 1; } break; case 6: if(ppara->sb < KOREA_SNR_ADJ_MAX){ ppara->sb += 1; } break; case 7: if(ppara->sc < KOREA_SNR_ADJ_MAX){ ppara->sc += 1; } break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->cfr_work); break; case 1: ppara->cfr_clip-=0x1000; break; case 2: ppara->cfr_clip-=0x0100; break; case 3: ppara->cfr_clip-=0x0010; break; case 4: ppara->cfr_clip-=0x0001; break; case 5: if(ppara->sa > (-KOREA_SNR_ADJ_MAX)){ ppara->sa -= 1; } break; case 6: if(ppara->sb > (-KOREA_SNR_ADJ_MAX)){ ppara->sb -= 1; } break; case 7: if(ppara->sc > (-KOREA_SNR_ADJ_MAX)){ ppara->sc -= 1; } break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: p->save_para_func(para_middle); //ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #else switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: //ppara->twk = ppara->twk?0:1; break; /* case 0: ppara->twk = ppara->twk?0:1; break; case 1: ppara->pfg++; break; case 2: ppara->pdg++; break; case 3: ppara->feg++; break; case 4: ppara->deg++; break; case 5: ppara->lct++; break; #if USE_SNR_ADJ case 6: if(ppara->sasa++; } break; case 7: if(ppara->sbsb++; } break; case 8: if(ppara->scsc++; } break; case 9: if(ppara->sdsd++; } break; #else case 6: ppara->sa++; break; case 7: ppara->sb++; break; case 8: ppara->sc++; break; case 9: ppara->sd++; break; #endif*/ } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: //ppara->twk = ppara->twk?0:1; break; /* case 0: ppara->twk = ppara->twk?0:1; break; case 1: ppara->pfg--; break; case 2: ppara->pdg--; break; case 3: ppara->feg--; break; case 4: ppara->deg--; break; case 5: ppara->lct--; break; #if USE_SNR_ADJ case 6: if(ppara->sa>-KOREA_SNR_ADJ_MAX) { ppara->sa--; } break; case 7: if(ppara->sb>-KOREA_SNR_ADJ_MAX) { ppara->sb--; } break; case 8: if(ppara->sc>-KOREA_SNR_ADJ_MAX) { ppara->sc--; } break; case 9: if(ppara->sd>-KOREA_SNR_ADJ_MAX) { ppara->sd--; } break; #else case 6: ppara->sa--; break; case 7: ppara->sb--; break; case 8: ppara->sc--; break; case 9: ppara->sd--; break; #endif */ } need_refresh = TRUE; break; case KEY_ENTER: p->save_para_func(para_middle); //ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #endif return need_refresh; } static BOOL proc_key_we1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WE_PARA *ppara = (S_WE_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->chch++; else ppara->ch=FREQ_MIN_V1; update_we_para(); break; case 1: if(atsc_para.rf_para.agc==0) { if(ppara->powerpower++; } } break; case 2: ppara->ltn++; if(ppara->ltn>0xf) ppara->ltn=0x0; break; case 3: ppara->dsc++; if(ppara->dsc>0xf) ppara->dsc=0x0; break; case 4: ppara->snc++; if(ppara->snc>0xf) ppara->snc=0x0; break; case 5: ppara->dpgh+=0x10; break; case 6: ppara->dpgh+=0x1; break; case 7: ppara->dpgm+=0x10; break; case 8: ppara->dpgm+=0x1; break; case 9: ppara->dpgl+=0x10; break; case 10: ppara->dpgl+=0x1; break; case 11: //ppara->fsc+=0x10; break; case 12: //ppara->fsc+=0x1; break; case 13: ppara->sp++; if(ppara->sp>4) ppara->sp=0; break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->ch>FREQ_MIN_V1) ppara->ch--; else ppara->ch=FREQ_MAX_ALL; update_we_para(); break; case 1: if(atsc_para.rf_para.agc==0) { if(ppara->power) { ppara->power--; } } break; case 2: ppara->ltn--; if(ppara->ltn>0xf) ppara->ltn=0xf; break; case 3: ppara->dsc--; if(ppara->dsc>0xf) ppara->dsc=0xf; break; case 4: ppara->snc--; if(ppara->snc>0xf) ppara->snc=0xf; break; case 5: ppara->dpgh-=0x10; break; case 6: ppara->dpgh--; break; case 7: ppara->dpgm-=0x10; break; case 8: ppara->dpgm--; break; case 9: ppara->dpgl-=0x10; break; case 10: ppara->dpgl--; break; case 11: //ppara->fsc-=0x10; break; case 12: //ppara->fsc--; break; case 13: if(ppara->sp) ppara->sp--; else ppara->sp=4; break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: p->read_para_func(); fpga_save_we(ppara); ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PDT POWER SP LNSL " //" PDT POWER SP LNSL L N M AH AL AGC " static BOOL proc_key_wf1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WF_PARA *ppara = (S_WF_PARA *)para_middle; #if ADDR_CONFLICT_DISABLED switch(key) { case KEY_LEFT: case KEY_RIGHT: case KEY_UP: case KEY_DOWN: case KEY_ENTER: case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; ret_father_menu(); need_refresh = TRUE; break; default: break; } #else switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: //PDT ppara->pdt+=0x10; break; case 1: ppara->pdt++; break; case 2: if(ppara->sp+1>=4) ppara->sp = 0; else ppara->sp++; break; case 3: ppara->equc +=0x1000; break; case 4: ppara->equc +=0x0100; break; case 5: ppara->equc +=0x0010; break; case 6: ppara->equc +=0x0001; break; case 7: NOT_SW_PARA(ppara->l); break; case 8: NOT_SW_PARA(ppara->n); break; case 9: if(ppara->m<3) ppara->m++; else ppara->m = 0; break; case 10: ppara->ah+=0x10; break; case 11: ppara->ah++; break; case 12: ppara->al+=0x10; break; case 13: ppara->al++; break; case 14: ppara->agc= 1; break; case 15: NOT_SW_PARA(ppara->g); break; #if USE_ADPC_LONG case 16: ppara->th+=0x10; break; case 17: ppara->th+=0x01; break; #endif } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: //PDT ppara->pdt-=0x10; break; case 1: ppara->pdt--; break; case 2: if(ppara->sp>0) ppara->sp--; else ppara->sp = 3; break; case 3: ppara->equc -=0x1000; break; case 4: ppara->equc -=0x0100; break; case 5: ppara->equc -=0x0010; break; case 6: ppara->equc -=0x0001; break; case 7: NOT_SW_PARA(ppara->l); break; case 8: NOT_SW_PARA(ppara->n); break; case 9: if(ppara->m >0) ppara->m--; else ppara->m = 3; break; case 10: ppara->ah-=0x10; break; case 11: ppara->ah--; break; case 12: ppara->al-=0x10; break; case 13: ppara->al--; break; case 14: ppara->agc= 1; break; case 15: NOT_SW_PARA(ppara->g); break; #if USE_ADPC_LONG case 16: ppara->th-=0x10; break; case 17: ppara->th-=0x01; break; #endif } need_refresh = TRUE; break; case KEY_ENTER: p->save_para_func(para_middle); //ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #endif return need_refresh; } //"ATSC: " static BOOL proc_key_rg1(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_RIGHT: case KEY_UP: case KEY_DOWN: case KEY_ENTER: enter_menu(FAC_LCD+14); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PD BW RALH RALL " //" PD BW RALH RALL BALH BALL RWRT " static BOOL proc_key_wh1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WH_PARA *ppara = (S_WH_PARA *)para_middle; #if ADDR_CONFLICT_DISABLED // "CHIP " switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->chip); break; case 1: ppara->balh +=0x10; break; case 2: ppara->balh++; break; case 3: // ppara->ball+=0x10; // break; // case 4: if(ppara->ball==0x81) ppara->ball=0x80; else ppara->ball=0x81; break; case 4: NOT_SW_PARA(ppara->temp_unit); break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: NOT_SW_PARA(ppara->chip); break; case 1: ppara->balh -=0x10; break; case 2: ppara->balh--; break; case 3: // ppara->ball-=0x10; // break; // case 4: // ppara->ball--; if(ppara->ball==0x81) ppara->ball=0x80; else ppara->ball=0x81; break; case 4: NOT_SW_PARA(ppara->temp_unit); break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #else switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pd = ppara->pd?0:1; break; case 1: ppara->bw = (ppara->bw+1)&0x0f; break; case 2: ppara->ralh+=0x10; break; case 3: ppara->ralh++; break; case 4: ppara->rall+=0x10; break; case 5: ppara->rall++; break; case 6: ppara->balh +=0x10; break; case 7: ppara->balh++; break; case 8: ppara->ball+=0x10; break; case 9: ppara->ball++; break; case 10: ppara->pwrt+=0x10; break; case 11: ppara->pwrt++; break; case 12: ppara->func = ppara->func?0:1; #if AW_ATSC_5X ppara->func=1; #endif break; #if ATSC_USA_AMP case 13: #if 1 if ( pa_conn_sta() ==0 || atsc_para.wh_para.pac != 1) { ppara->pac = ppara->pac?0:1; } #endif break; #endif } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); JUDGE_AGC_ON(); switch(p->item_index) { case 0: ppara->pd = ppara->pd?0:1; break; case 1: ppara->bw = (ppara->bw-1)&0x0f; break; case 2: ppara->ralh-=0x10; break; case 3: ppara->ralh--; break; case 4: ppara->rall-=0x10; break; case 5: ppara->rall--; break; case 6: ppara->balh -=0x10; break; case 7: ppara->balh--; break; case 8: ppara->ball-=0x10; break; case 9: ppara->ball--; break; case 10: ppara->pwrt-=0x10; break; case 11: ppara->pwrt--; break; case 12: ppara->func = ppara->func?0:1; #if AW_ATSC_5X ppara->func=1; #endif break; #if ATSC_USA_AMP case 13: #if 1 if ( pa_conn_sta() ==0 || atsc_para.wh_para.pac != 1) { ppara->pac = ppara->pac?0:1; } #endif break; #endif } need_refresh = TRUE; break; case KEY_ENTER: p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } #endif return need_refresh; } //" GMT P_C RF_DLY MODE S I S2 I2" static BOOL proc_key_wj1(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WJ_PARA *ppara = (S_WJ_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->gmt<12) ppara->gmt++; break; case 1: NOT_SW_PARA(ppara->p_c); break; case 2: if(ppara->rf_dly<10) ppara->rf_dly++; else ppara->rf_dly = 0; break; case 3: NOT_SW_PARA(ppara->mode); break; #if AW_ATSC_5X case 4: NOT_SW_PARA(ppara->picture); break; #endif #if DEBUG_AUTO_ADPC case 4: if(ppara->snr<99) ppara->snr++; else ppara->snr = 0; break; case 5: if(ppara->imd<99) ppara->imd++; else ppara->imd = 0; break; case 6: if(ppara->snr2<99) ppara->snr2++; else ppara->snr2 = 0; break; case 7: if(ppara->imd2<99) ppara->imd2++; else ppara->imd2 = 0; break; #else case 5: if(((ppara->ctl_dpd>>4)&0xf)<1) ppara->ctl_dpd+=0x10; break; case 6: if((ppara->ctl_dpd&0x0f)<1) ppara->ctl_dpd+=1; break; case 7: if(ppara->ph10_time<40) ppara->ph10_time++; else ppara->ph10_time = 1; break; case 8: if(ppara->ph10_time<40) ppara->ph10_time++; else ppara->ph10_time = 1; break; #endif } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->gmt>-12) ppara->gmt--; break; case 1: ppara->p_c=ppara->p_c?0:1; break; case 2: if(ppara->rf_dly) ppara->rf_dly--; else ppara->rf_dly = 10; break; case 3: NOT_SW_PARA(ppara->mode);; break; #if AW_ATSC_5X case 4: NOT_SW_PARA(ppara->picture); break; #endif #if DEBUG_AUTO_ADPC case 4: if(ppara->snr>0) ppara->snr--; else ppara->snr = 99; break; case 5: if(ppara->imd>0) ppara->imd--; else ppara->imd = 99; break; case 6: if(ppara->snr2>0) ppara->snr2--; else ppara->snr2 = 99; break; case 7: if(ppara->imd2>0) ppara->imd2--; else ppara->imd2 = 99; break; #else case 5: if(((ppara->ctl_dpd>>4)&0xf)>0) ppara->ctl_dpd-=0x10; break; case 6: if((ppara->ctl_dpd&0xf)>0) ppara->ctl_dpd-=1; case 7: if(ppara->ph10_time>1) ppara->ph10_time--; else ppara->ph10_time = 40; break; case 8: if(ppara->ph10_time>1) ppara->ph10_time--; else ppara->ph10_time = 40; break; #endif } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_wk(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WK_PARA *ppara = (S_WK_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); if(p->item_index<12) add_ipv4(p->item_index,ppara->alarm_ip); else if(p->item_index ==12) { NOT_SW_PARA(ppara->ss); #if AW_ATSC_5X ppara->ss=0; #endif } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); if(p->item_index<12) dec_ipv4(p->item_index,ppara->alarm_ip); else if(p->item_index ==12) { NOT_SW_PARA(ppara->ss); #if AW_ATSC_5X ppara->ss=0; #endif } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_wl(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; S_WL_PARA *ppara = (S_WL_PARA *)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: ppara->spe+=0x10; break; case 1: ppara->spe++; break; case 2: ppara->eebak++; if(ppara->eebak>2) ppara->eebak=0; break; case 3: NOT_SW_PARA(ppara->ip2ts); break; case 4: NOT_SW_PARA(ppara->exc_5x); break; case 5: NOT_SW_PARA(ppara->roll_off_sel); break; case 6: NOT_SW_PARA(ppara->spec_shift); break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); switch(p->item_index) { case 0: ppara->spe-=0x10; break; case 1: ppara->spe--; break; case 2: if(ppara->eebak) ppara->eebak--; else ppara->eebak=2; break; case 3: NOT_SW_PARA(ppara->ip2ts); break; case 4: NOT_SW_PARA(ppara->exc_5x); break; case 5: NOT_SW_PARA(ppara->roll_off_sel); break; case 6: NOT_SW_PARA(ppara->spec_shift); break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_dpd_config(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PS_DPD_PARA ppara = (PS_DPD_PARA)para_middle; left_flag = FALSE; right_flag = FALSE; switch(key) { case KEY_LEFT: if(para_change_flag == TRUE) { if((p->item_index>=3)&&(p->item_index<=6)) { p->item_index = p->item_index>1 ? p->item_index-1 : 6; } if((p->item_index>=8)&&(p->item_index<=12)) { p->item_index = p->item_index>1 ? p->item_index-1 : 12; } if((p->item_index>=15)&&(p->item_index<=19)) { p->item_index = p->item_index>1 ? p->item_index-1 : 19; } if((p->item_index>=23)&&(p->item_index<=25)) { p->item_index = p->item_index>1 ? p->item_index-1 : 25; } if((p->item_index>=30)&&(p->item_index<=34)) { p->item_index = p->item_index>1 ? p->item_index-1 : 34; } } else { DEC_ITEM_INDEX(p); } need_refresh = TRUE; break; case KEY_RIGHT: if(para_change_flag == TRUE) { if((p->item_index>=3)&&(p->item_index<=6)) { p->item_index = p->item_index>1 ? p->item_index+1 : 3; } if((p->item_index>=8)&&(p->item_index<=12)) { p->item_index = p->item_index>1 ? p->item_index+1 : 8; } if((p->item_index>=15)&&(p->item_index<=19)) { p->item_index = p->item_index>1 ? p->item_index+1 : 15; } if((p->item_index>=23)&&(p->item_index<=25)) { p->item_index = p->item_index>1 ? p->item_index+1 : 23; } if((p->item_index>=30)&&(p->item_index<=34)) { p->item_index = p->item_index>1 ? p->item_index+1 : 30; } } else { INC_ITEM_INDEX(p); } need_refresh = TRUE; break; case KEY_UP: JUDGE_AGC_ON(); JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: //NOT_SW_PARA(ppara->distortion_sw); if(ppara->distortion_swdistortion_sw++; } else{ ppara->distortion_sw=0; } break; case 1: case 2: case 3: case 4: add_4_hex(&ppara->dpd_test,p->item_index-1); break; case 5: case 6: case 7: case 8: case 9: add_uint16_para(&ppara->wpp_th,p->item_index,5); break; case 10: case 11: case 12: case 13: case 14: add_uint16_para(&ppara->err_th,p->item_index,10); break; case 15: case 16: case 17: add_uint8_para(&ppara->err_cnt_th,p->item_index,15); break; case 18: case 19: case 20: case 21: case 22: add_uint16_para_limit(&ppara->amp_sat,p->item_index,18,FPGA_AMP_SAT_MAX); break; case 23: if(ppara->dpd_mode<1) ppara->dpd_mode++; break; case 24:case 25: add_ph6_time_para(&ppara->phase6_minute,p->item_index,24); break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_AGC_ON(); JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: //NOT_SW_PARA(ppara->distortion_sw); if(ppara->distortion_sw>0){ ppara->distortion_sw--; } else{ ppara->distortion_sw=INTER_DISTORTION_SW_MAX; } break; case 1: case 2: case 3: case 4: dec_4_hex(&ppara->dpd_test,p->item_index-1); break; case 5: case 6: case 7: case 8: case 9: dec_uint16_para(&ppara->wpp_th,p->item_index,5); break; case 10: case 11: case 12: case 13: case 14: dec_uint16_para(&ppara->err_th,p->item_index,10); break; case 15: case 16: case 17: dec_uint8_para(&ppara->err_cnt_th,p->item_index,15); break; case 18: case 19: case 20: case 21: case 22: dec_uint16_para(&ppara->amp_sat,p->item_index,18); break; case 23: if(ppara->dpd_mode>0) ppara->dpd_mode--; break; case 24:case 25: dec_ph6_time_para(&ppara->phase6_minute,p->item_index,24); break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: JUDGE_AGC_ON(); JUDGE_CTRL(); log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PDT M FAGC EQUC IQB PPSC CFR " static BOOL proc_key_wm(void *parg,uint8 key) { return proc_key_dpd_config(parg,key); } /*BOOL proc_key_update(void *parg,uint8 key) { BOOL need_refresh = FALSE; S_SYSTEM_PARA *psys; psys = &atsc_para.system_para; switch(key) { case KEY_ENTER: switch(psys->adpc_step) { case 0: //校正中 关闭ADPC 退出 psys->adpc = ADPC_OFF; psys->adpc_err= 0; psys->adpc_step = 0x21; update_flag = 0; delay_ms(1); fpga_byte_write(0x5,0x30,0); delay_ms(1); fpga_byte_write(0x5,0x31,0x07); c256_bytewrite(EEPROM_DPD_ADDR,ADPC_OFF); ret_father_menu(); need_refresh = TRUE; break; case 0x10+ADPC_STATUS_ERR1: case 0x10+ADPC_STATUS_ERR2:case 0x10+ADPC_STATUS_ERR3: case 0x10+ADPC_STATUS_LARGE:case 0x10+ADPC_STATUS_SMALL: delay_ms(20); fpga_byte_write(0x5,0x30,0); delay_ms(20); psys->adpc_err= 0; ret_father_menu(); need_refresh = TRUE; break; default: ret_father_menu(); need_refresh = TRUE; break; } break; case KEY_LEFT_RIGHT: if(psys->adpc_step==0) { ra_update_flag = 1; enter_menu(FAC_LCD+1); } need_refresh = TRUE; break; default: switch(psys->adpc_step) { case 0: //校正中 break; case 0x10+ADPC_STATUS_ERR1: case 0x10+ADPC_STATUS_ERR2:case 0x10+ADPC_STATUS_ERR3: case 0x10+ADPC_STATUS_LARGE:case 0x10+ADPC_STATUS_SMALL: delay_ms(20); psys->adpc_err= 0; fpga_byte_write(0x5,0x30,0); delay_ms(20); ret_father_menu(); need_refresh = TRUE; break; } break; } return need_refresh; } */ extern volatile uint8 g_query_save; extern volatile uint8 g_query_operate; extern volatile uint8 g_query_skip; extern volatile uint8 g_query_wpp_to_save; extern void clear_wpp_max(void); static BOOL proc_key_waiting(void *parg,uint8 key) { BOOL need_refresh = FALSE; uint8 ret_flg=0; switch(key) { case KEY_ENTER: case KEY_RIGHT: case KEY_UP: case KEY_EXIT: case KEY_LEFT_RIGHT: need_refresh = TRUE; break; default: break; } return need_refresh; } static BOOL proc_key_cfg_waiting(void *parg,uint8 key) { BOOL need_refresh = FALSE; uint8 ret_flg=0; switch(key) { case KEY_ENTER: ret_father_menu(); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; case KEY_RIGHT: case KEY_UP: case KEY_LEFT_RIGHT: break; default: break; } return need_refresh; } //h-add static BOOL proc_key_update_dpd(void *parg,uint8 key) { BOOL need_refresh = FALSE; uint8 ret_flg=0; switch(key) { case KEY_ENTER: log_printf(LOG_INFO, I_USER_CFG, "KEY set save\n"); if(atsc_para.system_para.adpc_step) { if(g_query_save==E_QUERY){ g_query_save=E_QUERY_CONFIRM; break; } if(g_query_operate==E_QUERY){ g_query_operate=E_QUERY_OK_CONTINUE; break; } if(g_query_operate==E_QUERY2){ g_query_operate=E_QUERY_RF_FLITER; break; } if(g_query_wpp_to_save==E_QUERY){ g_query_wpp_to_save=E_QUERY_CONFIRM; break; } } if((atsc_para.system_para.adpc_err<=DPD_IDLE_ERR) && (atsc_para.system_para.adpc_err>=DPD_STATE_ERR)){ log_printf(LOG_DEBUG, I_USER_CFG, "ok-key to esc num=%d\n",atsc_para.system_para.adpc_err); atsc_para.system_para.adpc_err=0; dpd_set_clr(); dpd_exit(); ret_father_menu(); clear_wpp_max(); set_tsnr_update_flg(1); } need_refresh = TRUE; break; case KEY_RIGHT: if(atsc_para.system_para.adpc_step) { /*if(g_query_operate==E_QUERY){ g_query_operate=E_QUERY_ARROW_SKIP; break; }*/ if(g_query_skip==E_QUERY){ g_query_skip=E_QUERY_SKIP; break; } } break; case KEY_UP: if(atsc_para.system_para.adpc_step) { if(g_query_operate==E_QUERY){ g_query_operate=E_QUERY_UP_STOP; break; } } break; case KEY_EXIT: if(atsc_para.system_para.adpc_step) { if(g_query_operate==E_QUERY){ g_query_operate=E_QUERY_ESC_EXIT; break; } if(g_query_operate==E_QUERY2){ g_query_operate=E_QUERY_ESC_SAVE; break; } if(g_query_save==E_QUERY){ g_query_save=E_QUERY_CANCEL; break; } // 1-6主界面的exit atsc_para.system_para.adpc_step =0; atsc_para.system_para.dpd_phase =0; atsc_para.system_para.adpc_err =0; atsc_para.system_para.adpc = ADPC_OFF; c256_bytewrite(EEPROM_DPD_ADDR,ADPC_OFF); ret_flg=1; /*dpd_set_clr(); dpd_exit(); ret_father_menu(); clear_wpp_max(); set_tsnr_update_flg(1);*/ } if((ret_flg==1)||((atsc_para.system_para.adpc_err<=DPD_IDLE_ERR) && (atsc_para.system_para.adpc_err>=DPD_STATE_ERR))){ atsc_para.system_para.adpc_err=0; dpd_set_clr(); dpd_exit(); ret_father_menu(); clear_wpp_max(); set_tsnr_update_flg(1); } need_refresh = TRUE; break; case KEY_LEFT_RIGHT: if((atsc_para.system_para.adpc_step==0)||(atsc_para.system_para.adpc_step==1)) { ra_update_flag = 1; enter_menu(FAC_LCD+1); } need_refresh = TRUE; break; default: break; } return need_refresh; } #if USE_TS2IP //" IP MASK GATE MUTI PORT TYPE LEN RECEIVE" BOOL proc_key_ts(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: break; case KEY_DOWN: break; case KEY_ENTER: enter_son_menu(p->item_index); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_ts_ip(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); add_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); dec_ipv4(p->item_index,ppara->ip); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_ts_mask(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); add_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); dec_ipv4(p->item_index,ppara->mask); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_ts_gate(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); add_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); dec_ipv4(p->item_index,ppara->gateway); need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_ts_muti(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); if(p->item_index<12) { add_ipv4(p->item_index,ppara->multi_address); } else { add_ipv4(p->item_index-12,ppara->ip_bak); } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); if(p->item_index<12) { dec_ipv4(p->item_index,ppara->multi_address); } else { dec_ipv4(p->item_index-12,ppara->ip_bak); } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } BOOL proc_key_ts_fec(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; switch(key) { case KEY_LEFT: if((p->item_index>=4)) left_flag=TRUE; else left_flag=FALSE; DEC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_RIGHT: if((p->item_index>=3) && (p->item_index<=5)) right_flag=TRUE; else right_flag=FALSE; INC_ITEM_INDEX(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_AGC_ON(); JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: NOT_SW_PARA(ppara->fec); break; case 1: /* if(ppara->row<20 ) { ppara->row++; } else { ppara->row = 4; }*/ break; case 2: /* if(ppara->col<20) { ppara->col++; } else { ppara->col = 1; }*/ break; case 3: ppara->delay+=1000; if(ppara->delay>1000) ppara->delay=0; break; case 4: ppara->delay+=100; if(ppara->delay>1000) ppara->delay=0; break; case 5: ppara->delay+=10; if(ppara->delay>1000) ppara->delay=0; break; case 6: ppara->delay+=1; if(ppara->delay>1000) ppara->delay=0; break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_AGC_ON(); JUDGE_CTRL(); para_change_flag = TRUE; switch(p->item_index) { case 0: NOT_SW_PARA(ppara->fec); break; case 1: /* if( (ppara->row>4) && (ppara->row<=20) ) { ppara->row--; } else { ppara->row = 20; }*/ break; case 2: /* if(ppara->col>1) { ppara->col--; } else { ppara->col = 20; }*/ break; case 3: if(ppara->delay>=1000) ppara->delay-=1000; else ppara->delay=1000; break; case 4: if(ppara->delay>=100) ppara->delay-=100; else ppara->delay=1000; break; case 5: if(ppara->delay>=10) ppara->delay-=10; else ppara->delay=1000; break; case 6: if(ppara->delay>1) ppara->delay-=1; else ppara->delay=1000; break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: JUDGE_AGC_ON(); JUDGE_CTRL(); log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PORT TYPE LEN RECEIVE " //" PORT TYPE LEN RECEIVE " BOOL proc_key_ts_misc(void *parg,uint8 key) { PMENU_S p = (PMENU_S)parg; BOOL need_refresh = FALSE; PTS_NET_STRUCT ppara = (PTS_NET_STRUCT)para_middle; switch(key) { case KEY_LEFT: DEC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_RIGHT: INC_ITEM_INDEX_ALL(p); need_refresh = TRUE; break; case KEY_UP: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->port+10000<=65535) ppara->port+=10000; else ppara->port = 65535; break; case 1: if(ppara->port+1000<=65535) ppara->port+=1000; else ppara->port = 65535; break; case 2: if(ppara->port+100<=65535) ppara->port+=100; else ppara->port = 65535; break; case 3: if(ppara->port+10<=65535) ppara->port+=10; else ppara->port = 65535; break; case 4: if(ppara->port+1<=65535) ppara->port+=1; else ppara->port = 65535; break; case 5: ppara->receive_type=ppara->receive_type?0:1; break; case 6: ppara->packet_len=ppara->packet_len?0:1; break; case 7: ppara->udp_rtp=ppara->udp_rtp?0:1; break; case 8: if(ppara->port_bak+10000<=65535) ppara->port_bak+=10000; else ppara->port_bak = 65535; break; case 9: if(ppara->port_bak+1000<=65535) ppara->port_bak+=1000; else ppara->port_bak = 65535; break; case 10: if(ppara->port_bak+100<=65535) ppara->port_bak+=100; else ppara->port_bak = 65535; break; case 11: if(ppara->port_bak+10<=65535) ppara->port_bak+=10; else ppara->port_bak = 65535; break; case 12: if(ppara->port_bak+1<=65535) ppara->port_bak+=1; else ppara->port_bak = 65535; break; default: break; } need_refresh = TRUE; break; case KEY_DOWN: JUDGE_CTRL(); switch(p->item_index) { case 0: if(ppara->port>=10000) ppara->port-=10000; else ppara->port = 0; break; case 1: if(ppara->port>=1000) ppara->port-=1000; else ppara->port = 0; break; case 2: if(ppara->port>=100) ppara->port-=100; else ppara->port = 0; break; case 3: if(ppara->port>=10) ppara->port-=10; else ppara->port = 0; break; case 4: if(ppara->port>=1) ppara->port-=1; else ppara->port = 0; break; case 5: NOT_SW_PARA(ppara->receive_type); break; case 6: NOT_SW_PARA(ppara->packet_len); break; case 7: NOT_SW_PARA(ppara->udp_rtp); break; case 8: if(ppara->port_bak>=10000) ppara->port_bak-=10000; else ppara->port_bak = 0; break; case 9: if(ppara->port_bak>=1000) ppara->port_bak-=1000; else ppara->port_bak = 0; break; case 10: if(ppara->port_bak>=100) ppara->port_bak-=100; else ppara->port_bak = 0; break; case 11: if(ppara->port_bak>=10) ppara->port_bak-=10; else ppara->port_bak = 0; break; case 12: if(ppara->port_bak>=1) ppara->port_bak-=1; else ppara->port_bak = 0; break; default: break; } need_refresh = TRUE; break; case KEY_ENTER: log_printf(LOG_DEBUG, I_USER_CFG, "Key save\n"); p->save_para_func(para_middle); para_change_flag = FALSE; need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } //" PORT TYPE LEN RECEIVE " BOOL proc_key_ts_ver(void *parg,uint8 key) { BOOL need_refresh = FALSE; switch(key) { case KEY_LEFT: case KEY_RIGHT: case KEY_UP: case KEY_DOWN: case KEY_ENTER: enter_menu(FAC_LCD+7); need_refresh = TRUE; break; case KEY_EXIT: ret_father_menu(); need_refresh = TRUE; break; default: break; } return need_refresh; } #endif #if AW_ATSC_5X static const MENU_S menu[] = { {0,0,0,0,0,0,refresh_logo1, proc_key_logo1, NULL, read_log_para, {" TX FWD SNR LIMD UIMD AMP ", " "}}, {1,0,0,0,0,0,refresh_logo2, proc_key_logo2, NULL, read_log_para, {" INPUT STATUS TS_RATE TEMP ", " "}}, {2,0,0,0,0,0,refresh_logo3, proc_key_logo3, NULL, read_log_para, {"RXFREQ TXFREQ GPS 1PPS CTRL ADPC", " "}}, {3,0,0,3,0,0,refresh_logo4, proc_key_logo4, NULL, NULL, {" Sat ANT Status Freq ", " "}}, {4,0,0,0,0,0,refresh_logo5, proc_key_logo5, NULL, NULL, {" RX_FREQ RSNR RSSI LOCK ", " "}}, {5,0,0,0,0,0,refresh_logo6, proc_key_logo6, NULL, NULL, {" AGC STATUS ", " "}}, {6,0,SYS_LCD+1,0,0,0,refresh_STSC30, proc_ATSC30_info, NULL, NULL, {" Not authorized to employ ATSC3.0 ", " without the approval of Anywave "}}, {7,1,0,0,0,0,refresh_logo7, proc_key_logo7, NULL, read_log_para, {" CFR_BUSY1 CFR_BUSY2 CFR_BUSY3 ", " "}}, {SYS_LCD,1,0,0,1,8,refresh_main,proc_key_main,NULL, NULL, {" Welcome to setting interface! ", " SYS RF FREQ TSID MODE TS CONFIG PA_CFG"}}, //主菜单 #if USE_KOREA_VERSION {SYS_LCD+1,2,SYS_LCD,0,0,6,refresh_sys1,proc_key_sys1,save_sys_para,read_sys_para, {" CTL MODE ADPC INPUT GPS TEST", " "}}, //SYSTEM1 菜单 #else {SYS_LCD+1,2,SYS_LCD,0,0,5,refresh_sys1,proc_key_sys1,save_sys_para,read_sys_para, {" CTL MODE ADPC INPUT GPS ", " "}}, //SYSTEM1 菜单 #endif {SYS_LCD+2,2,SYS_LCD,1,0,6,refresh_rf1,proc_key_rf1,save_rf_para,read_rf_para, {" TX RF POWER SSREF AGC LVL: ", " REF: "}}, {SYS_LCD+3,2,SYS_LCD,2,0,7,refresh_freq,proc_key_freq,save_freq_para,read_freq_para, {" RXFREQ TXFREQ HZ ", " "}}, {SYS_LCD+4,2,SYS_LCD,3,0,3,refresh_psts_menu,proc_key_psts_menu,NULL,NULL, {" Welcome to config TSID&PSIP interface ", " CTRL TSID PSIP "}}, //NETWORK1 菜单 {SYS_LCD+5,2,SYS_LCD,4,0,3,refresh_mode,proc_key_mode,save_mode_para,read_mode_para, {" SYNC TCP_C ZP1F PID_DET ", " "}}, //MODE 菜单 {SYS_LCD+6,3,SYS_LCD+5,0,0,0,refresh_pid,NULL,save_pid_para,NULL, {" DET_CNT DET_PID ", " "}}, //MODE 子菜单 {SYS_LCD+7,2,SYS_LCD,6,0,5,refresh_config,proc_key_config,NULL,NULL, {" Welcome to config interface! ", " ID BPS IP GATEWAY MASK "}}, //config 菜单 .去掉了UPGRADE {SYS_LCD+8,3,SYS_LCD+7,0,0,2, refresh_id,proc_key_id,save_config_para,read_config_para, {" ID: ", " "}}, //BPS {SYS_LCD+9,3,SYS_LCD+7,1,0,1, refresh_bps,proc_key_bps,save_config_para,read_config_para, {" BPS: ", " "}}, //BPS {SYS_LCD+10,3,SYS_LCD+7,2,0,12,refresh_ip,proc_key_ip,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+11,3,SYS_LCD+7,3,0,12,refresh_gate,proc_key_gate,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //GATEWAY {SYS_LCD+12,3,SYS_LCD+7,4,0,12,refresh_mask,proc_key_mask,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //MASK {SYS_LCD+14,2,SYS_LCD,5,0,6,refresh_ts,proc_key_ts,NULL,NULL, {" Welcome to TS_NET interface! ", " IP MASK GATE MUTI MISC FEC "}}, //ts 菜单 {SYS_LCD+15,3,SYS_LCD+14,0,0,12,refresh_ts_ip,proc_key_ts_ip,save_ts_ip,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+16,3,SYS_LCD+14,1,0,12,refresh_ts_mask,proc_key_ts_mask,save_ts_mask,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //MASK {SYS_LCD+17,3,SYS_LCD+14,2,0,12,refresh_ts_gate,proc_key_ts_gate,save_ts_gate,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //gate {SYS_LCD+18,3,SYS_LCD+14,3,0,24,refresh_ts_muti,proc_key_ts_muti,save_ts_muti,read_ts_para, {" ___ ___ ___ ___ BAK:___ ___ ___ ___ ", " . . . "}}, //multi {SYS_LCD+19,3,SYS_LCD+14,4,0,13,refresh_ts_misc,proc_key_ts_misc,save_ts_misc,read_ts_para, {" PORT TYPE LEN PROTOCOL PORT2 ", " "}}, //Other {SYS_LCD+20,3,SYS_LCD+14,5,0,7,refresh_ts_fec,proc_key_ts_fec,save_ts_fec,read_ts_para, {" FEC ROW COL DELAY ", " "}}, //Other #if ATSC_USA_AMP {SYS_LCD+21,2,SYS_LCD,7,0,3,refresh_pa_config,proc_key_pa_config,NULL,NULL, {" Welcome to config pac interface! ", " IP GATEWAY MASK "}}, {SYS_LCD+22,3,SYS_LCD+21,0,0,12,refresh_pa_ip,proc_key_pa_ip,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+23,3,SYS_LCD+21,1,0,12,refresh_pa_gate,proc_key_pa_gate,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //GATEWAY {SYS_LCD+24,3,SYS_LCD+21,2,0,12,refresh_pa_mask,proc_key_pa_mask,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //MASK #endif {SYS_LCD+25,3,SYS_LCD+4,0,0,1,refresh_psts_ctrl,proc_key_psts_ctrl,save_psts_para,read_psts_para, {" TS_EDIT ", " "}}, // CTRL {SYS_LCD+26,3,SYS_LCD+4,1,0,5,refresh_psts_id,proc_key_psts_id,save_psts_para,read_psts_para, {" TSID Channel_Num ", " "}}, // TSID {SYS_LCD+27,3,SYS_LCD+4,2,0,13,refresh_psts_sht,proc_key_psts_sht,save_psts_para,read_psts_para, {" Channel Sht_Name Maj_Num Min_Num ", " "}}, // PSIP {ADV_LCD,2,SYS_LCD,7,1,9,refresh_ad_m,proc_key_ad_m,NULL, NULL, {" Welcome to advanced interface! ", " AD1 MUTE AD3 DPD SN D&T ACCT PAC A_DPD "}}, //高级菜单 #if ADDR_CONFLICT_DISABLED {ADV_LCD+1,3,ADV_LCD,0,0,7,refresh_ad1,proc_key_ad1,save_ad1_para,read_ad1_para, {" PCRL Sw_Up Sw_Down Sw_RT PAC ASIOUT", // AD1 //{ADV_LCD+1,3,ADV_LCD,0,0,7,refresh_ad1,proc_key_ad1,save_ad1_para,read_ad1_para, {" PCRL Sw_Up Sw_Down PAC ASIOUT", " "}}, #else {ADV_LCD+1,3,ADV_LCD,0,0,7,refresh_ad1,proc_key_ad1,save_ad1_para,read_ad1_para, {" PCRL Sw_Up Sw_Down Sw_RT PAC ASIOUT",//0.for AD1 " "}}, #endif {ADV_LCD+2,3,ADV_LCD,1,0,9,refresh_ad2,proc_key_ad2,save_ad2_para,read_ad2_para, {" M_TS M_10M M_1PPS M_DLY ",//1.for MUTE " "}}, {ADV_LCD+3,3,ADV_LCD,2,0,6,refresh_ad3,proc_key_ad3,save_ad3_para,read_ad3_para, {" MP_LP CRM FWD_CAL CW MAX_POR RST ",//2.for AD3 " "}}, //{ADV_LCD+4,3,ADV_LCD,3,0,3,refresh_ad4,proc_key_ad4,save_ad4_para,read_ad4_para, {" PDT CFR ADPC FSSI ",//3.for DPD // " "}}, {ADV_LCD+4,3,ADV_LCD,3,0,3,refresh_ad4,proc_key_ad4,save_ad4_para,read_ad4_para, {" PDT ADPC FSSI ",//3.for DPD " "}}, {ADV_LCD+5,3,ADV_LCD,8,0,6,refresh_ad5,proc_key_ad5,save_ad5_para,read_ad5_para, {" TIME A_SNR A_IMD R_SNR R_IMD DPD C_T ", " "}}, {ADV_LCD+6,3,ADV_LCD,4,0,37,refresh_sn,proc_key_sn,save_sn_para,read_sn_para, {" SN: GUI_KEY: ",//4.for SN " PSIP_KEY: EAS_KEY: "}}, {ADV_LCD+7,3,ADV_LCD,5,0,12,refresh_ad_dt,proc_key_ad_dt,save_ad_dt_para,NULL, {" YY/MM/DD HH:MM:SS ",//5.for D&T " 20 "}}, {ADV_LCD+8,3,ADV_LCD,6,0,24,refresh_user,proc_key_user,save_user_para,read_user_para, {"NAME: PWD: ",//6.for ACCT " "}}, {ADV_LCD+9,3,ADV_LCD,7,0,0,refresh_pac1,proc_key_pac1,NULL,read_pac_para, {" Vol_9 Vol_12 Vol_50 PA_Fwd PA_Ref ",//7.for PAC " "}}, {ADV_LCD+10,3,ADV_LCD,7,0,0,refresh_pac2,proc_key_pac2,NULL,read_pac_para, {" PA_In GV VSWR PA_Temp PA_Lvl", " "}}, {ADV_LCD+11,3,ADV_LCD,7,0,0,refresh_pac3,proc_key_pac3,NULL,read_pac_para, {" Cur1_50 Cur2_50 Cur3_50 Cur4_50 ", " "}}, #if ADDR_CONFLICT_DISABLED// 10 {FAC_LCD+0,1,0,0,1,13,refresh_fac1,proc_key_fac1, NULL, NULL, {" Welcome to debugging interface! ", " RA WB WC WD WE WF RG WH RI WJ WK WL WM "}}, //工厂菜单主菜单1 #else {FAC_LCD+0,1,0,0,1,13,refresh_fac1,proc_key_fac1,NULL, NULL, {" Welcome to debugging interface! ", " RA WB WC WD WE WF RG WH RI WJ WK WL WM "}}, //工厂菜单主菜单1 #endif {FAC_LCD+1, 2,FAC_LCD,0,0,0,refresh_ra1,proc_key_ra1,NULL,read_ra_para, {" ENUM STA FAGC PHA DAGC IQDC PERR ", " "}}, //RA //{FAC_LCD+2, 2,FAC_LCD,1,0,17,refresh_wb1,proc_key_wb1,save_wb_para,read_wb_para, {" B0 B1 B2 HZ P0 GPSC CFR ALRM RST", // " "}}, //WB {FAC_LCD+2, 2,FAC_LCD,1,0,17,refresh_wb1,proc_key_wb1,save_wb_para,read_wb_para, {" B0 B1 B2 HZ P0 GPSC ALRM RST", " "}}, ////---------------------------@地址冲突,界面禁用--------------------------- #if ADDR_CONFLICT_DISABLED {FAC_LCD+3, 2,FAC_LCD,2,0,6,refresh_wc1,proc_key_wc1,save_wc_para,read_wc_para, {" GL DPDCTL ", " "}}, //WC {FAC_LCD+4, 2,FAC_LCD,3,0,8,refresh_wd1,proc_key_wd1,save_wd_para,read_wd_para, {" CFR CLIP SA SB SC ", " "}}, //WD #else {FAC_LCD+3, 2,FAC_LCD,2,0,10,refresh_wc1,proc_key_wc1,save_wc_para,read_wc_para, {" CRG PR CH CL DH DL TIL TFL TLS PG ", " "}}, //WC {FAC_LCD+4, 2,FAC_LCD,3,0,10,refresh_wd1,proc_key_wd1,save_wd_para,read_wd_para, {" TWK PFG PDG FEG DEG LCT SA SB SC SD", " "}}, //WD #endif {FAC_LCD+5, 2,FAC_LCD,4,0,14,refresh_we1,proc_key_we1,save_we_para,read_we_para, {" CH POWER LTN DSC SNC DPG_____ SPC", " "}}, //WE #if USE_ADPC_LONG ////---------------------------@地址冲突,界面禁用--------------------------- #if ADDR_CONFLICT_DISABLED {FAC_LCD+6, 2,FAC_LCD,5,0,0,refresh_wf1,proc_key_wf1,save_wf_para,read_wf_para, {" WF coming soon... ", " "}}, //WF #else {FAC_LCD+6, 2,FAC_LCD,5,0,18,refresh_wf1,proc_key_wf1,save_wf_para,read_wf_para, {" PDT SP EQUC L N M AH AL AGC G TH", " "}}, //WF #endif #else {FAC_LCD+6, 2,FAC_LCD,5,0,16,refresh_wf1,proc_key_wf1,save_wf_para,read_wf_para, {" PDT SP EQUC L N M AH AL AGC G ", " "}}, //WF #endif {FAC_LCD+7, 2,FAC_LCD,6,0,0,refresh_rg1,proc_key_rg1,NULL,read_rg_para, {"ATSC: FPGA: ", "MCU: DRYLOOP: "}}, //RG ////---------------------------@地址冲突,界面禁用--------------------------- #if ADDR_CONFLICT_DISABLED {FAC_LCD+8, 2,FAC_LCD,7,0,5,refresh_wh1,proc_key_wh1,save_wh_para,read_wh_para, {"CHIP BALH BALL TEMP ", " "}}, //WH #else {FAC_LCD+8, 2,FAC_LCD,7,0,14,refresh_wh1,proc_key_wh1,save_wh_para,read_wh_para, {" PD BW RALH RALL BALH BALL RWRT FUNC PAC", " "}}, //WH #endif //--------------------------------------------------------------------------------- {FAC_LCD+9, 2,FAC_LCD,8,0,0,refresh_ri1,proc_key_ri1,NULL,NULL, {" ICNT DCNT FIFO M_SNR M_IMD ", //{FAC_LCD+9, 2,FAC_LCD,8,0,0,refresh_ri1,proc_key_ri1,NULL,NULL, {" ICNT DCNT FIFO M_SNR M_IMD RST_T ", " "}}, //RI #if DEBUG_AUTO_ADPC {FAC_LCD+10,2,FAC_LCD,9,0,8,refresh_wj1,proc_key_wj1,save_wj_para,read_wj_para, {" GMT P_C RF_DLY MODE S I S2 I2", " "}}, //WJ #else {FAC_LCD+10,2,FAC_LCD,9,0,10,refresh_wj1,proc_key_wj1,save_wj_para,read_wj_para, {" GMT P_C RF_DLY MODE PIC CTLDPD P10", " "}}, //WJ #endif {FAC_LCD+11,2,FAC_LCD,10,0,13,refresh_wk,proc_key_wk,save_wk_para,read_wk_para, {" ALARM_IP SS MAC ", " "}}, //WK {FAC_LCD+12,2,FAC_LCD,11,0,7,refresh_wl,proc_key_wl,save_wl_para,read_wl_para, {" SPE EEBK TS2IP EXC RO SFT ", " "}}, //WL /* {FAC_LCD+5,3,FAC_LCD,4,0,26,refresh_we1,proc_key_we1,save_we_para,read_we_para, {"DST TST WPPTH ERRTH CNTTH AMPSAT ST TM ", " "}} */ {FAC_LCD+13,2,FAC_LCD,12,0,26,refresh_wm,proc_key_wm,save_wm_para,read_wm_para, {"DST TST WPPTH ERRTH CNTTH AMPSAT ST TM ", //WM " "}}, {FAC_LCD+14,2,FAC_LCD,6,0,0,refresh_ts_ver,proc_key_ts_ver,NULL,NULL, {" ", " "}}, // /* {SPE_LCD+0,2,SYS_LCD,0,0,0,refresh_update,proc_key_update,NULL, NULL, {" WAIT A MOMENT ", " "}}, //update */ #if 1 {SPE_LCD+0,3,SYS_LCD,0,0,0,refresh_update_dpd,proc_key_update_dpd,NULL, NULL, {" WAIT A MOMENT ", " "}}, //update #endif #if ETH_UPGRADE {SPE_LCD+1,3,SYS_LCD+7,5,0,2,refresh_up_confirm_fac,proc_key_up_confirm,NULL,read_up_confirm, {" Enter Upgrade Mode ? ", " YES NO "}}, //confirm #endif {SPE_LCD+2,2,ADV_LCD,0,0,2,refresh_up_confirm_ad3,proc_key_rst_confirm,NULL,read_up_confirm, {" Reset Factory Settings - Change Power, ", " Confirm? YES NO "}}, //confirm cus {SPE_LCD+3,2,FAC_LCD,0,0,2,refresh_up_confirm_fac,proc_key_fac_confirm,NULL,read_up_confirm, {" Reset confirm? ", " YES NO "}}, //confirm fac {SPE_LCD+4,3,SYS_LCD,0,0,2,refresh_cycle_power2,proc_key_upProc,NULL,NULL, {" FPGA Upgrade Succeed! ", " "}}, {SPE_LCD+5,3,SYS_LCD,0,0,0,refresh_waiting,proc_key_waiting,NULL,NULL, {" WAITING ... ", " "}}, {SPE_LCD+6,3,SYS_LCD,0,0,2,refresh_alarm_info,proc_key_info_proc,NULL,NULL, {" RFAGC failed - Power low! ", " "}}, {SPE_LCD+7,3,SYS_LCD,0,0,0,refresh_cfg_waiting,proc_key_cfg_waiting,NULL,NULL, {" WAIT A MOMENT .... ", " "}}, }; #else //美国版本,没有gps static const MENU_S menu[] = { {0,0,0,0,0,0,refresh_logo1, proc_key_logo1, NULL, read_log_para, {" TX FWD SNR LIMD UIMD AMP ", " "}}, {1,0,0,0,0,0,refresh_logo2, proc_key_logo2, NULL, read_log_para, {" INPUT STATUS TS_RATE TEMP ", " "}}, {2,0,0,0,0,0,refresh_logo3, proc_key_logo3, NULL, read_log_para, {"RXFREQ TXFREQ AGC GPS 1PPS CTRL ADPC", " "}}, {4,0,0,0,0,0,refresh_logo5, proc_key_logo5, NULL, NULL, {" RXFREQ RSNR RSSI LOCK ", " "}}, {SYS_LCD,1,0,0,1,7,refresh_main,proc_key_main,NULL, NULL, {" Welcome to setting interface! ", " SYSTEM RF FREQ MODE CONFIG TS PA_CFG"}}, //主菜单 {SYS_LCD+1,2,SYS_LCD,0,0,3,refresh_sys1,proc_key_sys1,save_sys_para,read_sys_para, {" CTL ADPC INPUT ", " "}}, //SYSTEM1 菜单 {SYS_LCD+2,2,SYS_LCD,1,0,6,refresh_rf1,proc_key_rf1,save_rf_para,read_rf_para, {" TX RF POWER SSREF AGC LVL: ", " REF: "}}, {SYS_LCD+3,2,SYS_LCD,2,0,7,refresh_freq,proc_key_freq,save_freq_para,read_freq_para, {" RXFREQ TXFREQ HZ ", " "}}, {SYS_LCD+5,2,SYS_LCD,3,0,3,refresh_mode,proc_key_mode,save_mode_para,read_mode_para, {" SYNC TCP_C ZP1F PID_DET ", " "}}, //MODE 菜单 {SYS_LCD+6,3,SYS_LCD+5,0,0,0,refresh_pid,NULL,save_pid_para,NULL, {" DET_CNT DET_PID ", " "}}, //MODE 子菜单 {SYS_LCD+7,2,SYS_LCD,4,0,6,refresh_config,proc_key_config,NULL,NULL, {" Welcome to config interface! ", " ID BPS IP GATEWAY MASK UPGRADE "}}, //config 菜单 {SYS_LCD+8,3,SYS_LCD+7,0,0,2, refresh_id,proc_key_id,save_config_para,read_config_para, {" ID: ", " "}}, //BPS {SYS_LCD+9,3,SYS_LCD+7,1,0,1, refresh_bps,proc_key_bps,save_config_para,read_config_para, {" BPS: ", " "}}, //BPS {SYS_LCD+10,3,SYS_LCD+7,2,0,12,refresh_ip,proc_key_ip,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+11,3,SYS_LCD+7,3,0,12,refresh_gate,proc_key_gate,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //GATEWAY {SYS_LCD+12,3,SYS_LCD+7,4,0,12,refresh_mask,proc_key_mask,save_config_para,read_config_para, {" ___ ___ ___ ___ ", " . . . "}}, //MASK {SYS_LCD+14,2,SYS_LCD,5,0,6,refresh_ts,proc_key_ts,NULL,NULL, {" Welcome to TS_NET interface! ", " IP MASK GATE MUTI MISC FEC "}}, //ts 菜单 {SYS_LCD+15,3,SYS_LCD+14,0,0,12,refresh_ts_ip,proc_key_ts_ip,save_ts_ip,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+16,3,SYS_LCD+14,1,0,12,refresh_ts_mask,proc_key_ts_mask,save_ts_mask,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //MASK {SYS_LCD+17,3,SYS_LCD+14,2,0,12,refresh_ts_gate,proc_key_ts_gate,save_ts_gate,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //gate {SYS_LCD+18,3,SYS_LCD+14,3,0,12,refresh_ts_muti,proc_key_ts_muti,save_ts_muti,read_ts_para, {" ___ ___ ___ ___ ", " . . . "}}, //multi {SYS_LCD+19,3,SYS_LCD+14,4,0,8,refresh_ts_misc,proc_key_ts_misc,save_ts_misc,read_ts_para, {" PORT TYPE LEN PROTOCOL ", " "}}, //Other {SYS_LCD+20,3,SYS_LCD+14,5,0,7,refresh_ts_fec,proc_key_ts_fec,save_ts_fec,read_ts_para, {" FEC ROW COL DELAY ", " "}}, //Other #if ATSC_USA_AMP {SYS_LCD+21,2,SYS_LCD,6,0,3,refresh_pa_config,proc_key_pa_config,NULL,NULL, {" Welcome to config pac interface! ", " IP GATEWAY MASK "}}, {SYS_LCD+22,3,SYS_LCD+21,0,0,12,refresh_pa_ip,proc_key_pa_ip,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //IP {SYS_LCD+23,3,SYS_LCD+21,1,0,12,refresh_pa_gate,proc_key_pa_gate,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //GATEWAY {SYS_LCD+24,3,SYS_LCD+21,2,0,12,refresh_pa_mask,proc_key_pa_mask,save_pa_config,read_pa_config, {" ___ ___ ___ ___ ", " . . . "}}, //MASK #endif {ADV_LCD,2,SYS_LCD,7,1,7,refresh_ad_m,proc_key_ad_m,NULL, NULL, {" Welcome to advanced interface! ", " AD1 MUTE TX_EX DPD SN D&T PAC "}}, //高级菜单 {ADV_LCD+1,3,ADV_LCD,0,0,6,refresh_ad1,proc_key_ad1,save_ad1_para,read_ad1_para, {" PCRL Sw_Up Sw_Down Sw_RT PAC ", " "}}, //AD1 {ADV_LCD+2,3,ADV_LCD,1,0,1,refresh_ad2,proc_key_ad2,save_ad2_para,read_ad2_para, {" M_TS ", " "}}, //MUTE {ADV_LCD+3,3,ADV_LCD,2,0,4,refresh_ad3,proc_key_ad3,save_ad3_para,read_ad3_para, {" RC_CMD FWD_CAL CW RST ", " "}}, //TX_EX {ADV_LCD+4,3,ADV_LCD,3,0,3,refresh_ad4,proc_key_ad4,save_ad4_para,read_ad4_para, {" PDT CFR ADPC FSSI ", " "}}, //DPD {ADV_LCD+5,3,ADV_LCD,9,0,6,refresh_ad5,proc_key_ad5,save_ad5_para,read_ad5_para, {" TIME A_SNR A_IMD R_SNR R_IMD DPD C_T ", " "}}, //A_DPD {ADV_LCD+6,3,ADV_LCD,4,0,21,refresh_sn,proc_key_sn,save_sn_para,read_sn_para, {" SN GUI_KEY ", " "}}, {ADV_LCD+7,3,ADV_LCD,5,0,12,refresh_ad_dt,proc_key_ad_dt,save_ad_dt_para,NULL, {" YY/MM/DD HH:MM:SS ", " 20 "}}, {ADV_LCD+8,3,ADV_LCD,6,0,0,refresh_pac1,proc_key_pac1,NULL,read_pac_para, {" Vol_9 Vol_12 Vol_50 PA_Fwd PA_Ref ", " "}}, {ADV_LCD+9,3,ADV_LCD,6,0,0,refresh_pac2,proc_key_pac2,NULL,read_pac_para, {" PA_In GV VSWR PA_Temp PA_Lvl", " "}}, {ADV_LCD+10,3,ADV_LCD,6,0,0,refresh_pac3,proc_key_pac3,NULL,read_pac_para, {" Cur1_50 Cur2_50 Cur3_50 Cur4_50 ", " "}}, {FAC_LCD+0,1,0,0,1,12,refresh_fac1,proc_key_fac1,NULL, NULL, {" Welcome to debugging interface! ", " RA WB WC WD WE WF RG WH RI WJ WK WL "}}, //工厂菜单主菜单1 {FAC_LCD+1, 2,FAC_LCD,0,0,0,refresh_ra1,proc_key_ra1,NULL,read_ra_para, {" ENUM STA FAGC PHA DAGC IQDC PERR ", " "}}, //RA {FAC_LCD+2, 2,FAC_LCD,1,0,17,refresh_wb1,proc_key_wb1,save_wb_para,read_wb_para, {" B0 B1 B2 HZ P0 B8 GPSC CFR ALRM RST", " "}}, //WB {FAC_LCD+3, 2,FAC_LCD,2,0,10,refresh_wc1,proc_key_wc1,save_wc_para,read_wc_para, {" CRG PR CH CL DH DL TIL TFL TLS PG ", " "}}, //WC {FAC_LCD+4, 2,FAC_LCD,3,0,10,refresh_wd1,proc_key_wd1,save_wd_para,read_wd_para, {" TWK PFG PDG FEG DEG LCT SA SB SC SD ", " "}}, //WD {FAC_LCD+5, 2,FAC_LCD,4,0,14,refresh_we1,proc_key_we1,save_we_para,read_we_para, {" CH POWER LTN DSC SNC DPG_____ FSC SPC", " "}}, //WE #if USE_ADPC_LONG {FAC_LCD+6, 2,FAC_LCD,5,0,18,refresh_wf1,proc_key_wf1,save_wf_para,read_wf_para, {" PDT SP EQUC L N M AH AL AGC G TH", " "}}, //WF #else {FAC_LCD+6, 2,FAC_LCD,5,0,16,refresh_wf1,proc_key_wf1,save_wf_para,read_wf_para, {" PDT SP EQUC L N M AH AL AGC G ", " "}}, //WF #endif {FAC_LCD+7, 2,FAC_LCD,6,0,0,refresh_rg1,proc_key_rg1,NULL,read_rg_para, {"ATSC: FPGA: ", "MCU: DRYLOOP: "}}, //RG {FAC_LCD+8, 2,FAC_LCD,7,0,14,refresh_wh1,proc_key_wh1,save_wh_para,read_wh_para, {" PD BW RALH RALL BALH BALL RWRT FUNC PAC", " "}}, //WH {FAC_LCD+9, 2,FAC_LCD,8,0,0,refresh_ri1,proc_key_ri1,NULL,NULL, {" ICNT DCNT FIFO M_SNR M_IMD RST_T ", " "}}, //RI #if DEBUG_AUTO_ADPC {FAC_LCD+10,2,FAC_LCD,9,0,8,refresh_wj1,proc_key_wj1,save_wj_para,read_wj_para, {" GMT P_C RF_DLY MODE S I S2 I2", " "}}, //WJ #else {FAC_LCD+10,2,FAC_LCD,9,0,4,refresh_wj1,proc_key_wj1,save_wj_para,read_wj_para, {" GMT P_C RF_DLY MODE ", " "}}, //WJ #endif {FAC_LCD+11,2,FAC_LCD,10,0,19,refresh_wk,proc_key_wk,save_wk_para,read_wk_para, {" ALARM_IP SS MAC ", " "}}, //WK {FAC_LCD+12,2,FAC_LCD,11,0,4,refresh_wl,proc_key_wl,save_wl_para,read_wl_para, {" SPE EEBK TS2IP ", " "}}, //WL {FAC_LCD+14,2,FAC_LCD,6,0,0,refresh_ts_ver,proc_key_ts_ver,NULL,NULL, {" ", " "}}, //Ver {SPE_LCD+0,2,SYS_LCD,0,0,0,refresh_update,proc_key_update,NULL, NULL, {" WAIT A MOMENT ", " "}}, //update #if ETH_UPGRADE {SPE_LCD+1,2,SYS_LCD+7,0,0,2,refresh_up_confirm_fac,proc_key_up_confirm,NULL,read_up_confirm, {" Enter Upgrade Mode ? ", " YES NO "}}, //confirm #endif {SPE_LCD+2,2,ADV_LCD,0,0,2,refresh_up_confirm_ad3,proc_key_rst_confirm,NULL,read_up_confirm, {" Reset Factory Settings - Change Power, ", " Confirm? YES NO "}}, //confirm cus {SPE_LCD+3,2,FAC_LCD,0,0,2,refresh_up_confirm_fac,proc_key_fac_confirm,NULL,read_up_confirm, {" Reset confirm? ", " YES NO "}}, //confirm fac }; #endif uint32 lcd_get_atsc_menu_size(void) { return SIZE_OF_ARRAY(menu); } //传入参数应为子菜单在该子目录中的序号 void enter_son_menu(uint32 index) { uint32 i; MENU_S *p; uint32 size; p = (MENU_S*)&menu[0]; size = lcd_get_atsc_menu_size(); for(i = 0;ilevel==1+current_menu->level)&&(p->pre_index==current_menu->index)) { if(p->level_index == index) { memcpy(&menu_temp,p,sizeof(MENU_S)); //不能直接使用全局屏幕参数 current_menu = &menu_temp; current_menu->item_index = 0; // current_menu = p; // current_menu->item_index = 0; para_change_flag = FALSE; if(current_menu->read_para_func) { memset(para_middle,0,sizeof(para_middle)); current_menu->read_para_func(); } return; } } } } //传入参数应为该菜单的序号 该函数必须放在menu定义的后边 否则会出错 void enter_menu(uint32 index) { uint32 i; MENU_S *p; uint32 size; p = (MENU_S*)&menu[0]; size = lcd_get_atsc_menu_size(); for(i = 0;iindex==index) { memcpy(&menu_temp,p,sizeof(MENU_S)); current_menu = &menu_temp; current_menu->item_index = 0; if(current_menu->read_para_func) { memset(para_middle,0,sizeof(para_middle)); current_menu->read_para_func();//读取参数 } return; } } } //不需要参数? void ret_father_menu(void) { uint32 i; const MENU_S *p = &menu[0]; uint32 size; uint16 temp = 0; if(para_change_flag==TRUE) { para_change_flag= FALSE; if(current_menu->read_para_func) current_menu->read_para_func(); return; } p = (MENU_S*)&menu[0]; size = lcd_get_atsc_menu_size(); for(i=0;iindex==current_menu->pre_index) //父菜单序号 { temp = current_menu->level_index; memcpy(&menu_temp,p,sizeof(MENU_S)); current_menu = &menu_temp; current_menu->item_index = temp; if(current_menu->item_index>=current_menu->item_total) current_menu->item_index = 0; para_change_flag = FALSE; if(current_menu->read_para_func) { memset(para_middle,0,sizeof(para_middle)); current_menu->read_para_func();//从读取相应子参数到到middle } return; } } } uint32 check_lcd_light(uint32 type) { static uint32 non_key_time = 0; if(type == TYPE_SEC) { if(lcd_status.light == LCD_LIGHT_ON) { if(--lcd_status.non_op_time==0) { lcd_status.light = LCD_LIGHT_OFF; light_off(); } } if(s_check_signal.idle_flag == FALSE) { non_key_time++; if(non_key_time>NON_OP_RETURN_LOG) { s_check_signal.idle_flag = TRUE; } } } else { non_key_time = 0; s_check_signal.idle_flag = FALSE; lcd_status.non_op_time = NON_OP_MAX_TIME; if(lcd_status.light == LCD_LIGHT_OFF) { lcd_status.light = LCD_LIGHT_ON; light_on(); return 1; //第一次按键不响应,只亮屏幕 } } return 0; } //液晶常亮 void light_on_forever(void) { (void)check_lcd_light(TYPE_KEY); lcd_status.non_op_time = (uint32)-1; } static void check_key_valid(uint8 *pkey) { static BOOL key_flag = FALSE; //是否处于延时中 static uint32 tick_bak = 0; static uint8 key = KEY_NULL; *pkey = KEY_NULL; if(key_flag==FALSE) { key = get_key_value(); if(key!=KEY_NULL) { tick_bak = get_sys_tick(); key_flag = TRUE; *pkey = KEY_NULL; } } else { if(check_delay_over(&tick_bak,KEY_JITTER_TIME/PER_TICK_MS)) { key_flag = FALSE; if(key!=get_key_value()) *pkey = KEY_NULL; else *pkey = key; } } } static pthread_mutex_t mtx_lcd_proc = PTHREAD_MUTEX_INITIALIZER; static void proc_lcd_key_unlocked(uint8 key) { static S_SYS_TIME bak_time = {0xff,}; static S_SYS_TIME now_time = {0,}; static uint32 key_bak_time = 0; static uint8 key_bak = 0xfe; //若当前无按键,读取时间,若秒变更,刷新,否则直接返回 if(key == KEY_NULL) { if(bak_time.sec == 0xff) { get_sys_time(&bak_time); return; } else { get_sys_time(&now_time); //UPDATE屏刷新速度要快 if((current_menu->index == SPE_LCD+0)||((current_menu->index==SYS_LCD+2)&&(atsc_para.system_para.ctrl==CTRL_REMOTE))) { static uint32 tick_cycle = 0; if(now_time.sec!=bak_time.sec) { (void)check_lcd_light(TYPE_SEC); get_sys_time(&bak_time); } if(atsc_para.system_para.dpd_phase>=4&&atsc_para.system_para.dpd_phase<=5){ if(check_delay_over(&tick_cycle,20)==FALSE) return; } else{ if(check_delay_over(&tick_cycle,200)==FALSE) return; } /*if(check_delay_over(&tick_cycle,20)==FALSE) // 200ms return;*/ if(current_menu->refresh_func) { current_menu->refresh_func((void*)current_menu,(void*)NULL); lcd_write_cache(); } return; } //0.5s刷新一次 if(current_menu->index == ADV_LCD+4) { static uint32 tick_cycle = 0; st_extend_state.disable_up_flg=1; if(now_time.sec!=bak_time.sec) { (void)check_lcd_light(TYPE_SEC); get_sys_time(&bak_time); } if(check_delay_over(&tick_cycle,500)==FALSE) // 500ms return; if(current_menu->refresh_func) { current_menu->refresh_func((void*)current_menu,(void*)NULL); lcd_write_cache(); } return; } else st_extend_state.disable_up_flg=0; if(now_time.sec==bak_time.sec) { return; } else //秒变化,重新刷新 { (void)check_lcd_light(TYPE_SEC); get_sys_time(&bak_time); if(current_menu->refresh_func) { current_menu->refresh_func((void*)current_menu,(void*)NULL); g_last_menu_id = current_menu->index; lcd_write_cache(); } } } } else { get_sys_time(&bak_time); //更新本地时间 if(check_lcd_light(TYPE_KEY)) //触发屏幕由灭变亮的按键,不响应,直接返回 { key_bak_time = get_sys_tick(); key_bak = key; return; } if(key_bak == key) //若两次按键完全相同,判断间隔 { switch(key) { case KEY_EXIT: if((key_bak_time+KEY_EXIT_INTERVAL/PER_TICK_MS)>get_sys_tick()) return; break; case KEY_ENTER: if((key_bak_time+KEY_ENTER_INTERVAL/PER_TICK_MS)>get_sys_tick()) return; break; default: if((key_bak_time+KEY_DEFAULT_INTERVAL/PER_TICK_MS)>get_sys_tick()) return; break; } } key_bak_time = get_sys_tick(); key_bak = key; //响应完按键后,若需要,重新刷新一次屏幕 if(current_menu->key_func) { if(current_menu->key_func((void*)current_menu,key)) { current_menu->refresh_func((void*)current_menu,(void*)NULL); lcd_write_cache(); } } } } static void proc_lcd_key(uint8 key) { if(key == KEY_NULL) { if(pthread_mutex_trylock(&mtx_lcd_proc) != 0) return; } else { pthread_mutex_lock(&mtx_lcd_proc); } proc_lcd_key_unlocked(key); pthread_mutex_unlock(&mtx_lcd_proc); } void proc_lcd(void) { uint8 key = KEY_NULL; check_key_valid(&key); proc_lcd_key(key); } void set_menu_init(void) { memcpy(&menu_temp,&menu[0],sizeof(MENU_S)); current_menu = &menu_temp; } void lcd_start_update(void) { enter_menu(SPE_LCD); proc_lcd(); } void realtime_update_fpga_version_reg() { static uint32 stc_cnt=0; static uint32 stc_pr_cnt=0; atsc_para.fpga_ver_tmp[1] = fpga_byte_read(0x1,0xFB); atsc_para.fpga_ver_tmp[2] = fpga_byte_read(0x1,0xFC); atsc_para.fpga_ver_tmp[3] = fpga_byte_read(0x1,0xFD); atsc_para.fpga_ver_tmp[4] = fpga_byte_read(0x1,0xFE); if(stc_cnt>=5 && stc_pr_cnt<5){ stc_pr_cnt++; stc_cnt = 0; printf("up_ver_reg : 0x%x 0x%x 0x%x 0x%x \n", atsc_para.fpga_ver_tmp[1],atsc_para.fpga_ver_tmp[2],atsc_para.fpga_ver_tmp[3],atsc_para.fpga_ver_tmp[4] ); } stc_cnt++; //memset(atsc_para.rg_para.fpga, 0, sizeof(atsc_para.rg_para.fpga)); //sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_I_%02d%02d%02d", // atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, // atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3],atsc_para.rg_para.fpga[4]); } void init_version_info(void) { uint32 i; for(i=0; i<5; i++) { atsc_para.rg_para.attr[i] = fpga_byte_read(0x1,0xFA+i); } atsc_para.rg_para.flag = fpga_byte_read(0x1,0xF9); atsc_para.rg_para.fla = fpga_byte_read(0x1,0xF8); memcpy(atsc_para.rg_para.attr, "EMV7.1_DPD2.0", sizeof("EMV7.1_DPD2.0")); atsc_para.rg_para.fpga[1] = fpga_byte_read(0x1,0xFB); atsc_para.rg_para.fpga[2] = fpga_byte_read(0x1,0xFC); atsc_para.rg_para.fpga[3] = fpga_byte_read(0x1,0xFD); atsc_para.rg_para.fpga[4] = fpga_byte_read(0x1,0xFE); //暂时先这样 #if 1 sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3],atsc_para.rg_para.fpga[4]); #else if(atsc_para.rg_para.fla ==0x0) { if(atsc_para.rg_para.flag==0x22) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_F_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x24) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dC_F_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x21) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_F_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x32) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_F_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x34) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_F_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1d_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); } else if(atsc_para.rg_para.fla==0x1) { if(atsc_para.rg_para.flag==0x22) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x24) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dC_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x21) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x32) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x34) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_I_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1d_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); } else { if(atsc_para.rg_para.flag==0x22) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x24) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dC_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag==0x21) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x32) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dA_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else if(atsc_para.rg_para.flag == 0x34) sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1dB_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); else sprintf((char *)atsc_para.rg_para.fpga,"V%01d.%1d_%02d%02d%02d", atsc_para.rg_para.fpga[1]/10,atsc_para.rg_para.fpga[1]%10, atsc_para.rg_para.fpga[2],atsc_para.rg_para.fpga[3], atsc_para.rg_para.fpga[4]); } #endif #if USE_DRY_LOOP #if USE_DRYLOOP_I2C atsc_para.rg_para.dryloop[0] = dryloop_read(3); //版本号 if(atsc_para.rg_para.dryloop[0]==0x02) atsc_para.rg_para.dryloop[0]=10; atsc_para.rg_para.dryloop[1] = dryloop_read(4); //年 atsc_para.rg_para.dryloop[2] = dryloop_read(5); //月 atsc_para.rg_para.dryloop[3] = dryloop_read(6); //日 返回的均为十进制模式 #else //FALSE表明DRYLOOP未接或未尚未读到版本号 if(dryloop_version_flag == FALSE) { atsc_para.rg_para.dryloop[0] = INVALID_DATA; } #endif sprintf((char *)atsc_para.rg_para.dryloop,"V%01d.%1d ", atsc_para.rg_para.dryloop[0]/10,atsc_para.rg_para.dryloop[0]%10); #endif memcpy(&atsc_para.rg_para.mcu[0],SW_VERSION,sizeof(SW_VERSION)); } void reset_auto_apdc_para(void) { s_check_signal.full_flag = FALSE; s_check_signal.index = 0; s_check_signal.tsnr_abm_time=0; s_check_signal.l_imd_abm_time=0; s_check_signal.u_imd_abm_time=0; s_check_signal.tsnr_sum = 0; s_check_signal.l_imd_sum = 0; s_check_signal.u_imd_sum = 0; memset(s_check_signal.tsnr,0,sizeof(s_check_signal.tsnr)); memset(s_check_signal.l_imd,0,sizeof(s_check_signal.l_imd)); memset(s_check_signal.u_imd,0,sizeof(s_check_signal.u_imd)); } void check_signal(void) { uint16 t_tsnr; uint8 tsnr = 0; uint8 l_imd = 0; uint8 u_imd = 0; S_ADVANCE5_PARA *pad5 ; S_SYSTEM_PARA *psys; S_RI_PARA *pri; pad5 = &atsc_para.ad5_para; psys= &atsc_para.system_para; pri = &atsc_para.ri_para; if(!pad5->c_t) //MAX_AUTO_UPDATE_TIME return; if(psys->adpc!=ADPC_HOLD) //HOLD状态下才判断 return; if(!s_check_signal.idle_flag) //操作空闲时才处理 return; if(update_adpc_para_flag.flag) //等待更新参考值 return; #if DEBUG_AUTO_ADPC l_imd = atsc_para.wj_para.imd*2; u_imd = atsc_para.wj_para.imd*2; tsnr = atsc_para.wj_para.snr*2; #else get_tsnr_limd_uimd(&t_tsnr, &l_imd, &u_imd); tsnr = t_tsnr; #endif l_imd>>=1; u_imd>>=1; tsnr>>=1; //返回值处理 1/2 l_imd+=11; u_imd+=11; if(tsnr<=TSNR_VALID_HOLD) { reset_auto_apdc_para(); return; } if(s_check_signal.l_imd[s_check_signal.index]>l_imd) s_check_signal.l_imd_sum-=(s_check_signal.l_imd[s_check_signal.index]-l_imd); else s_check_signal.l_imd_sum+=(l_imd-s_check_signal.l_imd[s_check_signal.index]); if(s_check_signal.u_imd[s_check_signal.index]>u_imd) s_check_signal.u_imd_sum-=(s_check_signal.u_imd[s_check_signal.index]-u_imd); else s_check_signal.u_imd_sum+=(u_imd-s_check_signal.u_imd[s_check_signal.index]); if(s_check_signal.tsnr[s_check_signal.index]>tsnr) s_check_signal.tsnr_sum-=(s_check_signal.tsnr[s_check_signal.index]-tsnr); else s_check_signal.tsnr_sum+=(tsnr-s_check_signal.tsnr[s_check_signal.index]); s_check_signal.l_imd[s_check_signal.index] = l_imd; s_check_signal.u_imd[s_check_signal.index] = u_imd; s_check_signal.tsnr[s_check_signal.index] = tsnr; s_check_signal.index++; if(s_check_signal.index>=CHECK_SIGNAL_NUM) { s_check_signal.index = 0; s_check_signal.full_flag = TRUE; } // 1. tsnr>15 // 2. limd_suma_imd && uimd_sum>a_imd && tsnr_sum>a_snr) // ||(limd_sumr_snr) if(s_check_signal.full_flag) { if(s_check_signal.tsnr_sum>CHECK_SIGNAL_NUM*TSNR_VALID_HOLD) { if((s_check_signal.l_imd_suma_imd) ||(s_check_signal.u_imd_suma_imd) ||(s_check_signal.tsnr_suma_snr)) //小于绝对门限 { //[idx=127] sum tsnr=44 limd=52 uimd=52, th asnr=50 aimd=31 rsnr=2 rimd=4 msnr=31 mimd=31 printf("signal checked absolute error, exc auto dpd\n"); printf(" [idx=%d] sum tsnr=%d limd=%d uimd=%d, th asnr=%d aimd=%d rsnr=%d rimd=%d msnr=%d mimd=%d\n", s_check_signal.index, s_check_signal.tsnr_sum/CHECK_SIGNAL_NUM, s_check_signal.l_imd_sum/CHECK_SIGNAL_NUM, s_check_signal.u_imd_sum/CHECK_SIGNAL_NUM, pad5->a_snr, pad5->a_imd, pad5->r_snr, pad5->r_imd, pri->m_snr, pri->m_imd ); reset_auto_apdc_para(); pad5->use_dpd =pad5->dpd; //pad5->use_dpd = 1; //全新的ADPC if(pad5->use_dpd==1){//0-CLR 1-NEW 2-CON dpd_set_clr(); atsc_para.system_para.adpc = ADPC_OFF; } psys->adpc_err = 0; if(pad5->use_dpd==3)//continue with only lin psys->adpc = ADPC_UPDATE2; else psys->adpc = ADPC_UPDATE1; c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); //fpga_write_adpc(psys->adpc); adpc_source_udp = 0; adpc_source_web = 1; auto_update = TRUE; s_check_signal.adpc_flag =TRUE; enter_update_lcd(); goto END; } if((s_check_signal.l_imd_sum>CHECK_SIGNAL_NUM*pad5->a_imd) &&(s_check_signal.u_imd_sum>CHECK_SIGNAL_NUM*pad5->a_imd) &&(s_check_signal.tsnr_sum>CHECK_SIGNAL_NUM*pad5->a_snr)) //大于绝对门限 但小于相对门限差值 { if((s_check_signal.l_imd_sum <=CHECK_SIGNAL_NUM*(pri->m_imd-pad5->r_imd)) ||(s_check_signal.u_imd_sum<=CHECK_SIGNAL_NUM*(pri->m_imd-pad5->r_imd)) ||(s_check_signal.tsnr_sum <=CHECK_SIGNAL_NUM*(pri->m_snr-pad5->r_snr))) { printf("signal checked Relative error, exc auto dpd\n"); printf(" [idx=%d] sum tsnr=%d limd=%d uimd=%d, th asnr=%d aimd=%d rsnr=%d rimd=%d msnr=%d mimd=%d\n", s_check_signal.index, s_check_signal.tsnr_sum/CHECK_SIGNAL_NUM, s_check_signal.l_imd_sum/CHECK_SIGNAL_NUM, s_check_signal.u_imd_sum/CHECK_SIGNAL_NUM, pad5->a_snr, pad5->a_imd, pad5->r_snr, pad5->r_imd, pri->m_snr, pri->m_imd ); reset_auto_apdc_para(); pad5->use_dpd =pad5->dpd; if(pad5->use_dpd==1){//0-CLR 1-NEW 2-CON dpd_set_clr(); atsc_para.system_para.adpc = ADPC_OFF; } psys->adpc_err = 0; if(pad5->use_dpd==3)//continue with only lin psys->adpc = ADPC_UPDATE2; else psys->adpc = ADPC_UPDATE1; c256_bytewrite(EEPROM_DPD_ADDR,psys->adpc); //fpga_write_adpc(psys->adpc); adpc_source_udp = 0; adpc_source_web = 1; auto_update = TRUE; s_check_signal.adpc_flag =TRUE; enter_update_lcd(); goto END; } } } } /*printf(" [idx=%d] sum tsnr=%d limd=%d uimd=%d, th asnr=%d aimd=%d rsnr=%d rimd=%d msnr=%d mimd=%d\n", s_check_signal.index, s_check_signal.tsnr_sum/CHECK_SIGNAL_NUM, s_check_signal.l_imd_sum/CHECK_SIGNAL_NUM, s_check_signal.u_imd_sum/CHECK_SIGNAL_NUM, pad5->a_snr, pad5->a_imd, pad5->r_snr, pad5->r_imd, pri->m_snr, pri->m_imd );*/ END: #if DEBUG_AUTO_ADPC sprintf(out_str,"%d,%d,%d,%d",s_check_signal.index,s_check_signal.tsnr_sum/CHECK_SIGNAL_NUM, s_check_signal.l_imd_sum/CHECK_SIGNAL_NUM,s_check_signal.u_imd_sum/CHECK_SIGNAL_NUM); lcd_write_string(LINE_1,21," "); lcd_write_string(LINE_1,21,out_str); lcd_write_cache(); #endif return; } void dec_auto_adpc_time(void) { if((auto_update==TRUE)&&(s_check_signal.adpc_flag)) { if((atsc_para.ad5_para.c_t<=MAX_AUTO_UPDATE_TIME)&&(atsc_para.ad5_para.c_t>0)) atsc_para.ad5_para.c_t--; } } void check_update_adpc_para(void) { S_ADVANCE5_PARA *pad5_para ; S_RI_PARA *pri_para ; S_SYSTEM_PARA *psys; uint32 sum_snr=0; uint32 sum_limd=0; uint32 sum_uimd=0; uint32 i=0; uint16 t_tsnr; uint8 tsnr; uint8 l_imd; uint8 u_imd; pad5_para = &atsc_para.ad5_para; pri_para = &atsc_para.ri_para; psys=&atsc_para.system_para; if(!update_adpc_para_flag.flag) return; update_adpc_para_flag.sec--; if(update_adpc_para_flag.sec==0) { update_adpc_para_flag.flag=FALSE; if(psys->adpc==ADPC_HOLD) { for(i=0;i<4;i++) { //sum_limd += fpga_byte_read(0X01,0x45); //sum_snr += fpga_byte_read(0X01,0x46); //sum_uimd += fpga_byte_read(0X01,0x47); get_tsnr_limd_uimd(&t_tsnr, &l_imd, &u_imd); tsnr = t_tsnr; l_imd+=11*2; u_imd+=11*2; sum_limd += l_imd; sum_snr += tsnr; sum_uimd += u_imd; delay_ticks(2); } sum_limd/=8; //有效值为返回的1/2 sum_snr /=8; sum_uimd/=8; //printf("%d %d %d\n", sum_snr, sum_limd, sum_uimd); #if DEBUG_AUTO_ADPC sum_limd = atsc_para.wj_para.imd2; sum_snr = atsc_para.wj_para.snr2; sum_uimd = atsc_para.wj_para.imd2; #endif //ADPC性能优异 if((sum_limd>pri_para->m_imd)&&(sum_uimd>pri_para->m_imd)&&(sum_snr>pri_para->m_snr)) { pri_para->m_imd = sum_limdm_snr = sum_snr; pad5_para->c_t = pad5_para->time; c256_bytewrite(EEPROM_RI_ADDR+OFFSET_OF_STRUCT(S_RI_PARA,m_snr),pri_para->m_snr); c256_bytewrite(EEPROM_RI_ADDR+OFFSET_OF_STRUCT(S_RI_PARA,m_imd),pri_para->m_imd); //更新参考值 printf("recover c_t, after c_t=%d [%d %d %d]\n", pad5_para->c_t, sum_snr, sum_limd, sum_uimd); return; } //ADPC性能尚可 if((sum_limd>pri_para->m_imd-pad5_para->r_imd)&&(sum_uimd>pri_para->m_imd-pad5_para->r_imd)&&(sum_snr>pri_para->m_snr-pad5_para->r_snr)) { pad5_para->c_t = pad5_para->time; return; } //ADPC正常结束,但性能不佳 if((sum_limd>pad5_para->a_imd)&&(sum_uimd>pad5_para->a_imd)&&(sum_snr>pad5_para->a_snr)) { if((pad5_para->c_t<=MAX_AUTO_UPDATE_TIME) && (pad5_para->c_t)){ //不更新参考值 pad5_para->c_t --; printf("dec c_t, after c_t=%d [%d %d %d]\n", pad5_para->c_t, sum_snr, sum_limd, sum_uimd); } return; } //ADPC正常结束,但性能差 if((sum_limda_imd)||(sum_uimda_imd)||(sum_snra_snr)) { if((pad5_para->c_t<=MAX_AUTO_UPDATE_TIME) && (pad5_para->c_t)){ //不更新参考值 pad5_para->c_t --; printf("dec c_t, after c_t=%d [%d %d %d]\n", pad5_para->c_t, sum_snr, sum_limd, sum_uimd); } return; } } } } void show_cycle_tick(uint32 tick) { sprintf(out_str,"%d ",get_sys_tick()-tick); lcd_write_string(LINE_2,0,out_str); lcd_write_cache(); } void show_debug_num(uint32 tick ,uint32 num) { sprintf(out_str,"t:%d,num:%d ",get_sys_tick()-tick,num); lcd_write_string(LINE_2,0,out_str); lcd_write_cache(); } //通过检测电压值,判断外部AGC_IN是否断开连接,若断开连接,直接配置FPGA的AGC为OFF void check_agc_off(void) { uint8 temp; uint16 ra_enum; temp = fpga_byte_read(0x1,0x34) ; ra_enum = fpga_byte_read(0x1,0x35); ra_enum = (temp<<8)|ra_enum; if(atsc_para.rf_para.agc) { if(ra_enumCHECK_AGC_MAX_ENUM) { fpga_byte_write(0x1,0x4A,((agc_value[atsc_para.rf_para.agc&1]) | (0<<5))); } } void set_force_stop_adpc(BOOL flag) { atsc_adpc_force_stop_flag = flag; } /* static void agc_write(void) { uint8 pwrvref_v; uint8 pwrvref_i_h; uint8 pwrvref_i_l; uint8 UC_AGC; S_RF_PARA *prf; S_ADVANCE3_PARA *pad3; prf=&atsc_para.rf_para; pad3=&atsc_para.ad3_para; UC_AGC = fpga_byte_read(0x01,0x42); if(UC_AGC&0x20) //AGC on { if((UC_AGC&0x82)==0x02) { pwrvref_i_h=fpga_byte_read(0x01,0x30); pwrvref_i_l=fpga_byte_read(0x01,0x31); if(pad3->cor==0) { c256_bytewrite(EEPROM_PWRVREF_O_HADDR,pwrvref_i_h); c256_bytewrite(EEPROM_PWRVREF_O_LADDR,pwrvref_i_l); pwrvref_v=1; c256_bytewrite(EEPROM_PWRVREF_VLDO_ADDR,pwrvref_v); } else { c256_bytewrite2(E2_PWRVREF_O_HADDR,pwrvref_i_h); c256_bytewrite2(E2_PWRVREF_O_LADDR,pwrvref_i_l); pwrvref_v=1; c256_bytewrite2(E2_PWRVREF_VLDO_ADDR,pwrvref_v); } prf->ref = (pwrvref_i_h << 8) | pwrvref_i_l; fpga_byte_write(0x01,0x49,1); fpga_byte_write(0x01,0x49,0); } } } */ void ip2ts_para_update(void) { uint16 ustemp = 0; uint32 ultemp = 0; if(update_flag) { return; } if(!atsc_para.wl_para.ip2ts) { //memset(&ts_net_para,0,sizeof(TS_NET_STRUCT)-4); //fl return; //未配置IP2TS模块,直接返回 } //若已读取,则不在更新一次,否则1S钟更新一次 if(ts_net_para.valid) return; if(ts_net_para.delay_sec++<8) //需改为8,6时间有点短 return; #if 0 ip2ts_i2c_rw(ts_net_para.ip, IP2TS_I2C_ADD_IP, sizeof(ts_net_para.ip), TS_NET_I2C_READ); ip2ts_i2c_rw(ts_net_para.mask, IP2TS_I2C_ADD_MASK, sizeof(ts_net_para.mask), TS_NET_I2C_READ); ip2ts_i2c_rw(ts_net_para.gateway, IP2TS_I2C_ADD_GATEWAY,sizeof(ts_net_para.gateway), TS_NET_I2C_READ); ip2ts_i2c_rw(ts_net_para.multi_address,IP2TS_I2C_ADD_MULTI, sizeof(ts_net_para.multi_address), TS_NET_I2C_READ); ip2ts_i2c_rw(ts_net_para.ip_bak, IP2TS_I2C_IP_BAK, sizeof(ts_net_para.ip_bak), TS_NET_I2C_READ); ip2ts_i2c_rw((unsigned char*)&ustemp, IP2TS_I2C_PORT_BAK, sizeof(ustemp), TS_NET_I2C_READ); ts_net_para.port_bak = htons(ustemp); ip2ts_i2c_rw((unsigned char*)&ustemp, IP2TS_I2C_ADD_PORT, sizeof(ts_net_para.port), TS_NET_I2C_READ); ts_net_para.port = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_UDP_RTP, sizeof(ts_net_para.udp_rtp), TS_NET_I2C_READ); ts_net_para.udp_rtp = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_PACKET_LEN,sizeof(ts_net_para.packet_len), TS_NET_I2C_READ); ts_net_para.packet_len = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_REC_TYPE, sizeof(ts_net_para.receive_type),TS_NET_I2C_READ); ts_net_para.receive_type = htons(ustemp); ip2ts_i2c_rw((uint8*)&ultemp,IP2TS_I2C_ADD_VERSION, sizeof(ts_net_para.ts2ip_version),TS_NET_I2C_READ); ts_net_para.ts2ip_version = htonl(ultemp); //版本号信息 ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_FEC, sizeof(ustemp),TS_NET_I2C_READ); ts_net_para.fec = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_ROW, sizeof(ustemp),TS_NET_I2C_READ); ts_net_para.row = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_COL, sizeof(ustemp),TS_NET_I2C_READ); ts_net_para.col = htons(ustemp); ip2ts_i2c_rw((uint8*)&ustemp,IP2TS_I2C_ADD_DELAY, sizeof(ustemp),TS_NET_I2C_READ); ts_net_para.delay= htons(ustemp); #endif //若获取IP地址为全FF,认为读取失败,延时1s在读 IP_DATA(ultemp,ts_net_para.ip[0],ts_net_para.ip[1],ts_net_para.ip[2],ts_net_para.ip[3]); if(ultemp==((uint32)-1)) { ts_net_para.valid = 0; } else { ts_net_para.delay_sec = 0; ts_net_para.valid = 1; } } #if FPGA_UPGRADE static uint32 fpga_up_delay = 0; void fpga_upgrade_check(void) { if(fpga_up_delay) { fpga_up_delay--; if(fpga_up_delay==0) { config_fpga_para(); delay_us(100); init_version_info(); } } } void fpga_upgrade_start(void) { uint8 data = 0; if(!fpga_up_delay) { delay_us(100); data = fpga_byte_read(0x01,FPGA_UPGRADE_I2C_REG_ADDRES); if(data==0x21) { fpga_up_delay = 6; //延时6s后重新初始化 } } } #endif void AGC_Start(void) { fpga_byte_write(0x1,0x42, 0x1); } void AGC_Set(void) { fpga_byte_write(0x1,0x42, 0x0); } #if USE_TUNER #define RSSI_WRITE_TIME 1000 void rssi_write(void) { uint8 rs; int8 res; rs = atsc_para.log_para.rssi; if(rs!=0) { res = ((int8)(rs/2)) - 121; } else { res = 0; } fpga_byte_write(0x01,0x60,res); } #endif #if ATSC_USA_AMP void check_amp_err_status(void) { static uint32 tick_bak = 0; static uint32 amp_tick_cnt = 0; if(tick_bak++<300) return; else tick_bak=0; if(atsc_para.pac_flag==0) //pac_flag 串口置1 已连功放 return; if(atsc_para.avr_pa_para.tick_cnt>amp_tick_cnt) { amp_tick_cnt = atsc_para.avr_pa_para.tick_cnt; } else { amp_tick_cnt = 0; atsc_para.pac_flag = 0; memset(&atsc_para.avr_pa_para,0,sizeof(atsc_para.avr_pa_para)); } } #endif static void web_para_update(void) { uint8 pid = 0; uint8 data = 0; // Mode atsc_para.mode_para.pid_det = fpga_byte_read(0x3,0x09); pid = fpga_byte_read(0x3,0x0a); atsc_para.mode_para.pid_det = (atsc_para.mode_para.pid_det<<8) |pid; // Status update_log_para(); // Net atsc_para.network_para.netid = fpga_byte_read(0x3,0x19); data = fpga_byte_read(0x3,0x1a); atsc_para.network_para.netid = (atsc_para.network_para.netid<<8)|data; atsc_para.network_para.netid &=0x0fff; atsc_para.network_para.txid= fpga_byte_read(0x3,0x17); //低4bit data = fpga_byte_read(0x3,0x18); atsc_para.network_para.txid = (atsc_para.network_para.txid<<8)|data; atsc_para.network_para.txid &=0x0fff; data = fpga_byte_read(0x3,0x17); //高4bit atsc_para.network_para.bratio=data>>4; // Latch update_latch_para(); } static void sec_proc_func(void) { if(update_flag) return; // agc_write(); check_signal(); check_update_adpc_para(); web_para_update(); //#if !USE_NEW_AGC // check_agc_off(); //#endif #if ATSC_USA_AMP check_amp_err_status(); #endif #if USE_TUNER update_tune_info(); rssi_write(); #endif } static void update_fssi_state(void) { //05 3a 发1 为A ; 发0 为B uint8 a_fssi; uint8 b_fssi; uint8 data; uint16 usfssi; static uint16 sec_cnt=0; static uint8 ab_flg =0; /* 1. UPDATE and UPDLIN 返回 */ if((atsc_para.system_para.adpc >= ADPC_UPDATE1 && atsc_para.system_para.adpc <= ADPC_UPDATE5) ||atsc_para.ad3_para.fwd_cal==0 ){ sec_cnt = 0; ab_flg = 0; return; } // if(atsc_para.system_para.ab_mode==0){ // web abmode switch // sec_cnt = 0; // ab_flg = 0; // return; // } if(st_extend_state.disable_up_flg==1){ sec_cnt = 0; ab_flg = 0; return; } if(st_extend_state.load_store_curve_flg==1){ sec_cnt = 0; ab_flg = 0; return; } sec_cnt++; if(sec_cnt%10 == 0){ if(ab_flg) ab_flg = 0; else ab_flg = 1; } if(atsc_para.system_para.ab_mode==1){ if(ab_flg){ //B set_ab_switch(E_SELECT_B); usfssi = read_ob_fb_rms_pwr(); /* PR10: ORx实测功率, 原0x36/0x37 */ st_extend_state.b_fssi = ad_fssi_calc(usfssi); } else{ //delay_ms(9); //A set_ab_switch(E_SELECT_A); usfssi = read_ob_fb_rms_pwr(); /* PR10: ORx实测功率, 原0x36/0x37 */ st_extend_state.a_fssi = ad_fssi_calc(usfssi); } //printf("[%s,%d] A_FSSI=%d B_FSSI=%d\n",__FUNCTION__,__LINE__,st_extend_state.a_fssi,st_extend_state.b_fssi); } else{ set_ab_switch(0); //printf("AB switch A\n"); usfssi = read_ob_fb_rms_pwr(); /* PR10: ORx实测功率, 原0x36/0x37 */ st_extend_state.a_fssi = ad_fssi_calc(usfssi); //printf("[%s,%d] only A_FSSI=%d\n",__FUNCTION__,__LINE__,st_extend_state.a_fssi); } } S_CONFIG_PARA *get_atsc_config_para(void) { return &atsc_para.config_para; } void set_boot_tsnr_up_state(uint8 sta) { boot_tsnr_up_state = sta; } #if 1//usr_thr void lcd_save_web_sys_para(MSG* pmsg) {//@MAY_NEED_CHECK /*S_SYSTEM_PARA *psys =(S_SYSTEM_PARA*)pmsg->lPara; uint8 adpc_bak = cttb_para.system_para.adpc; if(!pmsg->lPara) { return; } //adpc_source_web = 1; save_sys_para(psys); //ADPC有更新 if((adpc_bak != psys->adpc) && (psys->adpc >= ADPC_UPDATE1)) { adpc_source_remote = 1; auto_update = TRUE; adpc_source_udp = 0; adpc_source_web = 1; enter_update_lcd(); } printf("[%s,%d]\n",__FUNCTION__,__LINE__); free(psys);*/ } void tsnr_update(void) { static uint8 cur_flg = 0; static uint8 last_flg = 0xff; uint8 phase = 0; cur_flg = get_tsnr_update_flg(); if(cur_flg && atsc_para.system_para.adpc < ADPC_UPDATE1) { if(cur_flg != last_flg) update_tsnr_uimd_limd(1,&phase); else update_tsnr_uimd_limd(0,&phase); } else{ set_tsnr_update_flg(0); } last_flg = cur_flg; } static void rt_lcd_key_proc() { if((sys_ready)&&((STATUS_LOAD_DATE==atsc_para.system_para.adpc_err) ||(STATUS_SAVE_DATE==atsc_para.system_para.adpc_err))) { ; } else { proc_lcd_key(KEY_NULL); #if USE_DRY_LOOP //dryloop放在秒消息中执行比较慢,放在此处执行 dryloop_process(); #endif } } static void usr_sec_proc(void) { uint8 trigger = 0; static uint32 stc_sec_cnt=0; // 加载曲线过程中[OFF--->Hold] or 保存曲线 [update后] -- 返回 if(atsc_para.system_para.adpc_err == DPD_LOAD_DATA || atsc_para.system_para.adpc_err == DPD_SAVE_DATA) { return ; } if(stc_sec_cnt%2==0){ realtime_update_fpga_version_reg(); } stc_sec_cnt++; /* sys_rf_agc_switch_proc */ trigger = check_rf_agc_trigger(); sys_rf_agc_switch_proc(trigger); /* fssi sec update */ update_fssi_state(); /* tsoip sec update */ #if USE_TS2IP ip2ts_para_update(); #endif /* psts sec update */ #if USE_PSTS psts_para_update(&atsc_para.psts_para); #endif /* fpga up sec check */ #if FPGA_UPGRADE fpga_upgrade_check(); #endif /* fpga up sec check */ dev_pa_link_sec_check(); /* lcd display upgrade sec check */ //get_trigger_lcd_menu(&lcd_trigger_type); //trigger_lcd_manu_proc(lcd_trigger_type); /* gps-uart sec msg */ sec_msg_to_gps_uart_thr(); /* fpga up reboot check */ check_fpga_up_finished_reboot_sys(); /* other sec check */ sec_proc_func(); } static uint8 trg_rf_agc_flg=0; void trigger_rf_agc_proc(uint8 trigger) { trg_rf_agc_flg = trigger; } uint8 check_rf_agc_trigger() { return trg_rf_agc_flg; } /* RFAGC开启流程: 1 射频开关切换到A 2 dpd关闭,dpdctrl_fagc_update设置为1,等待3秒,检查dpd_powerislow, dpd_powerishigh是否为1,如 =1报警,中止 3 dpdctrl_fagc_update设置为0 4 rf_agc_on 设置为1 5 读取rfagc_down_limit, rfagc_up_limit状态,如=1报警,不中止 */ int sys_rf_agc_switch_proc(uint8 trigger) { static uint8 stc_proc=0; uint8 rd_reg; uint8 state; uint8 agc_err_exit_proc=0; uint8 agc_err_code=0; U_DPDCTL_REG23 u_dpdctl_r23; u8 ucharL,ucharH; u16 before_cw,after_cw; static uint8 sec_cnt=0; static uint8 sec_dly_flg=0; if(trigger==1){ trigger=0; trigger_rf_agc_proc(0); atsc_para.log_para.agc_state=0; agc_err_code=E_RFAGC_NORMAL; stc_proc =1; sec_cnt =0; sec_dly_flg =1; printf("step1. rf switch to a.\n"); //1 射频开关切换到A u_dpdctl_r23.u8val = 0; u_dpdctl_r23.dpd_bt.iqb_upd = 0; u_dpdctl_r23.dpd_bt.rf_sel = 0; //A u_dpdctl_r23.dpd_bt.sync_mode = 0; fpga_byte_write(0x05, FPGA_ADDR_DPD_IQB_UPD, u_dpdctl_r23.u8val); printf("step2. close dpd,set rfagc update, wait...\n"); //2 dpd关闭,dpdctrl_fagc_update设置为1,等待3秒 fpga_byte_write(0x05, FPGA_ADDR_DPD_CTRL1, 0); //set dpd off fpga_byte_write(0x05, FPGA_ADDR_DPD_CTRL3, DPD_CTRL3_FAGC_UPDATE); //set DPD_CTRL3_FAGC_UPDATE } if(stc_proc==0 && atsc_para.rf_para.agc==0){ return 0; } //dly if(sec_dly_flg==1){ sec_cnt++; printf(" wait %d\n",sec_cnt); if(sec_cnt>=3){ sec_dly_flg=0; } else{ return 0; } } if(stc_proc==1){ printf(" check power state\n"); //check 检查dpd_powerislow, dpd_powerishigh是否为1,如 =1报警,中止 rd_reg = fpga_byte_read(5,FPGA_ADDR_DPD_STATUS1); if(rd_reg & MASK_DPD_PWRLOW)//bit-2 //出现 dpd_powerislow状态 { agc_err_exit_proc=1; //atsc_para.log_para.agc_state= E_RFAGC_POWER_LOW; printf("Err. RFAGC Feedback power is low\n"); trigger_lcd_manu_proc(DISPALY_RFAGC_ERR_POWER_LOW); } if(rd_reg & MASK_DPD_PWRHIGH)//bit-1 //出现 dpd_powerishigh状态 { agc_err_exit_proc=1; //atsc_para.log_para.agc_state= E_RFAGC_POWER_HIGH; printf("Err. RFAGC Feedback power is high\n"); trigger_lcd_manu_proc(DISPALY_RFAGC_ERR_POWER_HIGH); } printf("step3. clear rfagc update\n"); //3 dpdctrl_fagc_update设置为0 fpga_byte_write(0x05, FPGA_ADDR_DPD_CTRL3, 0); } if(agc_err_exit_proc){ stc_proc=0; set_sys_rf_agc(0); printf(" err_exit\n"); return -1; } //4 rf_agc_on 设置为1 if(stc_proc==1){ printf("step4. set rfagc on\n"); set_sys_rf_agc(1); } if(atsc_para.rf_para.agc==1){ //5 读取rfagc_down_limit, rfagc_up_limit状态,如=1报警,不中止 state = fpga_byte_read(0x01, 0x02); //usr_sec_printf("checking rfagc limit state.\n"); if(state&MASK_RFAGC_DOWN_LIMIT){ atsc_para.log_para.agc_state= E_RFAGC_DOWN_LIMIT; } else if(state&MASK_RFAGC_UP_LIMIT){ atsc_para.log_para.agc_state= E_RFAGC_UP_LIMIT; } else{ atsc_para.log_para.agc_state= E_RFAGC_NORMAL; ucharL=fpga_byte_read(0x01, 0x09); ucharH=fpga_byte_read(0x01, 0x0a); before_cw = (ucharH<<8)|ucharL; ucharL=fpga_byte_read(0x01, 0x05); ucharH=fpga_byte_read(0x01, 0x06); after_cw = (ucharH<<8)|ucharL; atsc_para.log_para.agc_adj = (after_cw-before_cw)*10/184;//184对应0.1dB,放大100倍 //printf("cw before=%d after=%d adj=%d\n", before_cw, after_cw, atsc_para.log_para.agc_adj); } } if(stc_proc==1){ stc_proc=0; } } /* 以下操作前应检查RFAGC是否打开,如打开先关闭,设置rf_agc_on = 0 1 修改tx功率 2 修改tx频率 3 打开单音 4 打开/关闭射频 5 开启DPD update turn_off_rf_agc_state(E_CHG_TX_POWER); */ int turn_off_rf_agc_state(uint8 excid)//E_EXCID { if(atsc_para.rf_para.agc){ set_sys_rf_agc(0); printf("check excid=%d close agc\n",excid); } } extern volatile uint32 usr_sys_ready; void lcd_key_thr(void * pvParameters) { static S_SYS_TIME bak_time = {0xff,};//本地时间 static S_SYS_TIME now_time = {0,}; static uint32 key_bak_time = 0; static uint8 key_bak = 0xff; static int boot_sec_cnt = 0; int ret = 0; uint8 reset_up = 0; uint8 key = 0; #if USE_UI_RESPONSE_PRIORITY /* Linux applies setpriority(PRIO_PROCESS, 0, ...) to the calling thread. */ if(setpriority(PRIO_PROCESS, 0, -5) != 0) { log_printf(LOG_ERR, I_NOUSED, "[sched] lcd_key_thr nice -5 failed: %s\n", strerror(errno)); } #endif //uint8 lcd_trigger_type = 0; MSG *pmsg = NULL; log_printf(LOG_DEBUG,I_NOUSED,"[.thr.] lcd_key_thr Start.\n"); //pthread_mutex_init(&mtx_lcd_trigger, NULL); uint8 bak_phase = 0; uint8 now_phase = 0; enter_menu(1); while(1) { usr_sys_ready=1; get_sys_time(&now_time); if(bak_time.sec != now_time.sec) { usr_sec_proc(); #if !TMP_DISABLE_BOOT_SNR_UPDATE if(boot_sec_cnt == 0){ boot_sec_cnt++; boot_tsnr_up_state = E_STA_BOOT_TRIGGER_END; // let lcd menu jump from system init to ip menu log_printf(LOG_DEBUG,I_NOUSED,"boot ~~~~~~~~~\n"); } else if(boot_sec_cnt < 2){ boot_sec_cnt++; } else if(boot_sec_cnt == 2) { g_trigger_up_tsnr_flg = 1; g_trigger_up_start_flg = 1; boot_tsnr_up_state = E_STA_BOOT_TRIGGER_START; boot_sec_cnt = 0xff; } if(g_trigger_up_tsnr_flg == 1) { pthread_mutex_lock(&mtx_phase78910_again); reset_up = 0; if(g_trigger_up_start_flg == 1){ g_trigger_up_start_flg = 0; reset_up = 1; bak_phase = 0; } ret = update_tsnr_uimd_limd(reset_up, &now_phase); if(now_phase != bak_phase){ atsc_para.system_para.final_stage = 10 - now_phase; bak_phase = now_phase; } if(ret == 1) { //ret_father_menu(); //enter_menu(SYS_LCD+1); enter_menu(0); g_trigger_up_tsnr_flg = 0; if(boot_tsnr_up_state == E_STA_BOOT_TRIGGER_START){ boot_tsnr_up_state = E_STA_BOOT_TRIGGER_END; } atsc_para.system_para.final_stage = 0xFF; reset_dpd_to_normal_state(); } pthread_mutex_unlock(&mtx_phase78910_again); } #else if(boot_sec_cnt == 0){ boot_sec_cnt++; boot_tsnr_up_state = E_STA_BOOT_TRIGGER_END; printf("boot ~~~~~~~~~ skip\n"); } #endif get_sys_time(&bak_time); } //if((g_now_only_upgrade_fpga==0) && (boot_tsnr_up_state==E_STA_BOOT_TRIGGER_END)) { if(g_now_only_upgrade_fpga==0 && atsc_para.lcd_web_lock==0) { rt_lcd_key_proc(); } usleep(20000);// 20ms } } void key_thr(void * pvParameters) { int ret = 0; fd_set readfds; struct timeval timeout; unsigned char data = KEY_NULL; int input_keys_fd = -1; #if USE_UI_RESPONSE_PRIORITY if(setpriority(PRIO_PROCESS, 0, -8) != 0) { log_printf(LOG_ERR, I_NOUSED, "[sched] key_thr nice -8 failed: %s\n", strerror(errno)); } #endif input_keys_fd = open("/dev/input_keys", O_RDONLY | O_NONBLOCK); if(input_keys_fd < 0) { log_printf(LOG_ERR, I_NOUSED, "Can't open file /dev/input_keys: %s\n", strerror(errno)); return; } while(1) { data = KEY_NULL; FD_ZERO(&readfds); FD_SET(input_keys_fd, &readfds); timeout.tv_sec = 0; timeout.tv_usec = 200000; ret = select(input_keys_fd + 1, &readfds, NULL, NULL, &timeout); switch(ret) { case 0: data = get_long_press(); break; case -1: if(errno != EINTR) { usleep(20000); } break; default: if(FD_ISSET(input_keys_fd, &readfds)) { ret = read(input_keys_fd, &data, sizeof(data)); if(ret > 0 && data != 0) { data = pr_key(data); } else { data = KEY_NULL; } } break; } if((g_now_only_upgrade_fpga==0) && (boot_tsnr_up_state==E_STA_BOOT_TRIGGER_END)) { if((sys_ready)&&((STATUS_LOAD_DATE==atsc_para.system_para.adpc_err) ||(STATUS_SAVE_DATE==atsc_para.system_para.adpc_err) ||(atsc_para.lcd_web_lock==1))) { ; } else { proc_lcd_key(data); } } } close(input_keys_fd); } int thr_lcd_thread(void) { int ret = -1; pthread_t lcd_thr_id; pthread_t key_thr_id; log_printf(LOG_DEBUG,I_NOUSED,"[.thr.]->-\n"); #if USE_DRY_LOOP dryloop_init(); #endif set_menu_init(); ret = pthread_create(&lcd_thr_id, NULL, (void *)lcd_key_thr, NULL);// if(ret != 0){ log_printf(LOG_ERR,I_NOUSED," creat thread err.\n"); return -1; } else{ log_printf(LOG_DEBUG,I_NOUSED," Ok. Create succeed.\n"); //thread_setnamev("lcd_key_thr"); } ret = pthread_create(&key_thr_id, NULL, (void *)key_thr, NULL); if(ret != 0){ log_printf(LOG_ERR,I_NOUSED," creat key thread err.\n"); return -1; } else{ log_printf(LOG_DEBUG,I_NOUSED," Ok. Create key thread succeed.\n"); } return 0; } #endif//usr_thr #endif//USE_LCD_MOUDLE /************************************************END FILE***************************************************/