Files

1512 lines
40 KiB
C
Executable File

#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->index<FAC_LCD) para_change_flag = TRUE;}
#else
#define JUDGE_CTRL()
#endif
//由于牵涉到*变? 若当前屏幕中某一个变量占用多个光标位置时,可能需手动调整
// 1)change_flag = flase 时,随意移动;
// 2)change_flag = ture 时,在参数整体内可移动(替换原来的2个宏) 3)其他情况不能移动
#define DEC_ITEM_INDEX(p) \
do{ \
if(para_change_flag==FALSE){ \
p->item_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_index<p->item_total-1?p->item_index+1:0; \
}else{ \
if(right_flag){ \
p->item_index = p->item_index<p->item_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_index<p->item_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************************************************/