#ifndef __LCD_TASK_H #define __LCD_TASK_H #include "type.h" #include "config.h" #include "lcd.h" #include "gps.h" /* #include "gps.h" #include "stdio.h" #include "rtc.h" */ #define FPGA_AMP_SAT_MAX (65530) #define FPGA_AMP_SAT_DEF (23000) #define LOCAL_MAC_FIRST_OCTET 0X94 #define LOCAL_MAC_SECOND_OCTET 0X40 #define LOCAL_MAC_THIRD_OCTET 0XA2 #define LCD_LIGHT_OFF 0 #define LCD_LIGHT_ON 1 #define CTRL_REMOTE 0 #define CTRL_LOCAL 1 #define SYS_MODE_LEGACY 0 #define SYS_MODE_ATSC30 1 #define NON_OP_MAX_TIME 30*60 //无按键液晶灭时间 改为30分钟 #define NON_OP_RETURN_LOG 30 //判断系统空闲时间 #define CHECK_SIGNAL_TIME 100 //100 TICK 秒 #define CHECK_LATCH_TIME 100 #if DEBUG_AUTO_ADPC #define CHECK_SIGNAL_NUM 16 //韩国转发器,空闲时检测信号平均个数 #else #define CHECK_SIGNAL_NUM 128 //韩国转发器,空闲时检测信号平均个数 #endif #define IMD_LOW_HOLD 50 //IMD下下限 #define TSNR_LOW_HOLD 27 //tsnr下限 #define TSNR_VALID_HOLD 15 //tsnr最低有效值 #define MAX_AUTO_UPDATE_TIME 9 #define R_IMD_DEFAULT 4 //imd 相对门限值 #define R_SNR_DEFAULT 2 //snr 相对门限值 #define A_SNR_DEFAUTL 32 //绝对门限 #define A_IMD_DEFAULT 36 // #define REFRESH_PID_TIME 20 //刷新pid时间 单位s #define DEFAULT_FREQ_NUM 44 //默认频点,对应707M 改成653 #define FAC_POWER_DEFAULT 0xFF #define FAC_POWER_U 1<<0 #define FAC_POWER_V3 1<<1 #define FAC_POWER_V1 1<<2 #define FAC_POWER_ADD 1<<3 #define ATV_FREQ_8M_MIN 3 #define ATV_FREQ_8M_MAX 62 #define ATV_DEFAULT_FREQ_NUM 42 //默认频点,对应707M 改成653 #define FREQ_MIN_V1 2 #define FREQ_MAX_V1 6 #define FREQ_MIN_V 7 #define FREQ_MAX_V 13 //7 #define FREQ_MIN_V3 FREQ_MIN_V #define FREQ_MAX_V3 FREQ_MAX_V #define FREQ_MIN_U 14 #define FREQ_MAX_U 83 #define FREQ_MAX_ALL 83 #define FREQ_6M_MIN_U 14 #define FREQ_6M_MAX_U 83 #define UPDATE_DELAY 40 //切换test后,延时校正时间 #define LINE_MAX_NUM 40 //一行可以显示的字符数 #define PROMPT_CHAR "*" //编辑提示符 #define PROMPT_CHANGE "?" //进入修改状态提示符 #define MAX_PROMPT_NUM 32 #define NET_MAX_DELAY (10000000-1) //net屏 delay最大值 #define RF_MAX_HZ 50000 #define RF_POWER_P_C_ON (RF_POWER_MAX+100) //归一化打开时的最大值 增加量 5db #define RF_POWER_MAX 600 //单位0.05db #define RF_POWER_ZERO 500 //0db 对应的power数 #define RF_POWER_DB_MAX 1424 //db最大值 #define AD_MAX_POWER_DEFAULT 600 //高级菜单默认最大功率 0 #define WE_POWER_ZERO 300 //we屏 0db对应值 #define WE_POWER_MIN 0 #define WE_POWER_MAX 500 #define OCXO_MAX 10 //单位0.1hz system菜单 #define OCXO_UNIT 106 //保存时的放大倍数 #define LOG_RSSI_ADJUST 107 //读取tuner的rssi修正值 #if USE_NEW_POWER_CFG #define DEFAULT_RF_POWER_DB RF_POWER_ZERO #define DEFAULT_RF_POWER_DB_3X RF_POWER_ZERO #else #define DEFAULT_RF_POWER_DB 1051 #define DEFAULT_RF_POWER_DB_3X 951 //3x默认功率偏高5db,此处要小一点 #endif #define SYS_LCD 10 //客户菜单开始序号,防止前边log菜单增加 #define ADV_LCD 100 //高级菜单序号 #define FAC_LCD 200 //工厂菜单开始序号 #define SPE_LCD 300 //特殊屏幕开始序号 #define PER_TICK_MS 10 //每tick ms值 #define KEY_ENTER_INTERVAL 800 //确认键按键间隔 单位ms #define KEY_EXIT_INTERVAL 500 //取消键按键间隔 #define KEY_DEFAULT_INTERVAL 140 //其他按键默认间隔 #define KEY_JITTER_TIME 40 //按键去抖动间隔 #define POWER_CALC_REF_DET 38 //FWD计算时的det值 #define OFFSET_OF_STRUCT(st,para) ((uint32)&(((st *)0)->para)) #define CHECK_FPGA_GPS_LOCK_INTERVAL 100 //1S #define CHECK_TS_ERR_INTERVAL 100 //1S #define CHECK_AMP_ERR_INTERVAL 20000 #define CHECK_AGC_TIME 50 //0.5S #define CHECK_AGC_MIN_ENUM 100 #define CHECK_AGC_MAX_ENUM 256*10 /* PR10: FSSI 改为基于 ORx 实测功率 ob_fb_rms_pwr(seg1 0x03/0x04, ufix16_En8)。 实测(TX on, ch14/473MHz)稳定 ≈0x03B5(949)。旧值 0xBE00/0x3B00 是 EMV7 模拟检测器 ADC 计数, 不适用。下面按单点(949)首猜: MIN≈噪底floor, MAX 取 ~工作点使 FSSI 读到高位。 须在板上按 RF-off floor 与额定功率点标定微调。 */ #define DPD_FSSI_MAX_VALUE 0x0400 /* 1024, 略高于工作点949 */ #define DPD_FSSI_MIN_VALUE 0x0040 /* 64, ORx噪底floor(待实测RF-off标定) */ #define EEPROM_BACKUP_PARA_TYPE_NONE 0 #define EEPROM_BACKUP_PARA_TYPE_PREF 1 //工厂默认参数备份 #define EEPROM_BACKUP_PARA_TYPE_CUST 2 //客户手动备份 #define EEPROM_BACKUP_VALID_WORD 0X31 //备份区参数是否有效标志 #define KOREA_SNR_ADJ_MAX 50 #define KOREA_WD_SPE_VALUE 0X45 #define NET_SFN 0 #define NET_MFN 1 typedef enum { ASI_INPUT_TUNER = 0, ASI_INPUT_TS , ASI_INPUT_EAS, TSOIP_INPUT_IP, SMPTE_INPUT, ASI_INPUT_END, }E_ASI_INPUT_TYPE; typedef enum{ E_CHG_TX_POWER=1, E_CHG_TX_FREQ, E_CHG_CW, E_CHG_TX_RF, E_CHG_DPD,//5 }E_EXCID; #define PSIP_MAX_CHANNLE_NUM 13 #define PSTS_CTRL_DISABLE 0 #define PSTS_CTRL_ENABLE 1 #define PSTS_CTRL_CLEAR 2 typedef struct { BOOL flag; uint32 sec; }S_UPDATE_AUTO_ADPC; typedef enum { ASI_GP1A=0, ASI_GP1B, ASI_GP2A, ASI_GP2B, ASI_NONE, }ASI_INPUT_SOURCE; typedef enum { ASI_TS1_USED =0, ASI_TS2_USED, ASI_EAS_USED, ASI_TUNER_USED, TSOIP_USED,//add SMPTE_USED,//add ASI_NONE_ERR, }ASI_GRP_STATE; typedef enum { ASI_OK=0, ASI_ERR, }ASI_INPUT_STATE; typedef struct { ASI_GRP_STATE input; ASI_INPUT_STATE status; }S_ASI_INPUT,*PS_ASI_INPUT; //bit0,1: 00:ts1 01:ts2: 10:tuner 11:eas bit567 为1分别表示 ts1_lock eas_lock(ts2lock 复用) tuner_lock //bit567 1:lock 0:err typedef union { struct { uint8 ASI_STATUS :3; //old 0:TS1 1:TS1 2:TUNER 3:EAS // 000:ts1 001:ts2 010:tuner // 011:none 100:tsoip 110:smpte uint8 SMPTE :1; //b3 add uint8 TSOIP :1; //b4 add uint8 TS1 :1; //b5 1:TS1 LOCKED uint8 TS2_EAS :1; //b6 1:TS2/EAS LOCKE uint8 TUNER :1; //b7 1:TUNER LOCKED }PART; uint8 asi; }S_ASI_FPGA; /* [0] :overtemp [1] :GPS UNLOCK/LOCK [2] :overflow/underflow [3-4]:INPUT [5] :INPUT STATUS */ typedef struct { uint32 almOverTemperature:1; // 0 normal, 1 over temperature uint32 almGpsLock:1; // 0 lock, 1 unlock uint32 almOverFlow:1; // 0 undo uint32 almInput:2; uint32 almInputFlg:1; uint32 rev:26; }bt_LOG_ALARM; typedef union { bt_LOG_ALARM btPart; uint32 u32AlarmLog; }S_ALARMS; typedef struct { uint32 mh; uint32 ts_rate; uint16 ref_log; uint8 rxfreq; //频道号 uint8 txfreq; uint8 gps; uint8 gps_status; uint8 gps_freq[2]; //byte1 :0 正 1负 byte2: 高4 A 低4 B -> +nE-m uint8 temperature[4]; uint8 adpc; uint8 resved; uint8 asi_input; //检测到的输入口 uint8 input_ok_flag; //0:err 1:ok uint8 status; uint8 agc; uint8 ts_under; uint8 rsnr; int8 rssi; uint8 tsnr; uint8 l_imd; uint8 u_imd; uint8 mode; uint8 use_gps; uint8 gps_1pps; uint8 syserr; uint8 Hz_10M; uint8 tx; uint8 fwd; uint8 amp; uint8 tuner_init_status; uint8 tuner_lock_status; int8 tuner_strength; uint32 tuner_snr; uint8 agc_state; int agc_adj; uint8 cfr_busy_stage1; uint8 cfr_busy_stage2; uint8 cfr_busy_stage3; u8 ntp_state; u8 ntp_state_last; u8 ntp_manual_sync; u8 ntp_ip_chg_flg; u32 ntp_sync_delay; }S_LOG_PARA,*PS_LOG_PARA; typedef enum { TEST_OFF = 0, TEST_ON, }TEST_EM; //" MODE ADPC MON RFOUT ASI PCR GPS RST" typedef struct { uint8 adpc_err; uint8 adpc_step; uint8 adpc_delay; uint8 adpc; uint8 mode; uint8 gps; int8 ocxo; uint8 net; uint8 input; //asi tuner uint8 ctrl; uint8 test; uint8 spec_enable; uint8 web_title[ATSC_TITLE_LEN]; uint8 ab_mode; // [0:default only A] [1:ABswitch] uint8 sntp_en; uint8 sntp_sip[4]; uint8 sntp_date[SNTP_DATE_STRING_LEN]; uint8 sntp_time[SNTP_TIME_STRING_LEN]; uint8 dpd_phase; uint8 flash_valid; uint16 tsnr; uint16 maxp; uint16 flash_get_err_num; uint8 save_load_data_percent; uint8 final_stage; uint8 ntp_ip[4]; int16 timezone_offset; uint8 ntp_switch; uint8 agc_att; uint16 adrv9009_att; uint8 orx_manu_gain; }S_SYSTEM_PARA,*PS_SYSTEM_PARA; typedef struct { int32 hz; //+-50.000k uint16 power; uint16 db; uint8 rxfreq; uint8 txfreq; uint8 agc; uint8 agc_err; uint8 cw; uint8 rf; uint8 tx; uint8 ssref; uint32 lvl; uint32 ref; uint16 adrv_att;//todo temp uint8 loop_fpara; uint8 loop_fbw; uint8 agc_att; uint16 adrv9009_att; uint8 orx_manu_gain; }S_RF_PARA,*PS_RF_PARA; typedef struct { uint32 delay; uint16 txid; uint16 netid; uint8 bratio; uint8 reserved[3]; }S_NETWORK_PARA,*PS_NETWORK_PARA; typedef struct { uint16 pid_det; uint8 sync; uint8 tcp_c; uint8 zp1f; uint8 reserved[3]; }S_MODE_PARA,*PS_MODE_PARA; typedef struct { uint32 det_cnt; uint32 det_pid; uint32 pid_det; uint32 count; //循环中使用 uint32 det_pid_count[5]; uint32 pid_count[5]; }S_PID_STATUS_PARA,*PS_PID_STATUS_PARA; typedef struct { uint8 pcr; uint8 slow_up; uint8 slow_down; uint8 swrt; uint8 pac; //同步与 wh屏pac; uint8 asiout; uint8 reserverd[2]; //uint16 power_max; }S_ADVANCE_PARA,*PS_ADVANCE_PARA; typedef struct { uint8 m_ts; uint8 m_10m; uint8 m_1pps; uint8 m_dly_hh; uint8 m_dly_mm; uint8 m_dly_ss; uint8 reserved[2]; }S_ADVANCE2_PARA,*PS_ADVANCE2_PARA; typedef struct { uint16 power_ref; // 低12位有效,高位是标志位 ,仅读时判断该位,写时不存 uint8 rc_cmd; uint8 fwd_cal; uint8 cor; //暂时添加 功率类型 0:100W 1:1000W uint8 cw; uint8 fwd_cal_dly; uint8 rst; uint8 mptv; //0:lptv 1:mptv //仅AW_ATSC_9X版本中使用 uint8 reserverd1[1]; uint16 max_power; uint16 ofst; // function == fwd_cal }S_ADVANCE3_PARA,*PS_ADVANCE3_PARA; typedef struct { uint8 pdt; uint8 reserve_cfr;//cfr; uint8 adpc; uint8 fssi; uint8 auto_adpc; uint8 ab_flag; uint8 ab_sec; uint8 reserved; }S_ADVANCE4_PARA,*PS_ADVANCE4_PARA; typedef struct { uint8 time; uint8 a_snr; uint8 a_imd; //绝对门限值 uint8 r_snr; uint8 r_imd; //相对门限 uint8 c_t; //剩余次数,不存E2,上电该值等于time uint8 dpd; uint8 use_dpd; //实际使用的DPD类型; 若由OFF直接到UPDATE,则强制NEW,否则根据设置类型UPDATE }S_ADVANCE5_PARA,*PS_ADVANCE5_PARA; typedef struct { uint8 reset; uint8 u1; uint8 u2; uint8 rf; uint8 gps; uint8 ts; uint8 sys; uint8 m_1pps; uint8 sfn; uint8 reverved[3]; }S_LATCH_PARA, *PS_LATCH_PARA; typedef struct { uint64 sn; uint32 gui_key; uint32 psip_key; uint32 eas_key; uint8 psip_key_valid; uint8 eas_key_valid; uint8 gui_key_valid;//uint8 reserverd[2]; }S_SN_PARA,*PS_SN_PARA; //--------- #if 1 typedef struct { uint8_t RTC_WeekDay; /*!< Specifies the RTC Date WeekDay. This parameter can be a value of @ref RTC_WeekDay_Definitions */ uint8_t RTC_Month; /*!< Specifies the RTC Date Month (in BCD format). This parameter can be a value of @ref RTC_Month_Date_Definitions */ uint8_t RTC_Date; /*!< Specifies the RTC Date. This parameter must be set to a value in the 1-31 range. */ uint8_t RTC_Year; /*!< Specifies the RTC Date Year. This parameter must be set to a value in the 0-99 range. */ }RTC_DateTypeDef; typedef struct { uint8_t RTC_Hours; /*!< Specifies the RTC Time Hour. This parameter must be set to a value in the 0-12 range if the RTC_HourFormat_12 is selected or 0-23 range if the RTC_HourFormat_24 is selected. */ uint8_t RTC_Minutes; /*!< Specifies the RTC Time Minutes. This parameter must be set to a value in the 0-59 range. */ uint8_t RTC_Seconds; /*!< Specifies the RTC Time Seconds. This parameter must be set to a value in the 0-59 range. */ uint8_t RTC_H12; /*!< Specifies the RTC AM/PM Time. This parameter can be a value of @ref RTC_AM_PM_Definitions */ }RTC_TimeTypeDef; //---------- typedef struct { uint8 distortion_sw;//内部失真曲线开关 uint16 agc_pwr; //射频agc目标电平控制字 uint16 err_th; //dpd误差值保护门限 uint8 err_cnt_th; //dpd误差数量保护门限 uint16 amp_sat; //发射信号饱和门限 uint16 amp_sat_sqr; // uint16 dpd_test; uint8 dpd_mode; //支持两种流程 uint8 phase6_minute;//阶段6执行的时间 uint16 wpp_th; //dpd保护门限 uint16 gl; // gain_limit uint8 dpd_ctl; }S_DPD_PARA,*PS_DPD_PARA; //本地用户信息,明文保存!!! typedef enum {LOGIN_NULL=0,LOGIN_NORMAL,LOGIN_ADMIN,LOGIN_ENGINEER}LOGIN_TYPE; #define MAX_REG_USER_INFO 5 //本地保存的用户数目 #define MAX_USER_NAME_LEN 16 #define MAX_USER_PW_LEN 16 #define MAX_CFG_LEN 16 typedef struct { uint8 user_type; uint8 reservd1[3]; char name[MAX_USER_NAME_LEN]; char password[MAX_USER_PW_LEN]; }S_USER_INFO,*PS_USER_INFO; enum{E_DPD_MODE_AUTO=0,E_DPD_MODE_MANUAL}; //---------- // para of tsoip typedef struct { uint8 ts_in_flag; //ASI端是否有码流输入 有为1,无为0,下同 uint8 ts_out_flag; //ASI输出码率是否正常 对应的就是IP_IN是否正常 uint8 ts_err; uint8 sys_err; uint32 ip_out_rate_kbps; //ip口输出 uint32 asi_out_rate_kbps; //asi口输出 uint8 tsio_state;//h20190221 //获取到ip12的选择和锁定状态(从FPGA读取) }S_TSOIP_LOG_PARA,*PS_TSOIP_LOG_PARA; typedef struct { uint8 id; uint8 fpga_upgrade; //fpga切换到升级模式,不存E2,默认为0 uint8 upgrade; uint8 phy_type; uint8 dest_ip[4]; // for ts to ip uint8 ip[4]; // when [receive_type] :signle, tsoip work at ip uint8 gateway[4]; uint8 mask[4]; uint8 mac[4]; uint8 multi_address[4]; // when receive_type is multi uint16 port; //本地接收端口 uint16 dest_port; //发送端口号 uint16 udp_rtp; //0:udp 1:rtp //为了和老代码保持兼容, 使用2字节类型 uint16 packet_len; //0:188 1:204; uint16 receive_type; //1:sigle 0:multi uint16 rst; uint8 ip_direct; uint8 resvd[1]; uint16 fec; //IP2TS端为只读模式,否则可配置,下面3个参数相同 uint8 ip12_sel; //h20190221 //将ip1或ip2设定为输入,01选择ip1,10选择ip2(下发FPGA) uint8 ret;//h20190221 uint8 sfn_mfn_sel; uint16 delay; uint16 para_reset; //IP2TS参数恢复默认 uint16 row; uint16 col; }S_TSOIP_CONFIG_PARA,*PS_TSOIP_CONFIG_PARA; typedef struct { uint8 hw[20]; uint8 fpga[20]; uint8 mcu[20]; uint8 fpga_hex[4]; uint8 mcu_hex[4]; uint32 i2c_ver; //最高字节 mcuVN.N 然后依次 mm dd fpgaVn.n }S_TSOIP_VER_PARA,*PS_TSOIP_VER_PARA; // TSOIP typedef struct { S_TSOIP_LOG_PARA tsoip_log_para; S_TSOIP_CONFIG_PARA tsoip_config_para; S_TSOIP_VER_PARA tsoip_ver_para; #if USE_HTTP_LOGIN S_USER_INFO reg_user_info[MAX_REG_USER_INFO]; #endif }S_IP2TS_PARA; // TSOIP全局参数 #endif// //----------- typedef struct { RTC_DateTypeDef dd; RTC_TimeTypeDef tt; int8 gmt; uint8 resved[3]; }S_ADVANCE_DT_PARA,*PS_ADVANCE_DT_PARA; typedef struct { uint32 confirm; }S_UP_CONFIRM_PARA,*PS_UP_CONFIRM_PARA; typedef struct { uint32 confirm; }S_DISPINFO_CONFIRM_PARA,*PS_DISPINFO_CONFIRM_PARA; typedef struct { uint8 id; uint8 bps; uint8 standard; uint8 reserved; uint8 ip[4]; uint8 gateway[4]; uint8 mask[4]; uint8 dns[4]; uint8 pa_link_ctrl_rf; }S_CONFIG_PARA,*PS_CONFIG_PARA; typedef struct { uint16 ra_enum; //关键词冲突,前边加ra uint16 fagc; uint16 pha; uint16 dagc; uint16 iqdc; uint16 perr; uint8 sta; uint8 reserved[3]; }S_RA_PARA,*PS_RA_PARA; typedef struct { uint16 hz; uint16 gpsc; uint8 b0; uint8 b1; uint8 b2; uint8 p0; uint8 b8; uint8 reserve_cfr;//cfr; uint8 alarm; uint8 rst; }S_WB_PARA,*PS_WB_PARA; typedef struct { uint8 crg; uint8 pr; uint8 ch; uint8 cl; uint8 dh; uint8 dl; uint8 til; uint8 tfl; uint8 tls; uint8 pg; uint8 reserved[2]; }S_WC_PARA,*PS_WC_PARA; typedef struct { uint8 cfr_work; uint16 cfr_clip; int8 sa; int8 sb; int8 sc; int8 sd; uint8 reserved[2]; /*uint8 twk; uint8 pfg; uint8 pdg; uint8 feg; uint8 deg; uint8 lct; #if USE_SNR_ADJ int8 sa; int8 sb; int8 sc; int8 sd; uint8 reserved[2]; #else uint8 sa; uint8 sb; uint8 sc; uint8 sd; uint8 reserved[2]; #endif*/ }S_WD_PARA,*PS_WD_PARA; typedef struct { uint8 ch; uint8 reserved1; uint8 ltn; uint8 dsc; uint8 snc; uint8 dpgh; uint8 dpgm; uint8 dpgl; uint8 fsc; uint8 sp; uint16 power; }S_WE_PARA,*PS_WE_PARA; typedef struct { uint16 equc; uint8 pdt; uint8 sp; uint8 l; uint8 n; uint8 m; uint8 ah; uint8 al; uint8 agc; uint8 g; uint8 th; }S_WF_PARA,*PS_WF_PARA; typedef struct { uint8 fpga[16]; uint8 fpga2[16]; uint8 attr[16]; uint8 mcu[16]; #if USE_DRY_LOOP uint8 dryloop[8]; #endif uint8 flag; //0 atsc 1:attr uint8 fla; //0 F 1:I uint8 reserved[2]; }S_RG_PARA,*PS_RG_PARA; typedef struct { uint8 pd; uint8 bw; uint8 ralh; uint8 rall; uint8 balh; uint8 ball; uint8 pwrt; uint8 pac;//功放开关 uint8 func; uint8 chip; // ad chip 0:1655, 1:4821 uint8 reserved[2]; uint8 temp_unit;//1-C,0-F }S_WH_PARA,*PS_WH_PARA; //该屏菜单变量只能加后面, balh = ad.swrt; typedef struct { int8 gmt; uint8 p_c; //功率归一化 uint8 s_freq; uint8 reserverd1; uint8 rf_dly; uint8 reserverd2; uint8 mode; uint8 picture; #if DEBUG_AUTO_ADPC uint8 snr; uint8 imd; uint8 snr2; uint8 imd2; #endif uint8 ctl_dpd; uint8 ph10_time; }S_WJ_PARA,*PS_WJ_PARA; typedef struct { uint8 m_snr; uint8 m_imd; //参考带肩 uint16 i_cnt; uint16 d_cnt; uint16 fifo; uint32 rst_time; }S_RI_PARA,*PS_RI_PARA; typedef struct { uint8 alarm_ip[4]; uint8 ss; uint8 reserverd[3]; uint8 mac[4]; // must in the end }S_WK_PARA,*PS_WK_PARA; typedef struct { uint8 band; uint8 spe; uint8 eebak; uint8 ip2ts; uint8 s_p; uint8 l_p; uint8 exc_5x; //激励器类型 0:3x+ 1:5x+ uint8 reseved[1]; uint8 roll_off_sel;//rolloff 0-[0.06 new rolloff],1-[0.11 original rolloff-默认] uint8 spec_shift; //频移 0-[频谱右移1/7MHz],1-[不频移-默认] }S_WL_PARA,*PS_WL_PARA; typedef struct { uint8 dio_tx; //当前dryloop上TX按键状态 int8 power_diff; //dryloop上 power增减值 上次查询到此次查询中间的差值 查询时发送给功放,发送后清零 uint8 alarm; uint8 tx_crm_is_dio; //功放是否为remote且TX_CRM为IO,若是,则该值为1,否则为0 uint8 tx_open; //功放射频是否打开, 1:打开 0:关闭 }S_MPTV_PARA; #define PSIP_SHT_NAME_LEN 8 typedef struct { uint16 used; uint16 channel_num; uint16 maj_num; uint16 min_num; uint8 sht_name[PSIP_SHT_NAME_LEN]; }S_PSIP_PARA; typedef struct { uint16 tsid; uint8 index; //用来指定当前操作的sip para序号 uint8 channel_max; uint16 ts_ctrl; uint16 local_update_flag; //本地需要更新标志 S_PSIP_PARA sip_para[PSIP_MAX_CHANNLE_NUM]; }S_PSTS_PARA,*PS_PSTS_PARA; #define MAX_FREQ_NUM 80 //现在频点最多70个 #if ATSC_USA_AMP typedef struct { float vol_9v; //9V电压 float vol_50v; //50V电压 float cur_50v; //50V电流 float gv_881; //前级栅极电压 float pa_fwd; //发射功率 float pa_reflect; //反射功率 float swr; //驻波比 float temp_pa; //功放温度 uint8 signal_reflect; //反射功率异常信号; uint8 signal_fwd; //发射功率异常信号 uint8 signal_temp; //温度异常信号 uint8 pac_lev; //功率等级 float cur_50V_2; //电流2 float cur_50v_3; float cur_50v_4; float pa_in; float vol_12v; uint32 tick_cnt; //计数 uint8 reserved1; //保留字节4字节 uint8 reserved2[3]; }S_PA_PARA,*PS_PA_PARA; //功率放大器参数 typedef struct { uint8 ip[4]; uint8 gateway[4]; uint8 mask[4]; }S_PA_CONFIG_PARA,*PS_PA_CONFIG_PARA; #endif typedef struct{ uint8 a_fssi; uint8 b_fssi; uint8 disable_up_flg; uint8 load_store_curve_flg; volatile uint8 display_stop; int display_thr; }S_EXTEND_SYS_STATE; typedef struct { S_LOG_PARA log_para; S_SYSTEM_PARA system_para; S_RF_PARA rf_para; S_NETWORK_PARA network_para; S_CONFIG_PARA config_para; //客户菜单参数 S_MODE_PARA mode_para; S_ADVANCE_PARA ad_para; //高级参数1 S_ADVANCE2_PARA ad2_para; //高级参数2 S_ADVANCE3_PARA ad3_para; //高级参数3 S_ADVANCE4_PARA ad4_para; S_ADVANCE5_PARA ad5_para; S_SN_PARA sn_para; S_LATCH_PARA latch_para; S_PID_STATUS_PARA pid_status; S_ADVANCE_DT_PARA ad_dt_para; //全局变量无此结构体 #if USE_PSTS S_PSTS_PARA psts_para; #endif #if ATSC_USA_AMP S_PA_PARA avr_pa_para; //功放 S_PA_CONFIG_PARA pa_config_para; #endif S_USER_INFO reg_user_info[MAX_REG_USER_INFO]; //0:管理员 液晶屏和网页可改 1:来宾帐户,固定不可改 2:隐藏账户--不可改 S_RA_PARA ra_para; S_WB_PARA wb_para; S_WC_PARA wc_para; S_WD_PARA wd_para; S_WE_PARA we_para; S_WF_PARA wf_para; S_RG_PARA rg_para; S_WH_PARA wh_para; S_RI_PARA ri_para; S_WJ_PARA wj_para; S_WK_PARA wk_para; S_WL_PARA wl_para; S_DPD_PARA dpd_para; S_MPTV_PARA mptv; uint8 dry_loop_amp; BOOL agc_auto_off_flag; uint8 ref_agc; uint8 pac_flag; uint8 fpga_load_wait_flag; //缓开机相关 uint8 tuner_status_flag; //tuner是否连接 uint8 cus_rst_flag; //客户菜单 uint8 fac_rst_flag; //V段 U段区分 uint8 bak_check_flag; //是否需要校检判断 uint8 bak_err_flag; //出错标记 //uint8 ca_value; uint8 fpga_ver_tmp[16]; uint8 lcd_web_lock; }S_ATSC_PARA; //系统全局参数 #define MAX_FREQ_NUM 80 //现在频点最多70个 #define SET_IP_DATA(ipaddr,a,b,c,d)\ do{\ (ipaddr[0]) = (a);\ (ipaddr[1]) = (b);\ (ipaddr[2]) = (c);\ (ipaddr[3]) = (d);\ }while(0) typedef enum { IP2TS_I2C_ADD_IP = 0X01, IP2TS_I2C_ADD_MASK, IP2TS_I2C_ADD_GATEWAY, IP2TS_I2C_ADD_MULTI, IP2TS_I2C_ADD_DEST_IP, IP2TS_I2C_ADD_PORT, IP2TS_I2C_ADD_REC_TYPE, //单播或组播类型 IP2TS_I2C_ADD_RESET, IP2TS_I2C_ADD_UDP_RTP, //包类型 IP2TS_I2C_ADD_PACKET_LEN, //包长 IP2TS_I2C_ADD_VERSION, //本地址只读,版本号信息 IP2TS_I2C_ADD_FEC, IP2TS_I2C_ADD_ROW, IP2TS_I2C_ADD_COL, IP2TS_I2C_ADD_DELAY, IP2TS_I2C_IP_BAK, IP2TS_I2C_PORT_BAK, }IP2TS_PARA_I2C_ADDRESS; typedef enum { IP2TS_TYPE_UDP = 0, IP2TS_TYPE_RTP, }IP2TS_IP_TYPE; typedef enum { IP2TS_REC_TYPE_MULTI = 0, IP2TS_REC_TYPE_SINGLE }IP2TS_IP_REC_TYPE; typedef enum { IP2TS_PACKET_188 = 0, IP2TS_PACKET_204, }IP2TS_PACKET_LEN; typedef struct { uint8 ip[4]; // 本地IP uint8 mask[4]; // 子网掩码 uint8 gateway[4]; // 网关 uint8 multi_address[4]; // 组播地址 uint16 port; // 本地端口号 uint16 udp_rtp; uint16 packet_len; uint16 receive_type; uint8 ip_bak[4]; uint16 port_bak; uint8 resrvd2[2]; uint16 fec; uint16 row; uint16 col; uint16 delay; uint32 ts2ip_version; //0xaabbccdd aa:ts MCU版本号 bbcc:月日信息 dd:FPGA版本号 显示为Va.a-bbcc(Vdd) uint32 valid; //数据有效标志 uint32 delay_sec; //延时 在液晶屏改动过程中,避免主任务刷新参数 }TS_NET_STRUCT,*PTS_NET_STRUCT; //第一个参数为currentmenu 后边待定 typedef void(*MENU_REFRESH_FUNC)(void *, void *); typedef void(*MENU_SAVE_PARA)(void*); //第一个参数为currentmenu typedef BOOL(*MENU_KEY_FUNC)(void *,uint8); typedef void(*MENU_READ_PARA)(void); /** 屏幕为2*24大小 ______________________________________________________ | | | | |______________________________________________________| */ typedef struct _MENU_S { uint16 index; //菜单序号 序号从0开始 uint16 level; //当前菜单等级 等级从0开始 0级为log屏幕 uint16 pre_index; //上一级菜单序号 uint16 level_index; //当前菜单在该子目录中的序号 uint16 item_index; //该菜单下有多个项目时,由该变量记录序号 以方便进入下级目录 默认为0 或者用于记录当前提示符的位置 uint16 item_total; //该菜单下提示符*号的个数 若为只读,可默认为0 MENU_REFRESH_FUNC refresh_func; MENU_KEY_FUNC key_func; MENU_SAVE_PARA save_para_func; MENU_READ_PARA read_para_func; char* disp_string[2]; }MENU_S,*PMENU_S; typedef struct { uint32 light; uint32 non_op_time; }LCD_STATUS_S,*PLCD_STATUS_S; typedef struct { uint8 line; uint8 pos[MAX_PROMPT_NUM]; }PROMPT_POS,*PPROMT_POS; //只读屏时,表示各个参数输出时对应的位置,若为可设置屏,为各提示符输出位置 typedef struct { uint32 idle_flag; //系统空闲 uint32 auto_update_time; //是否做过自动校正,默认正常运行过程中只能做一次自动校正; uint32 full_flag; //采样定是否已足够128个(一个循环) uint32 index; //序号 uint32 adpc_flag; //APDC自动校正启动标志 uint8 tsnr[CHECK_SIGNAL_NUM]; uint8 l_imd[CHECK_SIGNAL_NUM]; uint8 u_imd[CHECK_SIGNAL_NUM]; uint32 tsnr_sum; uint32 l_imd_sum; uint32 u_imd_sum; uint32 tsnr_abm_time; uint32 l_imd_abm_time; uint32 u_imd_abm_time; }S_CHECK_SIGNAL,*PS_CHECK_SIGNAL; typedef enum { DRYLOOP_CMD_SET_TS = 0x01, DRYLOOP_CMD_SET_RF = 0x02, DRYLOOP_CMD_SET_SYS = 0X03, DRYLOOP_CMD_GET_VER = 0X04, DRYLOOP_CMD_SET_FWD = 0X05, DRYLOOP_CMD_GET_RF = 0X10, DRYLOOP_CMD_GET_POWER= 0X11, DRYLOOP_CMD_GET_AMP = 0X12 }DRYLOOP_CMD_TYPE; typedef enum { ADPC_OFF=0, ADPC_HOLD, ADPC_UPDATE1, ADPC_UPDATE2, ADPC_UPDATE3, ADPC_UPDATE4, //自动校正完成后,再做一次UPDATE2,此处实际等同update2 ADPC_UPDATE5,//20191024 STATUS_LOAD_DATE = 0xAA, STATUS_SAVE_DATE = 0xBB, }ADPC_EM; typedef enum { ADPC_STATUS_OK=0, ADPC_STATUS_LARGE, ADPC_STATUS_SMALL, ADPC_STATUS_ERR1, ADPC_STATUS_ERR2, ADPC_STATUS_ERR3, }ADPC_STATUS_EM; typedef enum { MENU_CUSTOM=1, MENU_FACTORY=2, MENU_POWER=3, MENU_LOG, }MENU_EM; typedef enum{TYPE_KEY,TYPE_SEC}E_LCD_TYPE; extern S_ATSC_PARA atsc_para; #define NOT_SW_PARA(para) do{(para)=(para)?0:1;}while(0) #define SIZE_OF_ARRAY(s) (sizeof(s)/sizeof(s[0])) #define SIZE_OF_STRUCT(s) (sizeof(s)/sizeof(s[0])) #define JUDGE_AGC_ON() #if USE_CTRL_MODE #define JUDGE_CTRL() \ if(atsc_para.system_para.ctrl==CTRL_REMOTE) \ { \ break; \ }else \ {if(current_menu->indexitem_index = p->item_index>0?p->item_index-1:p->item_total-1; \ } \ else{ \ if(left_flag){ \ p->item_index = p->item_index>0?p->item_index-1:p->item_total-1; \ } \ } \ }while(0) #define INC_ITEM_INDEX(p) \ do{ \ if(para_change_flag==FALSE){ \ p->item_index = p->item_indexitem_total-1?p->item_index+1:0; \ }else{ \ if(right_flag){ \ p->item_index = p->item_indexitem_total-1?p->item_index+1:0; \ } \ } \ }while(0) #define DEC_ITEM_INDEX_ALL(p) do{p->item_index = p->item_index>0 ? p->item_index-1 : p->item_total-1;}while(0) #define INC_ITEM_INDEX_ALL(p) do{p->item_index = p->item_indexitem_total-1 ? p->item_index+1 : 0; }while(0) extern uint32 update_flag; void set_menu_init(void); uint32 txfreq_to_hz(uint32 chn); void init_version_info(void); void update_log_para(void); void save_fpga_pid(uint32 type); void detect_id(void); int32 degree2fah(int32 degree); void get_asi_input(uint8 asi,S_ASI_INPUT *pinput); void show_wait_info(char *pbuf); void show_wait_info_with_sec(uint32 sec); void show_cycle_tick(uint32 tick); void show_debug_num(uint32 tick ,uint32 num); void check_update_adpc_para(void); void check_agc_off(void); void save_new_cor(uint32 cor); //extern void get_sys_time(S_SYS_TIME *ptime); //extern void lcd_write_arrow(unsigned char x,unsigned char y,ARROW_DIRECTON direct); void lcd_write_arrow(uint32 x,uint32 y,ARROW_DIRECTON direct); extern void e2rom_load_default_param(unsigned char menu); extern void AGC_Set(void); extern void AGC_Start(void); extern void light_on(void); extern void light_off(void); extern uint8 get_key_value(void); extern void e2rom_save_sys(S_SYSTEM_PARA *ppara); extern void e2rom_save_rf(S_RF_PARA *ppara); extern void e2rom_save_wb(S_WB_PARA *ppara); extern void e2rom_save_wc(S_WC_PARA *ppara); extern void e2rom_save_wd(S_WD_PARA *ppara); extern void e2rom_save_network(S_NETWORK_PARA *ppara); extern void e2rom_save_mode(S_MODE_PARA *ppara); extern void e2rom_save_config(S_CONFIG_PARA *ppara); #if ATSC_USA_AMP extern void e2rom_save_pa_config(S_PA_CONFIG_PARA *ppara); #endif extern void e2rom_load_default_param(unsigned char menu); extern void e2rom_save_wb(S_WB_PARA *ppara); extern void e2rom_save_wc(S_WC_PARA *ppara); extern void e2rom_save_wd(S_WD_PARA *ppara); extern void e2rom_save_we(S_WE_PARA *ppara); extern void e2rom_save_wf(S_WF_PARA *ppara); extern void e2rom_save_wh(S_WH_PARA *ppara); extern void e2rom_save_wj(S_WJ_PARA *ppara); extern void e2rom_save_wk(S_WK_PARA *ppara); extern void e2rom_save_wl(S_WL_PARA *ppara); extern void e2rom_save_dpd_para(S_DPD_PARA *ppara); void e2rom_save_psts_ch(S_PSIP_PARA *psip,uint32 num); void e2rom_read_psts_ch(S_PSIP_PARA *psip,uint32 num); void e2rom_save_psts(S_PSTS_PARA *ppara); void e2rom_init_psts(S_PSTS_PARA *ppara); void e2rom_read_psts(S_PSTS_PARA *ppara); extern void e2rom_read_leak(uint32 chn,S_WE_PARA *ppara); extern void e2rom_save_leak(uint32 UI_ch, S_WE_PARA *ppara); extern void e2rom_save_ad(S_ADVANCE_PARA *ppara); extern void e2rom_save_ad2(S_ADVANCE2_PARA *ppara); extern void e2rom_save_ad3(S_ADVANCE3_PARA *ppara); extern void e2rom_save_ad4(S_ADVANCE4_PARA *ppara); extern void e2rom_save_ad5(S_ADVANCE5_PARA *ppara); extern void e2rom_save_user_info(S_USER_INFO *ppara); extern void web_save_pdt(uint8 pdt); extern void e2rom_read_power_db(uint32 cor); //power db extern void e2rom_save_power(S_RF_PARA *ppara); extern void tcp_spect_calc_sn_licence(uint32 key, uint64 * psn); extern void fpga_save_mode(S_MODE_PARA *ppara); extern void fpga_save_network(S_NETWORK_PARA *ppara); extern void fpga_save_sys(S_SYSTEM_PARA *ppara); extern void fpga_save_chn(S_RF_PARA *ppara); extern void fpga_save_rf(S_RF_PARA *ppara); extern void fpga_save_wb(S_WB_PARA *ppara); extern void fpga_save_wc(S_WC_PARA *ppara); extern void fpga_save_wd(S_WD_PARA *ppara); extern void fpga_save_we(S_WE_PARA *ppara); extern void fpga_save_wf(S_WF_PARA *ppara); extern void fpga_save_wh(S_WH_PARA *ppara); extern void fpga_save_wj(S_WJ_PARA *ppara); extern void fpga_save_all_para(BOOL flag); extern void adpc_load_data(uint32 cmd,uint32 adpc); extern void fpga_write_adpc(uint32 adpc); extern void fpga_save_ad(S_ADVANCE_PARA *ppara); extern void fpga_save_ad2(S_ADVANCE2_PARA *ppara); extern void fpga_save_ad3(S_ADVANCE3_PARA *ppara); extern void fpga_save_ad4(S_ADVANCE4_PARA *ppara); extern void fpga_save_power(S_WE_PARA *pwe,S_RF_PARA *prf); extern void freq_nochange(uint8 chn,uint8 chn2); void fpga_save_psts(S_PSTS_PARA *ppara); extern void config_fpga_soft(uint32 app); extern void tuner_init(uint32 channel); uint32 tuner_get_lock(void); uint32 tuner_get_snr(void); uint32 get_tuner_init_ok_flag(void); extern int8 tuner_read_rssi(void); extern void SoftwareUpdateBegin(void); extern void fpga_save_agc_vol(void); extern uint32 CPU_SR_Save(void); extern void CPU_SR_Restore(uint32); extern GPGSA_T *gps_get_sa(void); extern uint32 get_max_index(uint32 *pdate,uint32 max_num); extern void local_ip_init(void); extern void local_ip_change(void); extern void config_fpga_para(void); extern void dec_auto_adpc_time(void); extern void e2rom_save_latch(S_LATCH_PARA *ppara, S_SYSTEM_PARA *psys); extern void fpga_save_latch(S_LATCH_PARA *ppara, S_SYSTEM_PARA *psys); extern void enter_menu(uint32 index); extern void update_latch_para(void); extern void update_sys_time(void); extern void dryloop_amp_on(BOOL); extern void dryloop_uart_send_cmd(DRYLOOP_CMD_TYPE cmd,void *pdata); extern uint32 Net_write_RF(uint8 param); extern void e2rom_save_sn(S_SN_PARA *ppara); extern void delay_ms(uint32 m); extern void user_send_msg(uint32,uint32); extern void set_force_stop_adpc(BOOL flag); #if USE_PSTS extern void psts_para_clear(S_PSTS_PARA *ppara); #endif void lcd_task(void * pvParameters); void enter_menu(uint32 index); void enter_son_menu(uint32 index); void ret_father_menu(void); void light_on_forever(void); void disp_common_string(MENU_S *p); void lcd_write_prompt(const PROMPT_POS *ppos,PMENU_S pmenu); void read_log_para(void); uint32 check_lcd_light(uint32 type);; void add_4_hex(uint16 *pdata,uint32 pos); void dec_4_hex(uint16 *pdata,uint32 pos); extern void adpc_load_data(uint32 cmd,uint32 adpc); void eebak_clear(uint8 standard); extern void dryloop_process(void); extern void sys_reset_rst_time(void); //void mac_change(uint32 mac); uint32 ts_get_input_status(uint8 tmp); uint32 ts_get_input_port(uint8 tmp); uint32 psip_calc_sn_licence(uint32 key,uint64 *psn); uint32 eas_calc_sn_licence(uint32 key,uint64 *psn); void rf_power_set_new(uint16 new_power); void apply_rf_power_para(S_RF_PARA *ppara); static int math_abs(int i) //内嵌形式 { return i>0?i:-i; } #ifndef htonl #define htonl(a) \ ((((a) >> 24) & 0x000000ff) | \ (((a) >> 8) & 0x0000ff00) | \ (((a) << 8) & 0x00ff0000) | \ (((a) << 24) & 0xff000000)) #endif void lcd_task(void * pvParameters); S_CONFIG_PARA *get_atsc_config_para(void); extern void trigger_rf_agc_proc(uint8 trigger); extern uint8 check_rf_agc_trigger(); extern int sys_rf_agc_switch_proc(uint8 trigger); extern int turn_off_rf_agc_state(uint8 excid); extern void set_sys_rf_agc(uint8 agc); void lcd_thr_id(void * pvParameters); extern int thr_lcd_thread(void); extern void set_trigger_lcd_menu(uint8 lcd_trigger); extern void remote_set_power_process(uint32 new_power); extern void get_tsnr_limd_uimd(uint16 *ptsnr, uint8 *plmid, uint8 *pumid); extern void save_ts_misc2(void *psave); extern void save_ts_muti2(void *psave); extern void save_ts_mask2(void *psave); extern void save_ts_gate2(void *psave); extern void save_ts_ip2(void *psave); extern void save_ts_ip(void *psave); extern void save_ts_gate(void *psave); extern void save_ts_mask(void *psave); extern void save_ts_muti(void *psave); extern void save_ts_misc(void *psave); extern void save_ts_fec(void *psave); extern void save_ts_fec2(void *psave); extern void save_dpd_config(void *psave); extern void save_ad3_para(void *psave); extern void web_save_roll_off(uint8 roll_off); extern void psts_para_update(S_PSTS_PARA *ppara); extern void set_trigger_lcd_menu(uint8 lcd_trigger); extern void atsc_set_force_stop_adpc(BOOL flag); extern void save_user_para(void *psave); extern uint8 g_ca_value; void realtime_update_fpga_version_reg(); #endif /*************************************END************************************************/