Files
smod_atsc_app/atsc_app/task/web_server.c
T

2481 lines
77 KiB
C

/*
@NOT_ACT_USED
*/
/******************************************************************************
版权所有 (C), 2001-2011, 上海全波通信技术有限公司
******************************************************************************
文 件 名 : web_server.c
版 本 号 : 初稿
作 者 : 郭金涛
生成日期 : 2013年8月7日
最近修改 :
功能描述 : 网页部分处理主文件,负责响应网页的CGI,另外有网页任务负责更新数
据信息
函数列表 :
修改历史 :
1.日 期 : 2013年8月7日
作 者 : 郭金涛
修改内容 : 创建文件
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "os_task.h"
#include "type.h"
#include "httpd.h"
#include "web_server.h"
#include "cgifuncs.h"
#include "os_task.h"
#include "eeprom.h"
#include "lcd_task.h"
#include "uart_user.h"
#include "delay.h"
#include "sockets.h"
#include "log_task.h"
#if USE_TCP_COMM || FPGA_UPGRADE
#include "tcp_task.h"
#endif
#if ALARM_USE_UDP
struct sockaddr_in alarm_clientaddr;
int alarm_sockfd;
#endif
#if USE_WEB_MODULE
S_USER_INFO user_info = {LOGIN_NULL,"",""};
#define PROC_WEB_SAVE_TASK WEB_TASK_ID //理论上,保存都交由液晶任务,但内部暂时有些部分,如改TX等牵涉到延时等,这个暂不做改动
#define WAIT_SAVE_PSIP_TICK 5
extern S_ATSC_PARA atsc_para;
extern uint8 off_rf;
#if USE_DRY_LOOP
extern S_DRYLOOP dryloop_status ;
#endif
#define NUM_CONFIG_CGI_URIS (sizeof(g_psConfigCGIURIs) / sizeof(tCGI))
#if LWIP_HTTPD_AJX
#define AJAX_HEADER "0" // First Bytes Reserved
#define AJAX_LOGIN_OUT "1" // Reserved
#define AJAX_FOOTER "\n"
#define AJAX_SPLIT ";"
static int atsc_ajx_status_user(int iIndex, char *pcInsert, int *pcLen);
static int atsc_ajx_status(int iIndex, char *pcInsert, int *pcLen);
static int atsc_ajx_set(int iIndex, char *pcInsert, int *pcLen);
static int atsc_ajx_log_default(int iIndex, char *pcInsert, int *pcLen);
static int atsc_ajx_log_pre(int iIndex, char *pcInsert, int *pcLen);
static int atsc_ajx_log_nxt(int iIndex, char *pcInsert, int *pcLen);
static const tAJX g_psConfigAJXURIs[] =
{
{ "/status.ajx", atsc_ajx_status },
{ "/status_user.ajx", atsc_ajx_status_user },
{ "/set.ajx", atsc_ajx_set },
{ "/slogdef.ajx", atsc_ajx_log_default },
{ "/slogpre.ajx", atsc_ajx_log_pre },
{ "/slognxt.ajx", atsc_ajx_log_nxt },
};
#define NUM_CONFIG_AJX_URIS (sizeof(g_psConfigAJXURIs) / sizeof(tAJX))
#endif
#ifdef LWIP_HTTPD_AJX
void httpd_ajx_init(void)
{
http_set_ajx_handlers(g_psConfigAJXURIs, NUM_CONFIG_AJX_URIS);
}
#endif
void user_send_msg(uint32 id, uint32 type)
{
MSG* pmsg=NULL;
pmsg = alloc_msg();
if(pmsg)
{
pmsg->type = type;
pmsg->need_free = MSG_NEED_FREE;
send_msg(id,pmsg);
}
}
static void web_send_save_msg(uint32 id,uint32 type,void *ppara)
{
MSG* pmsg=NULL;
pmsg = alloc_msg();
if(pmsg)
{
pmsg->type = MSG_WEB_SAVE_PARA;
pmsg->wPara = type;
pmsg->need_free = MSG_NEED_FREE;
pmsg->lPara = (uint32)ppara;
send_msg(id,pmsg);
}
else
{
free_mem(ppara);
}
}
S_CGI_STATUS cgi_status = {0,};
S_CGI_SET cgi_set = {0,};
S_CGI_RF cgi_rf = {0,};
S_CGI_NET cgi_net = {0,};
S_CGI_MODE cgi_mode = {0,};
S_CGI_GPS cgi_gps = {0,};
S_CGI_FREQ_PARA cgi_freq_para = {0,};
#if ERR_TO_LCM
S_CGI_LATCH cgi_latch = {0,};
#endif
#if ATSC_USA_AMP
S_CGI_AMP cgi_amp = {0,};
#endif
#if USE_TS2IP
extern TS_NET_STRUCT ts_net_para;
TS_NET_STRUCT cgi_ts = {0,};
#endif
S_CGI_TUNER cgi_tuner = {0,};
static uint32 operation_flag = FALSE;
S_LOGIN_STATE login_state;
const char *web_atsc_ret_url[WEB_INDEX_END] =
{
"/login.shtml",
"/status_info.shtml",
"/sys_set.shtml",
"/sys_rf.shtml",
"/sys_mode.shtml",
"/sys_ts.shtml",
"/sys_latch.shtml",
"/sys_net.shtml",
"/sys_log.shtml",
"/sys_psip.shtml",
"/status_info_user.shtml",
"/sys_set_user.shtml",
"/sys_rf_user.shtml",
"/sys_mode_user.shtml",
"/sys_ts_user.shtml",
"/sys_latch_user.shtml",
"/sys_net_user.shtml",
};
const char *web_atsc_change_url[WEB_INDEX_END] =
{
"window.location=\"/login.shtml\"",
"window.location=\"/status_info.shtml\"",
"window.location=\"/sys_set.shtml\"",
"window.location=\"/sys_rf.shtml\"",
"window.location=\"/sys_mode.shtml\"",
"window.location=\"/sys_ts.shtml\"",
"window.location=\"/sys_net.shtml\"",
"window.location=\"/sys_latch.shtml\"",
"window.location=\"/sys_log.shtml\"",
"window.location=\"/sys_psip.shtml\"",
"window.location=\"/status_info_user.shtml\"",
"window.location=\"/sys_set_user.shtml\"",
"window.location=\"/sys_rf_user.shtml\"",
"window.location=\"/sys_mode_user.shtml\"",
"window.location=\"/sys_ts_user.shtml\"",
"window.location=\"/sys_net_user.shtml\"",
"window.location=\"/sys_latch_user.shtml\"",
};
#define JAVASCRIPT_HEADER ""
#define JAVASCRIPT_FOOTER ""
typedef enum
{
SSI_ATSC_INDEX_FLAG = 0,
SSI_INDEX_FORM_LOGIN,
SSI_INDEX_FORM_STATUS,
SSI_INDEX_FORM_SET,
SSI_INDEX_FORM_RF,
SSI_INDEX_FORM_NET,
SSI_INDEX_FORM_MODE,
SSI_INDEX_FORM_VER,
SSI_INDEX_FORM_GPS,
SSI_INDEX_FORM_LATCH,
SSI_INDEX_FORM_AMP,
SSI_INDEX_FORM_AMPEX,
SSI_INDEX_FORM_TS,
SSI_INDEX_FORM_SN,
SSI_INDEX_FORM_TUNER,
SSI_INDEX_FORM_PSTS1,
SSI_INDEX_FORM_PSTS2,
SSI_INDEX_FORM_PSTS3,
SSI_INDEX_FORM_PSTS4,
SSI_INDEX_FORM_PSTS5,
SSI_INDEX_FORM_TITLE,
SSI_INDEX_FORM_STATUS_,
SSI_INDEX_FORM_SET_,
SSI_INDEX_FORM_RF_,
SSI_INDEX_FORM_TS_,
SSI_INDEX_FORM_LOG,
SSI_INDEX_FORM_END,
}SSI_INDEX;
static const char *g_pcConfigSSITags[SSI_INDEX_FORM_END] =
{
"formatsc",
"formlogin",
"formstatus",
"formset",
"formrf",
"formnet",
"formmode",
"formver",
"formgps",
"formlatch",
"formamp",
"formampex",
"formts",
"formsn",
"formtn",
"formpsip1",
"formpsip2",
"formpsip3",
"formpsip4",
"formpsip5",
"formtitle",
"formstatus_",
"formset_",
"formrf_",
"formts_",
"formlog",
};
#define NUM_CONFIG_CGI_URIS (sizeof(g_psConfigCGIURIs) / sizeof(tCGI))
#if USE_HTTP_LOGIN
LOGIN_TYPE check_user_valid(S_USER_INFO *plogin)
{
uint32 i = 0;
S_USER_INFO *preg_info = &atsc_para.reg_user_info[0];
#if 1//_USE_RVL
for(i=0;i<MAX_REG_USER_INFO;i++,preg_info++)
{
if(preg_info->user_type==LOGIN_NULL)
continue;
if((memcmp(plogin->name,preg_info->name,strlen(preg_info->name))==0)
&&(strlen(plogin->name)==strlen(preg_info->name)))
{
if((memcmp(plogin->password,preg_info->password,strlen(preg_info->password))==0)
&&(strlen(plogin->password)==strlen(preg_info->password)))
return (LOGIN_TYPE)preg_info->user_type;
}
}
#else
return LOGIN_ADMIN;
#endif
return LOGIN_NULL;
}
#endif
static void set_operation_flag(uint8 flag)
{
operation_flag = flag;
}
static uint32 get_operation_flag(void)
{
return operation_flag;
}
#define CGI_JUDEG_IS_REMOTE(web) \
do{ \
if(atsc_para.system_para.ctrl==CTRL_LOCAL){ \
set_operation_flag(web); \
return ((char*)web_atsc_ret_url[web]); \
} \
}while(0)
#define CGI_JUDGE_LOGIN() \
do{ \
if(login_state.state[login_state.index].pw_state==LOGIN_NULL){ \
set_operation_flag(WEB_LOGIN); \
return ((char*)web_atsc_ret_url[WEB_LOGIN]); \
} \
}while(0)
#define CGI_RET_URL(web) \
do{ \
uint32 M_I_TEMP=0; \
if(login_state.state[login_state.index].pw_state==LOGIN_NORMAL){\
if((web<WEB_STATUS_1)&&(web+WEB_STATUS_1-1<WEB_INDEX_END)){ \
M_I_TEMP=web+WEB_STATUS_1-1; \
}else{ \
M_I_TEMP=web; \
} \
return((char*)web_atsc_ret_url[M_I_TEMP]); \
}else{ \
set_operation_flag(web); \
return((char*)web_atsc_ret_url[web]); \
} \
}while(0)
uint8 g_freq=0;
static const char *cgi_handle_set_freq(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
//S_RF_PARA *ppara;
uint32 lcl_freq;
if(atsc_para.system_para.ctrl==CTRL_LOCAL)
{
CGI_RET_URL(WEB_RF);
}
/*ppara = (S_RF_PARA *)alloc_mem(sizeof(S_RF_PARA));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}*/
g_freq = atsc_para.rf_para.txfreq;
//http_load_default_para(WEB_RF,&rfpara);
data = GetCGIParam("freq6m", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError){
lcl_freq = (data+FREQ_MIN_V1);
if((FREQ_MIN_V1<=lcl_freq) && (lcl_freq<=FREQ_6M_MAX_U)){
g_freq = lcl_freq;
usr_http_write_freq(g_freq);
}
}
//web_send_save_msg(WEB_TASK_ID,WEB_SET_FREQ,&g_freq);
CGI_RET_URL(WEB_RF);
}
#include <stdlib.h>
static char gstrbuf[50]={0};
static uint32 gtmp_sn=0;
static char *cgi_handle_set_sys(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError = FALSE;
uint32 data = 0;
S_CGI_SET* ppara;
char name[16];
uint64 h_sn=0;
uint64 l_sn=0;
CGI_JUDGE_LOGIN();
ppara = (S_CGI_SET*)alloc_mem(sizeof(S_CGI_SET));
if(ppara==NULL)
{
CGI_RET_URL(WEB_SET);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_SET,ppara);
#endif
if(atsc_para.system_para.ctrl==CTRL_LOCAL)
{
data = GetCGIParam("ctl", pcParam, pcValue, iNumParams,&bParamError);
if((!bParamError)&&(data<=1)&&(data!=atsc_para.system_para.ctrl))
{
ppara->ctrl = data;
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_SET,ppara);
}
else
{
free_mem(ppara);
}
}
else
{
data = GetCGIParam("asi", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->input = data;
data = GetCGIParam("gps", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->gps = data;
data = GetCGIParam("adp", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
uint8 bak_adpc = ppara->adpc;
ppara->adpc = data;
if((bak_adpc==0)||(ppara->adpc==1))
{
atsc_para.system_para.adpc_err = 0;
ppara->adpc_err = 0;
}
if((bak_adpc!=ppara->adpc) && (ppara->adpc==0))
ppara->adpc_err=0;
if((bak_adpc!=ppara->adpc)&&(ppara->adpc>=ADPC_UPDATE1))
ppara->adpc_err=0xff;
}
data = GetCGIParam("ctl", pcParam, pcValue, iNumParams,&bParamError);
if((!bParamError)&&(data<=1)&&(data!=atsc_para.system_para.ctrl))
{
ppara->ctrl = data;
}
memset(name,0,ATSC_TITLE_LEN);
data = GetCGIStringParam("ltitle", pcParam, pcValue, iNumParams,name,ATSC_TITLE_LEN-1,1);
if(data)
{
memcpy(ppara->web_title,name,ATSC_TITLE_LEN);
}
ppara->sntp_en = GetCGIParam("ntp_enable", pcParam, pcValue, iNumParams,&bParamError);
ppara->sntp_sip[0] = GetCGIParam("ntpip1", pcParam, pcValue, iNumParams,&bParamError);
ppara->sntp_sip[1] = GetCGIParam("ntpip2", pcParam, pcValue, iNumParams,&bParamError);
ppara->sntp_sip[2] = GetCGIParam("ntpip3", pcParam, pcValue, iNumParams,&bParamError);
ppara->sntp_sip[3] = GetCGIParam("ntpip4", pcParam, pcValue, iNumParams,&bParamError);
ppara->fwd_cal = GetCGIParam("fwd_cal", pcParam, pcValue, iNumParams,&bParamError);
memset(gstrbuf,0,50);
data = GetCGIStringParam("sn", pcParam, pcValue, iNumParams,gstrbuf,49,1);
if(data)
{
h_sn = atoll(gstrbuf);
if(h_sn!=ppara->sn){
ppara->sn = h_sn;
}
}
data = GetCGIParam("pdt", pcParam, pcValue, iNumParams,&bParamError);
if((!bParamError)&&(data!=ppara->pdt))
{
ppara->pdt = data;
}
data = GetCGIParam("pa_crf", pcParam, pcValue, iNumParams,&bParamError);
if((!bParamError)&&(data!=ppara->pa_link_ctrl_rf)&&(data<=1))
{
ppara->pa_link_ctrl_rf = data;
}
web_send_save_msg(LCD_TASK_ID,WEB_SET,ppara);
}
CGI_RET_URL(WEB_SET);
}
static char *cgi_handle_set_netcfg(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError = FALSE;
//uint32 data = 0;
S_CGI_SET* ppara;
//char name[16];
CGI_JUDGE_LOGIN();
ppara = (S_CGI_SET*)alloc_mem(sizeof(S_CGI_SET));
if(ppara==NULL)
{
CGI_RET_URL(WEB_SET);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_SET,ppara);
#endif
ppara->netcfg.ip[0] = GetCGIParam("netip1", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.ip[1] = GetCGIParam("netip2", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.ip[2] = GetCGIParam("netip3", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.ip[3] = GetCGIParam("netip4", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.mask[0] = GetCGIParam("netmask1", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.mask[1] = GetCGIParam("netmask2", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.mask[2] = GetCGIParam("netmask3", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.mask[3] = GetCGIParam("netmask4", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.gateway[0] = GetCGIParam("gateway1", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.gateway[1] = GetCGIParam("gateway2", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.gateway[2] = GetCGIParam("gateway3", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.gateway[3] = GetCGIParam("gateway4", pcParam, pcValue, iNumParams,&bParamError);
#if USE_NETWORK_DNS
ppara->netcfg.dns[0] = GetCGIParam("dns1", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.dns[1] = GetCGIParam("dns2", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.dns[2] = GetCGIParam("dns3", pcParam, pcValue, iNumParams,&bParamError);
ppara->netcfg.dns[3] = GetCGIParam("dns4", pcParam, pcValue, iNumParams,&bParamError);
#else
memset(ppara->netcfg.dns, 0, 4);
#endif
web_send_save_msg(LCD_TASK_ID,WEB_SET,ppara);
CGI_RET_URL(WEB_SET);
}
static char *cgi_handle_arm_up(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError = FALSE;
uint32 data = 0;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_SET);
data = GetCGIParam("arm_up", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data)
{
MSG *pmsg = alloc_msg();
if(pmsg)
{
pmsg->type = MSG_UPGRADE;
send_msg(MAIN_TASK_ID,pmsg);
}
else
{
lcd_write_string(0,0," Upgrade Mode... ");
lcd_write_string(1,0," To Abort,Cycle The Power! ");
lcd_write_cache();
SoftwareUpdateBegin(); //函数不会再返回!
}
}
}
CGI_RET_URL(WEB_SET);
}
static char *cgi_handle_arm_rst(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError = FALSE;
uint32 data = 0;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_SET);
data = GetCGIParam("arm_rst", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data)
{
MSG *pmsg = alloc_msg();
if(pmsg)
{
pmsg->type = MSG_MCU_REBOOT;
send_msg(MAIN_TASK_ID,pmsg);
}
else
{
NVIC_SystemReset();
}
}
}
CGI_RET_URL(WEB_SET);
}
static char *cgi_handle_set_net(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_NET *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_NET);
ppara = (S_CGI_NET*)alloc_mem(sizeof(S_CGI_NET));
if(ppara==NULL)
{
CGI_RET_URL(WEB_NET);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_NET,ppara);
#endif
data = GetCGIParam("DLY", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
ppara->delay = data;
if(ppara->delay>NET_MAX_DELAY)
ppara->delay = NET_MAX_DELAY;
}
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_NET,ppara);
CGI_RET_URL(WEB_NET);
}
static char *cgi_handle_set_mode(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_MODE *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_MODE);
ppara = (S_CGI_MODE*)alloc_mem(sizeof(S_CGI_MODE));
if(ppara==NULL)
{
CGI_RET_URL(WEB_MODE);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_MODE,ppara);
#endif
bParamError = false;
if((atsc_para.system_para.mode))
{
data = GetCGIParam("sync", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->sync = data;
if(atsc_para.system_para.net==0)
{
data = GetCGIParam("tcp_c", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->tcp_c= data;
data = GetCGIParam("zp1f", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->zp1f = data;
}
}
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_MODE,ppara);
CGI_RET_URL(WEB_MODE);
}
static char *cgi_handle_set_gps(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_RET_URL(WEB_STATUS);
}
static char *cgi_handle_login(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
//S_USER_INFO user_info = {LOGIN_NULL,"",""};
GetCGIStringParam("user_name", pcParam, pcValue, iNumParams,user_info.name,sizeof(user_info.name),0);
GetCGIStringParam("pass_word", pcParam, pcValue, iNumParams,user_info.password,sizeof(user_info.password),0);
switch(check_user_valid(&user_info))
{
case LOGIN_NULL:default:
login_state.state[login_state.index].pw_state = LOGIN_NULL;
login_state.state[login_state.index].login_err = TRUE;
return (char*)web_atsc_ret_url[WEB_LOGIN];
case LOGIN_NORMAL:
login_state.state[login_state.index].pw_state = LOGIN_NORMAL;
login_state.state[login_state.index].login_tick = get_sys_tick();
login_state.state[login_state.index].url_reset = TRUE;
login_state.state[login_state.index].login_err = FALSE;
return (char*)web_atsc_ret_url[WEB_STATUS_1];
case LOGIN_ADMIN:
login_state.state[login_state.index].pw_state = LOGIN_ADMIN;
login_state.state[login_state.index].login_tick = get_sys_tick();
login_state.state[login_state.index].url_reset = TRUE;
login_state.state[login_state.index].login_err = FALSE;
return (char*)web_atsc_ret_url[WEB_STATUS];
case LOGIN_ENGINEER:
login_state.state[login_state.index].pw_state = LOGIN_ENGINEER;
login_state.state[login_state.index].login_tick = get_sys_tick();
login_state.state[login_state.index].url_reset = TRUE;
login_state.state[login_state.index].login_err = FALSE;
return (char*)web_atsc_ret_url[WEB_STATUS];
}
}
void get_adpc_err_info(uint8 adpc_err,uint8 *buf)
{
switch(adpc_err)
{
case 0:
sprintf((char*)buf,"OK");
break;
case STATUS_SAVE_DATE:
sprintf((char*)buf,"SAVING DATA...");
break;
case STATUS_LOAD_DATE:
sprintf((char*)buf,"LOADING DATA...");
break;
case 0xff:
sprintf((char*)buf,"Updating...");
break;
case 1:
sprintf((char*)buf,"FEEDBACK TOO BIG!");
break;
case 2:
sprintf((char*)buf,"FEEDBACK TOO SMALL!");
break;
case 3:
sprintf((char*)buf,"FEEDBACK LINK ERROR!");
break;
case 4:
sprintf((char*)buf,"ADPC ERROR!");
break;
default:
sprintf((char*)buf,"FEEDBACK Link ERROR!");
break;
}
}
#if ERR_TO_LCM
static char *cgi_handle_set_latch(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_LATCH *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_LATCH);
ppara = (S_CGI_LATCH*)alloc_mem(sizeof(S_CGI_LATCH));
if(ppara==NULL)
{
CGI_RET_URL(WEB_LATCH);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_LATCH,ppara);
#endif
bParamError = false;
data = GetCGIParam("reset", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->reset = data;
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_LATCH,ppara);
CGI_RET_URL(WEB_LATCH);
}
#endif
static char *cgi_handle_set_rf(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_RF *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_RF);
ppara = (S_CGI_RF*)alloc_mem(sizeof(S_CGI_RF));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_RF,ppara);
#endif
data = GetCGIParam("rfy", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
ppara->rf = data;
}
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_RF,ppara);
CGI_RET_URL(WEB_RF);
}
/*
int32 conv_locPower_to_db_amp100(uint16 power)
{
uint16 temp;
int32 pow_db_amp;
temp = power;
temp = temp>=RF_POWER_ZERO?(temp-RF_POWER_ZERO):(RF_POWER_ZERO-temp);
//ppara->power[0] = (power>RF_POWER_ZERO)?0:1;
//ppara->power[1] = temp/20;
//ppara->power[2] = temp%20;
pow_db_amp = (uint32)(temp/20)*100 + temp%20*5;
if(power>RF_POWER_ZERO){//+
pow_db_amp = pow_db_amp;
}
else{//-
pow_db_amp = -pow_db_amp;
}
return pow_db_amp;
}
int32 conv_webPower_to_db_amp100(uint8 web_sign,uint8 web_int,uint8 web_dec)
{
int32 pow_db_amp;
pow_db_amp=web_int*100+web_dec*5;
if(web_sign==0){//+
pow_db_amp = pow_db_amp;
}
else{//-
pow_db_amp = -pow_db_amp;
}
return pow_db_amp;
}
*/
static char *cgi_handle_set_power(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_RF *ppara;
int32 loc_pow=0;
int32 web_pow=0;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_RF);
ppara = (S_CGI_RF*)alloc_mem(sizeof(S_CGI_RF));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_RF,ppara);
#endif
data = GetCGIParam("pw0", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->power[0] = data;
data = GetCGIParam("pw1", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->power[1] = data;
data = GetCGIParam("pw2", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->power[2] = data;
loc_pow = conv_locPower_to_db_amp100(atsc_para.rf_para.power);
web_pow = conv_webPower_to_db_amp100(ppara->power[0],ppara->power[1],ppara->power[2]);
if(web_pow <= loc_pow+100)
{
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_RF,ppara);
}
CGI_RET_URL(WEB_RF);
}
static char *cgi_handle_set_agc(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_RF *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_RF);
ppara = (S_CGI_RF*)alloc_mem(sizeof(S_CGI_RF));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_RF,ppara);
#endif
data = GetCGIParam("agc", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(ppara->agc != data)
{
ppara->agc = data;
}
}
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_RF,ppara);
CGI_RET_URL(WEB_RF);
}
static char *cgi_handle_set_rccmd(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_RF *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_RF);
ppara = (S_CGI_RF*)alloc_mem(sizeof(S_CGI_RF));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_RF,ppara);
#endif
data = GetCGIParam("rc_cmd", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(ppara->rc_cmd != data)
{
ppara->rc_cmd = data;
}
}
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_RF,ppara);
CGI_RET_URL(WEB_RF);
}
static char *cgi_handle_set_tx(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_CGI_RF *ppara;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_RF);
ppara = (S_CGI_RF*)alloc_mem(sizeof(S_CGI_RF));
if(ppara==NULL)
{
CGI_RET_URL(WEB_RF);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_RF,ppara);
#endif
if( (atsc_para.wh_para.func==0)&&(atsc_para.ad3_para.rc_cmd) )
{
data = GetCGIParam("tx", pcParam, pcValue, iNumParams,&bParamError);
if((!bParamError)&&(ppara->tx != data))
{
ppara->tx = data;
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_RF,ppara);
}
}
CGI_RET_URL(WEB_RF);
}
#if USE_TS2IP
static char *cgi_handle_set_ts(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
TS_NET_STRUCT *ppara;
uint32 value;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_TS);
ppara = (TS_NET_STRUCT*)alloc_mem(sizeof(TS_NET_STRUCT));
if(ppara==NULL)
{
CGI_RET_URL(WEB_TS);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_TS,ppara);
#endif
ppara->ip[0] = GetCGIParam("ip1", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip[1] = GetCGIParam("ip2", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip[2] = GetCGIParam("ip3", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip[3] = GetCGIParam("ip4", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip_bak[0] = GetCGIParam("bakip1", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip_bak[1] = GetCGIParam("bakip2", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip_bak[2] = GetCGIParam("bakip3", pcParam, pcValue, iNumParams,&bParamError);
ppara->ip_bak[3] = GetCGIParam("bakip4", pcParam, pcValue, iNumParams,&bParamError);
ppara->port_bak = GetCGIParam("bakport", pcParam, pcValue, iNumParams,&bParamError);
ppara->gateway[0] = GetCGIParam("gt1", pcParam, pcValue, iNumParams,&bParamError);
ppara->gateway[1] = GetCGIParam("gt2", pcParam, pcValue, iNumParams,&bParamError);
ppara->gateway[2] = GetCGIParam("gt3", pcParam, pcValue, iNumParams,&bParamError);
ppara->gateway[3] = GetCGIParam("gt4", pcParam, pcValue, iNumParams,&bParamError);
ppara->mask[0] = GetCGIParam("mk1", pcParam, pcValue, iNumParams,&bParamError);
ppara->mask[1] = GetCGIParam("mk2", pcParam, pcValue, iNumParams,&bParamError);
ppara->mask[2] = GetCGIParam("mk3", pcParam, pcValue, iNumParams,&bParamError);
ppara->mask[3] = GetCGIParam("mk4", pcParam, pcValue, iNumParams,&bParamError);
ppara->multi_address[0] = GetCGIParam("ma1", pcParam, pcValue, iNumParams,&bParamError);
ppara->multi_address[1] = GetCGIParam("ma2", pcParam, pcValue, iNumParams,&bParamError);
ppara->multi_address[2] = GetCGIParam("ma3", pcParam, pcValue, iNumParams,&bParamError);
ppara->multi_address[3] = GetCGIParam("ma4", pcParam, pcValue, iNumParams,&bParamError);
ppara->port = GetCGIParam("uport", pcParam, pcValue, iNumParams,&bParamError);
ppara->udp_rtp = GetCGIParam("pktp", pcParam, pcValue, iNumParams,&bParamError);
ppara->packet_len = GetCGIParam("pklen", pcParam, pcValue, iNumParams,&bParamError);
ppara->receive_type = GetCGIParam("pkrec", pcParam, pcValue, iNumParams,&bParamError);
value = GetCGIParam("fec_swh", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->fec= value;
value = GetCGIParam("fec_dly", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
ppara->delay= value;
web_send_save_msg(PROC_WEB_SAVE_TASK,WEB_TS,ppara);
vTaskDelay(WAIT_SAVE_PSIP_TICK);
CGI_RET_URL(WEB_TS);
}
#endif
#if USE_PSTS
#define PSTS_KEY_IS_VALID() (atsc_para.sn_para.psip_key_valid)
//PSIP参数保存时,直接发给LCD_TASK任务保存!
static char *cgi_psts_edit(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
tBoolean bParamError;
uint32 data = 0;
S_PSTS_PARA *ppara;
uint32 send_flag = 0;
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
if(!PSTS_KEY_IS_VALID())
{
set_operation_flag(WEB_PSIP);
return ((char*)web_atsc_ret_url[WEB_PSIP]);
}
ppara = (S_PSTS_PARA*)alloc_mem(sizeof(S_PSTS_PARA));
if(ppara==NULL)
{
CGI_RET_URL(WEB_PSIP);
}
#if 1//_USE_RVL_
http_load_default_para(WEB_PSIP,ppara);
#endif
data = GetCGIParam("ts_edit", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data!=ppara->ts_ctrl)
{
ppara->ts_ctrl = data;
send_flag++;
}
}
if(atsc_para.psts_para.ts_ctrl==PSTS_CTRL_ENABLE)
{
data = GetCGIParam("tsid", pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data!=ppara->tsid)
{
ppara->tsid = data;
send_flag++;
}
}
}
if(send_flag)
{
web_send_save_msg(LCD_TASK_ID,WEB_PSIP,ppara);
vTaskDelay(WAIT_SAVE_PSIP_TICK); //更改PSIP信息,增加适当延时,等待其他任务更新内部数据,此函数是由TCP任务调用
}
else
{
free_mem(ppara);
}
CGI_RET_URL(WEB_PSIP);
}
static void cgi_psts_psip_basic(int iIndex, int iNumParams, char *pcParam[], char *pcValue[],uint32 index)
{
tBoolean bParamError;
uint32 data = 0;
S_PSTS_PARA *ppara;
char cgi_name[24];
char new_sht[32];
uint32 change_flag = 0;
if(index>=PSIP_MAX_CHANNLE_NUM)
{
return;
}
if(atsc_para.psts_para.ts_ctrl!=PSTS_CTRL_ENABLE)
{
return;
}
if(!PSTS_KEY_IS_VALID())
{
return;
}
ppara = (S_PSTS_PARA*)alloc_mem(sizeof(S_PSTS_PARA));
if(ppara==NULL)
{
return;
}
#if 1//_USE_RVL_
http_load_default_para(WEB_PSIP,ppara);
#endif
sprintf(cgi_name,"maj_num%d",index);
data = GetCGIParam(cgi_name, pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data!=ppara->sip_para[index].maj_num)
{
ppara->sip_para[index].maj_num= data;
change_flag++;
}
}
sprintf(cgi_name,"min_num%d",index);
data = GetCGIParam(cgi_name, pcParam, pcValue, iNumParams,&bParamError);
if(!bParamError)
{
if(data!=ppara->sip_para[index].min_num)
{
ppara->sip_para[index].min_num= data;
change_flag++;
}
}
sprintf(cgi_name,"sht_name%d",index);
GetCGIStringParam(cgi_name, pcParam, pcValue, iNumParams,new_sht,sizeof(new_sht),1);
if(strcmp((char*)ppara->sip_para[index].sht_name,new_sht))
{
uint32 len = strlen(new_sht);
len = len>PSIP_SHT_NAME_LEN-1?PSIP_SHT_NAME_LEN-1:len;
memset(ppara->sip_para[index].sht_name,0,PSIP_SHT_NAME_LEN);
memcpy(ppara->sip_para[index].sht_name,new_sht,len);
change_flag++;
}
if(change_flag)
{
web_send_save_msg(LCD_TASK_ID,WEB_PSIP,ppara);
vTaskDelay(WAIT_SAVE_PSIP_TICK); //更改PSIP信息,增加适当延时,等待其他任务更新内部数据,此函数是由TCP任务调用
}
else
{
free_mem(ppara);
}
}
static char *cgi_psts_psip0(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,0);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip1(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,1);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip2(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,2);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip3(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,3);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip4(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,4);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip5(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,5);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip6(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,6);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip7(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,7);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip8(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,8);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip9(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,9);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip10(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,10);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip11(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,11);
CGI_RET_URL(WEB_PSIP);
}
static char *cgi_psts_psip12(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
CGI_JUDGE_LOGIN();
CGI_JUDEG_IS_REMOTE(WEB_PSIP);
cgi_psts_psip_basic(iIndex, iNumParams, pcParam, pcValue,12);
CGI_RET_URL(WEB_PSIP);
}
#endif
static int atsc_ajx_status(int iIndex,char *pcInsert, int *pcLen)
{
uint32 len=0;
uint32 i=0;
uint8 ts_buf[30];
uint8 temp_buf[8];
char mh_buf[8];
uint8 gps_buf[30];
S_SYS_TIME time;
GPGSA_T *gps_gsa = gps_get_sa();
//#if TEMPREATURE_DEGREE==0
int32 ltemp = 0;
//#endif
#if 1//_USE_RVL_
http_load_status(&cgi_status);
#endif
if(cgi_status.ts_under)
sprintf((char*)ts_buf,"UnderFlow");
else
{
if(cgi_status.ts_rate&1)
sprintf((char*)ts_buf,"OverFlow");
else
sprintf((char*)ts_buf,"%02ld.%06ld",cgi_status.ts_rate/1000000,cgi_status.ts_rate%1000000);//ts_rate;
}
if(cgi_status.temp==(uint32)-1)
sprintf((char*)temp_buf,"HIGH");
else
{
if(cgi_status.temp&0x10000) //-
{
cgi_status.temp&=0x1ff; //去掉符号位
if(get_temp_unit()==1){
sprintf((char*)temp_buf,"-%02d.%02d",cgi_status.temp/4,cgi_status.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = -ltemp;
ltemp = degree2fah(ltemp);
sprintf((char*)temp_buf,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
else
{
if(get_temp_unit()==1){
sprintf((char*)temp_buf,"%02d.%02d",cgi_status.temp/4,cgi_status.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = degree2fah(ltemp);
sprintf((char*)temp_buf,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
}
if(atsc_para.log_para.mh<10)
sprintf(mh_buf,"0.%ld",atsc_para.log_para.mh);
else
sprintf(mh_buf,"%ld",atsc_para.log_para.mh/10);
if(atsc_para.wh_para.func)
{
cgi_status.amp = 10;
}
len+=i;
i=sprintf(&pcInsert[len],
"%s;%d;%d;%d;%d;%s;%s;%s;%d;%d;%d;%ld;%d;%02d.%01d;%02d.%01d;%02d.%01d;%d;%d;%d;%d;%d;%d;%s",
AJAX_HEADER, cgi_status.input,cgi_status.status,cgi_status.agc,cgi_status.mode,ts_buf,mh_buf,temp_buf,
cgi_status.syserr,cgi_status.txfreq,cgi_status.hz_,cgi_status.hz,cgi_status.fwd,cgi_status.tsnr/2,cgi_status.tsnr%2*5,
cgi_status.l_imd/2,cgi_status.l_imd%2*5,cgi_status.u_imd/2,cgi_status.u_imd%2*5,atsc_para.system_para.ctrl,
cgi_status.amp,cgi_status.tcp_seg,cgi_status.tcp_occupy,cgi_status.a_fssi,cgi_status.b_fssi,
AJAX_FOOTER);
len+=i;
// Gps
#if 1//_USE_RVL_
http_load_gps(&cgi_gps);
#endif
get_sys_time(&time);
if(cgi_gps.freq[0])
sprintf((char*)gps_buf,"-%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
else
sprintf((char*)gps_buf,"+%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
if((cgi_gps.gps_use)&&(atsc_para.system_para.gps))
{//INT
i=sprintf(&pcInsert[len],
"%s;%d;%d;%04d-%02d-%02d;%02d-%02d-%02d;%ld;%0X;%s;%d;%s",
AJAX_HEADER,
cgi_gps.gps_lock,cgi_gps.gps_use,time.year,time.month,time.date,time.hour,time.min,time.sec,gps_gsa->sv,cgi_gps.status,
gps_buf,cgi_gps.gps_1pps,
AJAX_FOOTER);
}
else
{
i=sprintf(&pcInsert[len],
"%s;%d;%d;NA-NA-NA;%02d-%02d-%02d;%ld;%0X;%s;%d;%s",
AJAX_HEADER,cgi_gps.gps_lock,cgi_gps.gps_use,time.hour,time.min,time.sec,gps_gsa->sv,cgi_gps.status,gps_buf,cgi_gps.gps_1pps,
AJAX_FOOTER);
}
len+=i;
#if 1//_USE_RVL_
http_load_tuner_info(&cgi_tuner);
#endif
i=sprintf(&pcInsert[len],
"%s;%d;%d;%d;%d;%s",
AJAX_HEADER,
cgi_tuner.rxfreq,cgi_tuner.rssi,cgi_tuner.rsnr,cgi_tuner.lock_status,
AJAX_FOOTER);
len+=i;
#if 1//_USE_RVL_
http_load_pac(&cgi_amp);
#endif
i = sprintf(&pcInsert[len],
"%s;%d;%d;%d;%d;%d;%d;%d;"
"%d;%d;%d;%d;%d;%d;%d;%s",
AJAX_HEADER,
cgi_amp.vol_9v,cgi_amp.vol_12v,cgi_amp.vol_50v,cgi_amp.pa_fwd,cgi_amp.pa_reflect,cgi_amp.vswr,cgi_amp.temp_pa,
cgi_amp.pa_in,cgi_amp.cur1_50v,cgi_amp.cur2_50v,cgi_amp.cur3_50v,cgi_amp.cur4_50v,
cgi_amp.gv_881,cgi_amp.pac_lev,
AJAX_FOOTER);
len+=i;
*pcLen = len;
web_printf("ajx_len=%d\n",len);
return 0;
}
static int atsc_ajx_status_user(int iIndex,char *pcInsert, int *pcLen)
{
int len=0;
uint32 i=0;
uint8 ts_buf[30];
uint8 temp_buf[8];
char mh_buf[8];
uint8 gps_buf[30];
S_SYS_TIME time;
GPGSA_T *gps_gsa = gps_get_sa();
//#if TEMPREATURE_DEGREE==0
int32 ltemp = 0;
//#endif
#if 1//_USE_RVL_
http_load_status(&cgi_status);
#endif
if(cgi_status.ts_under)
sprintf((char*)ts_buf,"UnderFlow");
else
{
if(cgi_status.ts_rate&1)
sprintf((char*)ts_buf,"OverFlow");
else
sprintf((char*)ts_buf,"%02ld.%06ld",cgi_status.ts_rate/1000000,cgi_status.ts_rate%1000000);//ts_rate;
}
if(cgi_status.temp==(uint32)-1)
sprintf((char*)temp_buf,"HIGH");
else
{
if(cgi_status.temp&0x10000) //-
{
cgi_status.temp&=0x1ff; //去掉符号位
if(get_temp_unit()==1){
sprintf((char*)temp_buf,"-%02d.%02d",cgi_status.temp/4,cgi_status.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = -ltemp;
ltemp = degree2fah(ltemp);
sprintf((char*)temp_buf,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
else
{
if(get_temp_unit()==1){
sprintf((char*)temp_buf,"%02d.%02d",cgi_status.temp/4,cgi_status.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = degree2fah(ltemp);
sprintf((char*)temp_buf,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
}
if(atsc_para.log_para.mh<10)
sprintf(mh_buf,"0.%ld",atsc_para.log_para.mh);
else
sprintf(mh_buf,"%ld",atsc_para.log_para.mh/10);
if(atsc_para.wh_para.func)
{
cgi_status.amp = 10;
}
len+=i;
i=sprintf(&pcInsert[len],
"%s;%d;%d;%d;%d;%s;%s;%s;%d;%d;%02d.%01d;%02d.%01d;%02d.%01d;%d;%s",
AJAX_HEADER, cgi_status.input,cgi_status.status,cgi_status.agc,cgi_status.mode,ts_buf,mh_buf,temp_buf,\
cgi_status.syserr,cgi_status.fwd,cgi_status.tsnr/2,cgi_status.tsnr%2*5,\
cgi_status.l_imd/2,cgi_status.l_imd%2*5,cgi_status.u_imd/2,cgi_status.u_imd%2*5,atsc_para.system_para.ctrl,\
AJAX_FOOTER);
len+=i;
// Gps
#if 1//_USE_RVL_
http_load_gps(&cgi_gps);
#endif
get_sys_time(&time);
if(cgi_gps.freq[0])
sprintf((char*)gps_buf,"-%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
else
sprintf((char*)gps_buf,"+%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
if((cgi_gps.gps_use)&&(atsc_para.system_para.gps))
{//INT
i=sprintf(&pcInsert[len],
"%s;%d;%d;%s",
AJAX_HEADER,
cgi_gps.gps_lock,cgi_gps.gps_use, AJAX_FOOTER);
}
else
{
i=sprintf(&pcInsert[len],
"%s,%d;%d;%s",
AJAX_HEADER,cgi_gps.gps_lock,cgi_gps.gps_use,AJAX_FOOTER);
}
len+=i;
*pcLen = len;
web_printf("ajx_len=%d\n",len);
return 0;
}
static int atsc_ajx_set(int iIndex,char *pcInsert, int *pcLen)
{
int len=0;
uint32 i=0;
uint8 buf1[50];
#if 0 //ADPC_DEBUG
static uint8 auto_flag0;
#endif
S_CGI_SET adpc_set;
#if 1//_USE_RVL_
http_load_sys(&adpc_set);
#endif
get_adpc_err_info(adpc_set.adpc_err,buf1);
#if 0 //ADPC_DEBUG
if(adpc_set.adpc_err==0)
{
auto_flag0++;
}
else
{
auto_flag0=0;
}
if(5==auto_flag0)
{
adpc_set.adpc=5;
auto_flag0 = 0;
http_write_sys(&adpc_set);
}
#endif
len+=i;
i=sprintf(&pcInsert[len],
"%s;%d;%s;%s",
AJAX_HEADER, adpc_set.adpc,buf1,
AJAX_FOOTER);
len+=i;
memset(buf1,0,sizeof(buf1));
i=sprintf(buf1, "%s\n",user_info.name);
strcat(pcInsert,buf1);
len+=i;
*pcLen = len;
//web_printf("ajx_len=%d\n",len);
return 0;
}
//获取最开始的5条日志信息
#define LOG_WEB_PER_FRAME_NUM 5
static uint32 log_f_index = 0; //记录当前日志网页显示的页面序号,当前每页固定5条日志
/*
#define LOG_TYPE_INVALID 0
#define LOG_TYPE_POWER_ON 1
#define LOG_TYPE_POWER_OFF 2
#define LOG_TYPE_SYS_PARA_CHANGE 3
#define LOG_TYPE_TIME_CHANGE 4
#define LOG_TYPE_GPS_UNLOCK 5
#define LOG_TYPE_GPS_LOCK 6
#define LOG_TYPE_TS_ERR 7
#define LOG_TYPE_TS_OK 8
#define LOG_TYPE_OVER_TEMPERATURE 9
#define LOG_TYPE_NORMAL_TEMPERATURE 10
#define LOG_TYPE_OVER_FLOW 11
#define LOG_TYPE_UNDER_FLOW 12
ASI_TS1_USED =0,
ASI_TS2_USED,
ASI_EAS_USED,
ASI_TUNER_USED,
*/
static int atsc_ajx_log_init(char *pcdest,uint32 log_index)
{ /*与log类型定义保持一致*/
static const uint8 log_type[][16] =
{" ",
"POWER_ON",
"POWER_OFF",
"PARA_CHANGE",
"TIME_CHANGE",
"GPS_UNLOCK",
"GPS_LOCK",
"TS_ERR",
"TS_OK",
"OVER_TEMP",
"TEMPE_OK",
"OVER_FLOW",
"UNDER_FLOW"};
static const uint8 asi_type[][16] =
{"ASI_TS1",
"ASI_TS2",
"ASI_EAS",
"ASI_TUNER"};
uint32 ret_len = 0;
uint32 ret_log = 0;
uint32 i = 0;
uint32 j = 0;
S_LOG_STRUCT *plog = alloc_mem(sizeof(S_LOG_STRUCT));
#if 1//_USE_RVL_
uint32 log_total = log_get_total_record_num();
#else
uint32 log_total;
#endif
uint32 valid_num = LOG_WEB_PER_FRAME_NUM;
char buf_temp[64];
if((log_f_index+1)*LOG_WEB_PER_FRAME_NUM<=log_total)
{
valid_num = LOG_WEB_PER_FRAME_NUM;
}
else
{
valid_num = log_total-log_f_index*LOG_WEB_PER_FRAME_NUM;
}
j = sprintf(&pcdest[ret_len],"%d;%d;%d\n",
log_total, log_f_index,valid_num);
ret_len+=j;
if(log_total==0)
{
free_mem(plog);
return ret_len;
}
if(!plog)
{
return ret_len;
}
for(i=0;i<LOG_WEB_PER_FRAME_NUM;i++)
{
memset(plog,0,sizeof(S_LOG_STRUCT));
#if 1//_USE_RVL_
ret_log = log_read_record_by_index(log_index+i,plog);
#endif
if((ret_log)&&(plog->valid==1))
{
#if 1 //年/月/日
if((plog->type==LOG_TYPE_TS_OK)||(plog->type==LOG_TYPE_TS_ERR))
{
j = sprintf(buf_temp,"%d;%s %s;20%02d/%02d/%02d %02d:%02d:%02d;",
log_index+i+1,
asi_type[plog->content[0]],
log_type[plog->type],
plog->year,plog->month,plog->date,plog->hour,plog->min,plog->sec);
}
else
{
j = sprintf(buf_temp,"%d;%s;20%02d/%02d/%02d %02d:%02d:%02d;",
log_index+i+1,
log_type[plog->type],
plog->year,plog->month,plog->date,plog->hour,plog->min,plog->sec);
}
#else //月/日/年
j = sprintf(buf_temp,"%d;%s;%02d/%02d/20%02d %02d:%02d:%02d;",
log_index+i+1,log_type[plog->type],plog->month,plog->date,plog->year,plog->hour,plog->min,plog->sec);
#endif
}
else
{
j = sprintf(buf_temp," ; ; ; ;");
}
strcat(pcdest,buf_temp);
ret_len+=j;
}
free_mem(plog);
return ret_len;
}
static int atsc_ajx_log_default(int iIndex,char *pcInsert, int *pcLen)
{
log_f_index = 0; //在该函数中,log_f_index 复位
*pcLen = atsc_ajx_log_init(pcInsert,log_f_index*LOG_WEB_PER_FRAME_NUM);
return 0;
}
//获取前5条日志信息
static int atsc_ajx_log_pre(int iIndex,char *pcInsert, int *pcLen)
{
if(log_f_index)
{
log_f_index--;
}
*pcLen = atsc_ajx_log_init(pcInsert,log_f_index*LOG_WEB_PER_FRAME_NUM);
return 0;
}
//获取后5条日志信息
static int atsc_ajx_log_nxt(int iIndex,char *pcInsert, int *pcLen)
{
//uint32 log_total_num = log_get_total_record_num();
uint32 log_f_total;
#if 1//_USE_RVL_
uint32 log_total_num = log_get_total_record_num();
#else
uint32 log_total_num;
#endif
log_f_total = log_total_num/LOG_WEB_PER_FRAME_NUM;
if(log_total_num%LOG_WEB_PER_FRAME_NUM)
log_f_total++;
if(log_f_index<log_f_total)
{
log_f_index++;
}
*pcLen = atsc_ajx_log_init(pcInsert,log_f_index*LOG_WEB_PER_FRAME_NUM);
return 0;
}
static u16_t ssi_judge_login(int iIndex,char *pcInsert, int iInsertLen)
{
#if 1//_USE_RVL
//密码未验证,直接跳转
if((login_state.state[login_state.index].pw_state!=LOGIN_NULL) && (iIndex==SSI_INDEX_FORM_LOGIN))
{
login_state.state[login_state.index].pw_state=LOGIN_NULL;
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_LOGIN]);
return(strlen(pcInsert));
}
if((login_state.state[login_state.index].pw_state==LOGIN_NULL) && (iIndex==SSI_ATSC_INDEX_FLAG))
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_LOGIN]);
return(strlen(pcInsert));
} //在登陆出错时,重置url
if((login_state.state[login_state.index].login_err))
{
login_state.state[login_state.index].login_err = FALSE;
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_LOGIN]);
return(strlen(pcInsert));
}
#endif
if((login_state.state[login_state.index].url_reset) )
{
login_state.state[login_state.index].url_reset = FALSE;
if(login_state.state[login_state.index].pw_state==LOGIN_ADMIN)
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_STATUS]);
}
else if(login_state.state[login_state.index].pw_state==LOGIN_NORMAL)
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_STATUS_1]);
}
return(strlen(pcInsert));
}
if((login_state.state[login_state.index].pw_state==LOGIN_ADMIN)
&&((iIndex==SSI_INDEX_FORM_STATUS_)||(iIndex==SSI_INDEX_FORM_SET_)
||(iIndex==SSI_INDEX_FORM_RF_)||(iIndex==SSI_INDEX_FORM_TS_)))
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_LOGIN]);
return(strlen(pcInsert));
}
else if((login_state.state[login_state.index].pw_state==LOGIN_NORMAL)
&&((iIndex==SSI_INDEX_FORM_STATUS) || (iIndex==SSI_INDEX_FORM_SET)
||(iIndex==SSI_INDEX_FORM_RF) || (iIndex==SSI_INDEX_FORM_TS)))
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[WEB_LOGIN]);
return(strlen(pcInsert));
}
if(get_operation_flag())
{
snprintf(pcInsert, iInsertLen,
"%s;",
web_atsc_change_url[get_operation_flag()]);
set_operation_flag(FALSE);
return(strlen(pcInsert));
}
return 0;
}
static u16_t ssi_handle(int iIndex, char *pcInsert, int iInsertLen)
{
uint8 buf1[30];
uint8 buf2[8];
char mh_buf[8];
uint8 buf4[16];
uint8 buf5[16];
#if USE_TS2IP
int i;
char buf_ts[20];
char temp_buf[20];
#endif
#if USE_PSTS
S_PSTS_PARA *psip = &atsc_para.psts_para;
#endif
S_SYS_TIME time;
GPGSA_T *gps_gsa = gps_get_sa();
//#if TEMPREATURE_DEGREE==0
int32 ltemp = 0;
//#endif
uint32 ret_len;
//title为特殊语句,不在javascript语句区,不能返回指令语句
if(SSI_INDEX_FORM_TITLE!=iIndex)
{
ret_len =ssi_judge_login(iIndex,pcInsert,iInsertLen);
if(ret_len)
{
return ret_len;
}
}
switch(iIndex)
{
case SSI_INDEX_FORM_STATUS:
case SSI_INDEX_FORM_STATUS_:
#if 1//_USE_RVL_
http_load_status(&cgi_status);
#endif
get_sys_time(&time);
if(cgi_status.ts_under)
sprintf((char*)buf1,"UnderFlow");
else
{
if(cgi_status.ts_rate&1)
sprintf((char*)buf1,"OverFlow");
else
sprintf((char*)buf1,"%02ld.%06ld",cgi_status.ts_rate/1000000,cgi_status.ts_rate%1000000);//ts_rate;
}
if(cgi_status.temp==(uint32)-1)
sprintf((char*)buf2,"HIGH");
else
{
if(cgi_status.temp&0x10000) //-
{
cgi_status.temp&=0x1ff; //去掉符号位
if(get_temp_unit()==1){
sprintf((char*)buf2,"-%02d.%02d",cgi1_para.temp/4,cgi1_para.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = -ltemp;
ltemp = degree2fah(ltemp);
sprintf((char*)buf2,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
else
{
if(get_temp_unit()==1){
sprintf((char*)buf2,"%02d.%02d",cgi_status.temp/4,cgi_status.temp%4*25);
}
else{
ltemp =cgi_status.temp/4*100+cgi_status.temp%4*25;
ltemp = degree2fah(ltemp);
sprintf((char*)buf2,"%02ld.%02d",ltemp/100,math_abs(ltemp)%100);
}
}
}
if(atsc_para.log_para.mh<10)
sprintf(mh_buf,"0.%ld",atsc_para.log_para.mh);
else
sprintf(mh_buf,"%ld",atsc_para.log_para.mh/10);
if(1)//txatsc_para.ad3_para.func==0
{
if(atsc_para.wh_para.func)
cgi_status.amp = 10;
if(cgi_status.ntp_en)
{
snprintf(pcInsert, iInsertLen,
"%ssrate=\"%s\";smh=\"%s\";stemp=\"%s\";stsnr=\"%02d.%01d\";"
"slimd=\"%02d.%01d\";suimd=\"%02d.%01d\";lf1ctrl=%d;lsyserr=%d;"
"lfwde=%d;lamp=%d;linput=%d;lstatus=%d;lagc0=%d;lmodemm=%d;lcha=%d;lhz0=%d;lhz1=%d;"
"ntp_en=%d;ntp_addr1=%d;ntp_addr2=%d;ntp_addr3=%d;ntp_addr4=%d;ntp_date=\"%04d-%02d-%02d\";ntp_time=\"%02d:%02d:%02d\";"
"lseg=%d;loccupy=%d;la_fssi=%d;lb_fssi=%d;"
"%s",
JAVASCRIPT_HEADER,
buf1,mh_buf,buf2,cgi_status.tsnr/2,cgi_status.tsnr%2*5,cgi_status.l_imd/2,cgi_status.l_imd%2*5,
cgi_status.u_imd/2,cgi_status.u_imd%2*5,atsc_para.system_para.ctrl,cgi_status.syserr,cgi_status.fwd,
cgi_status.amp,
cgi_status.input,
cgi_status.status,
cgi_status.agc,
cgi_status.mode,
cgi_status.txfreq,
cgi_status.hz_,
cgi_status.hz,
cgi_status.ntp_en,
cgi_status.ntp_sip[0],
cgi_status.ntp_sip[1],
cgi_status.ntp_sip[2],
cgi_status.ntp_sip[3],
time.year,
time.month,
time.date,
time.hour,
time.min,
time.sec,
cgi_status.tcp_seg,cgi_status.tcp_occupy,cgi_status.a_fssi,cgi_status.b_fssi,
JAVASCRIPT_FOOTER);
}
else
{
snprintf(pcInsert, iInsertLen,
"%ssrate=\"%s\";smh=\"%s\";stemp=\"%s\";stsnr=\"%02d.%01d\";"
"slimd=\"%02d.%01d\";suimd=\"%02d.%01d\";lf1ctrl=%d;lsyserr=%d;"
"lfwde=%d;lamp=%d;linput=%d;lstatus=%d;lagc0=%d;lmodemm=%d;lcha=%d;lhz0=%d;lhz1=%d;"
"ntp_en=%d;ntp_addr1=%d;ntp_addr2=%d;ntp_addr3=%d;ntp_addr4=%d;"
"ntp_date=\"NA-NA-NA\";ntp_time=\"NA:NA:NA\";"
"lseg=%d;loccupy=%d;la_fssi=%d;lb_fssi=%d;"
"%s",
JAVASCRIPT_HEADER,
buf1,mh_buf,buf2,cgi_status.tsnr/2,cgi_status.tsnr%2*5,cgi_status.l_imd/2,cgi_status.l_imd%2*5,
cgi_status.u_imd/2,cgi_status.u_imd%2*5,atsc_para.system_para.ctrl,cgi_status.syserr,cgi_status.fwd,
cgi_status.amp,
cgi_status.input,
cgi_status.status,
cgi_status.agc,
cgi_status.mode,
cgi_status.txfreq,
cgi_status.hz_,
cgi_status.hz,
cgi_status.ntp_en,
cgi_status.ntp_sip[0],
cgi_status.ntp_sip[1],
cgi_status.ntp_sip[2],
cgi_status.ntp_sip[3],
cgi_status.tcp_seg,cgi_status.tcp_occupy,cgi_status.a_fssi,cgi_status.b_fssi,
JAVASCRIPT_FOOTER);
}
}
else
{
snprintf(pcInsert, iInsertLen,
"%snsrate=\"%s\";smh=\"%s\";stemp=\"%s\";stsnr=\"%02d.%01d\";linput=%d;lstatus=%d;lagc0=%d;"
"slimd=\"%02d.%01d\";suimd=\"%02d.%01d\";lf1ctrl=%d;lsyserr=%d;lfwde=%d;"
"lseg=%d;loccupy=%d;"
"%s",
JAVASCRIPT_HEADER,
buf1,mh_buf,buf2,cgi_status.tsnr/2,cgi_status.tsnr%2*5,cgi_status.l_imd/2,cgi_status.l_imd%2*5,
cgi_status.u_imd/2,cgi_status.u_imd%2*5,atsc_para.system_para.ctrl,cgi_status.syserr,cgi_status.fwd,cgi_status.input,cgi_status.status,cgi_status.agc,
cgi_status.tcp_seg,cgi_status.tcp_occupy,
JAVASCRIPT_FOOTER);
}
break;
case SSI_INDEX_FORM_SET:
case SSI_INDEX_FORM_SET_:
#if 1//_USE_RVL_
http_load_sys(&cgi_set);
#endif
get_adpc_err_info(cgi_set.adpc_err,buf1);
sprintf((char *)buf5,"%013lld", atsc_para.sn_para.sn);
snprintf(pcInsert, iInsertLen,
"%slasi=%d;ladp=%d;sadp_sta=\"%s\";lmodemh=%d;lsgps=%d;"
"lclk=%d;lmon=%d;lctl=%d;ssntp_en=%d;ssntp_sip1=%d;ssntp_sip2=%d;ssntp_sip3=%d;ssntp_sip4=%d;"
"lnetip1=%d;lnetip2=%d;lnetip3=%d;lnetip4=%d;"
"lnetmask1=%d;lnetmask2=%d;lnetmask3=%d;lnetmask4=%d;"
"lgateway1=%d;lgateway2=%d;lgateway3=%d;lgateway4=%d;"
"ldns1=%d;ldns2=%d;ldns3=%d;ldns4=%d;"
"stitle=\"%s\";sfwd_cal=%d;lsn=\"%s\";lpdt=%d;lpa_crf=%d;%s",
JAVASCRIPT_HEADER,
cgi_set.input,cgi_set.adpc,buf1,cgi_set.mode,cgi_set.gps,cgi_set.net,cgi_set.mon,
cgi_set.ctrl,cgi_set.sntp_en,cgi_set.sntp_sip[0],cgi_set.sntp_sip[1],cgi_set.sntp_sip[2],cgi_set.sntp_sip[3],
cgi_set.netcfg.ip[0],cgi_set.netcfg.ip[1],cgi_set.netcfg.ip[2],cgi_set.netcfg.ip[3],
cgi_set.netcfg.mask[0],cgi_set.netcfg.mask[1],cgi_set.netcfg.mask[2],cgi_set.netcfg.mask[3],
cgi_set.netcfg.gateway[0],cgi_set.netcfg.gateway[1],cgi_set.netcfg.gateway[2],cgi_set.netcfg.gateway[3],
cgi_set.netcfg.dns[0],cgi_set.netcfg.dns[1],cgi_set.netcfg.dns[2],cgi_set.netcfg.dns[3],
cgi_set.web_title,cgi_set.fwd_cal,buf5,cgi_set.pdt,cgi_set.pa_link_ctrl_rf,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_RF:
case SSI_INDEX_FORM_RF_:
#if 1//_USE_RVL_
http_load_rf(&cgi_rf);
#endif
http_load_freq(&cgi_freq_para);
if(atsc_para.wh_para.func)
cgi_rf.tx =(uint8)-1;
snprintf(pcInsert, iInsertLen,
"%slpw0=%d;lpw1=%d;lpw2=%d;lcwy=%d;lrfy=%d;lagc=%d;lrc=%d;lagc0=%d;ltx=%d;lfreq=%d;%s",
JAVASCRIPT_HEADER,
cgi_rf.power[0],cgi_rf.power[1],cgi_rf.power[2],
cgi_rf.cw,cgi_rf.rf,cgi_rf.agc,cgi_rf.rc_cmd,cgi_status.agc,cgi_rf.tx,cgi_freq_para.freq,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_NET:
#if 1//_USE_RVL_
http_load_net(&cgi_net);
#endif
snprintf(pcInsert, iInsertLen,
"%slDLY=%d;stxi=\"%03X\";snetid=\"%03X\";ltrs=%d;%s",
JAVASCRIPT_HEADER,
cgi_net.delay,cgi_net.txid&0X0FFF,cgi_net.netid&0XFFF,cgi_net.bratio,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_MODE:
#if 1//_USE_RVL_
http_load_mh(&cgi_mode);
#endif
snprintf(pcInsert, iInsertLen,
"%slsync=%d;ltcp_c=%d;lzp1f=%d;sPid=\"%04X\";%s",
JAVASCRIPT_HEADER,
cgi_mode.sync,cgi_mode.tcp_c,cgi_mode.zp1f,cgi_mode.pid_det&0X1FFF,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_VER:
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(buf_ts,"V%d.%d",i/10,i%10);
i = (ts_net_para.ts2ip_version&0xff0000)>>16;
sprintf(temp_buf,"-%d",i);
strcat(buf_ts,temp_buf);
i = (ts_net_para.ts2ip_version&0xff00)>>8;
sprintf(temp_buf,"%d",i);
strcat(buf_ts,temp_buf);
i = (ts_net_para.ts2ip_version&0xff);
sprintf(temp_buf,"(V%d)",i);
strcat(buf_ts,temp_buf);
}
else
{
sprintf(buf_ts,"INVALID");
}
snprintf(pcInsert, iInsertLen,
"%ssatsc=\"%s\";sfpga=\"%s\";smcu=\"%s\";splc=\"%s\";sts2ip=\"%s\";%s",
JAVASCRIPT_HEADER,
atsc_para.rg_para.attr,atsc_para.rg_para.fpga,atsc_para.rg_para.mcu,atsc_para.rg_para.dryloop,(char *)buf_ts,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_GPS:
#if 1//_USE_RVL_
http_load_gps(&cgi_gps);
#endif
get_sys_time(&time);
if(cgi_gps.freq[0])
sprintf((char*)buf1,"-%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
else
sprintf((char*)buf1,"+%dE-%02d",(cgi_gps.freq[1]&0xf0)>>4,cgi_gps.freq[1]&0x0f);
if((cgi_gps.gps_use)&&(atsc_para.system_para.gps))
{//INT 模式
snprintf(pcInsert, iInsertLen,
"%slgps=%d;lgpsuse=%d;sdate=\"%04d-%02d-%02d\";stime=\"%02d-%02d-%02d\";l1pps=%d;lsv=%d;sgpsstatus=\"%0X\";sgpsfreq=\"%s\";%s",
JAVASCRIPT_HEADER,
cgi_gps.gps_lock,cgi_gps.gps_use,time.year,time.month,time.date,time.hour,time.min,time.sec,cgi_gps.gps_1pps,gps_gsa->sv,cgi_gps.status,
buf1,
JAVASCRIPT_FOOTER);
}
else
{
snprintf(pcInsert, iInsertLen,
"%slgps=%d;lgpsuse=%d;sdate=\"NA-NA-NA\";stime=\"%02d-%02d-%02d\";l1pps=%d;lsv=%d;sgpsstatus=\"%0X\";sgpsfreq=\"%s\";%s",
JAVASCRIPT_HEADER,
cgi_gps.gps_lock,cgi_gps.gps_use,time.hour,time.min,time.sec,cgi_gps.gps_1pps,gps_gsa->sv ,cgi_gps.status,buf1,
JAVASCRIPT_FOOTER);
}
break;
// case SSI_INDEX_FORM_SNTP:
// http_load_gps(&cgi_gps);
// break;
#if USE_HTTP_LOGIN
case SSI_INDEX_FORM_LOGIN:
snprintf(pcInsert, iInsertLen, "");
break;
#endif
#if ERR_TO_LCM
case SSI_INDEX_FORM_LATCH:
#if 1//_USE_RVL_
http_load_latch(&cgi_latch);
#endif
snprintf(pcInsert, iInsertLen,
"%sreset=%d;u1=%d;u2=%d;rf_=%d;gps_=%d;ts_=%d;sys_=%d;m_1pps_=%d;sfn_=%d;%s",
JAVASCRIPT_HEADER,
cgi_latch.reset,cgi_latch.u1,cgi_latch.u2,cgi_latch.rf,cgi_latch.gps,cgi_latch.ts,cgi_latch.sys,cgi_latch.m_1pps,cgi_latch.sfn,
JAVASCRIPT_FOOTER);
break;
#endif
#if ATSC_USA_AMP
case SSI_INDEX_FORM_AMP:
#if 1//_USE_RVL_
http_load_pac(&cgi_amp);
#endif
snprintf(pcInsert, iInsertLen,
"%slv9v=%d;lv12v=%d;lv50v=%d;lfwd=%d;lref=%d;lvswr=%d;lpatemp=%d;"
"lpain=%d;lc50v1=%d;lc50v2=%d;lc50v3=%d;lc50v4=%d;lgv=%d;lpalvl=%d;%s",
JAVASCRIPT_HEADER,
cgi_amp.vol_9v, cgi_amp.vol_12v,cgi_amp.vol_50v,cgi_amp.pa_fwd,cgi_amp.pa_reflect,cgi_amp.vswr,cgi_amp.temp_pa,
cgi_amp.pa_in,cgi_amp.cur1_50v,cgi_amp.cur2_50v,cgi_amp.cur3_50v,cgi_amp.cur4_50v,
cgi_amp.gv_881,cgi_amp.pac_lev,
JAVASCRIPT_FOOTER);
break;
#endif
#if USE_TS2IP
case SSI_INDEX_FORM_TS_:
case SSI_INDEX_FORM_TS: // IP2TS 为了省空间,IP地址等参数糅合到一块,包类型(aa),包长度(bb),接收类型(cc)放到一个32位变量里(0xaabbcc)
snprintf(pcInsert, iInsertLen,
"%slip1=%d;lip2=0x%x;lgate1=%d;lgate2=0x%x;lmask1=%d;lmask2=0x%x;"
"lma1=%d;lma2=0x%x;lport=%d;lpk_para=0x%x;f_swh=%d;f_dly=%d;f_col=%d;f_row=%d;"
"lbakip1=%d;lbakip2=0x%x;bakpt=%d;%s",
JAVASCRIPT_HEADER,
ts_net_para.ip[0], (ts_net_para.ip[1]<<16)|(ts_net_para.ip[2]<<8)|ts_net_para.ip[3],
ts_net_para.gateway[0],(ts_net_para.gateway[1]<<16)|(ts_net_para.gateway[2]<<8)|ts_net_para.gateway[3],
ts_net_para.mask[0],(ts_net_para.mask[1]<<16)|(ts_net_para.mask[2]<<8)|ts_net_para.mask[3],
ts_net_para.multi_address[0], (ts_net_para.multi_address[1]<<16)|(ts_net_para.multi_address[2]<<8)|ts_net_para.multi_address[3],
ts_net_para.port, ((ts_net_para.udp_rtp&0xff)<<16)|((ts_net_para.packet_len&0xff)<<8)|(ts_net_para.receive_type&0xff),
ts_net_para.fec,ts_net_para.delay,ts_net_para.col,ts_net_para.row,
ts_net_para.ip_bak[0],(ts_net_para.ip_bak[1]<<16)|(ts_net_para.ip_bak[2]<<8)|ts_net_para.ip_bak[3],ts_net_para.port_bak,
JAVASCRIPT_FOOTER);
break;
#endif
case SSI_INDEX_FORM_SN:
sprintf((char *)buf4,"%06X%06X",0x9440a2,atsc_para.wk_para.mac);
sprintf((char *)buf5,"%013lld", atsc_para.sn_para.sn);
snprintf(pcInsert, iInsertLen,
"%smac=\"%s\";sn=\"%s\";%s",
JAVASCRIPT_HEADER,
buf4,buf5,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_TUNER:
#if 1//_USE_RVL_
http_load_tuner_info(&cgi_tuner);
#endif
snprintf(pcInsert, iInsertLen,
"%slrxfreq=%d;lrssi=%d;lrsnr=%d;ltlock=%d;%s",
JAVASCRIPT_HEADER,
cgi_tuner.rxfreq,cgi_tuner.rssi,cgi_tuner.rsnr,cgi_tuner.lock_status,
JAVASCRIPT_FOOTER);
break;
#if USE_PSTS
case SSI_INDEX_FORM_PSTS1:
snprintf(pcInsert, iInsertLen,
"%sindex0=%d;sht_name0=\"%s\";maj_num0=%d;min_num0=%d;index1=%d;sht_name1=\"%s\";maj_num1=%d;"
"min_num1=%d;index2=%d;sht_name2=\"%s\";maj_num2=%d;min_num2=%d;%s",
JAVASCRIPT_HEADER,
psip->sip_para[0].channel_num,psip->sip_para[0].sht_name,psip->sip_para[0].maj_num,psip->sip_para[0].min_num,
psip->sip_para[1].channel_num,psip->sip_para[1].sht_name,psip->sip_para[1].maj_num,psip->sip_para[1].min_num,
psip->sip_para[2].channel_num,psip->sip_para[2].sht_name,psip->sip_para[2].maj_num,psip->sip_para[2].min_num,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_PSTS2:
snprintf(pcInsert, iInsertLen,
"%sindex3=%d;sht_name3=\"%s\";maj_num3=%d;min_num3=%d;index4=%d;sht_name4=\"%s\";"
"maj_num4=%d;min_num4=%d;index5=%d;sht_name5=\"%s\";maj_num5=%d;min_num5=%d;%s",
JAVASCRIPT_HEADER,
psip->sip_para[3].channel_num,psip->sip_para[3].sht_name,psip->sip_para[3].maj_num,psip->sip_para[3].min_num,
psip->sip_para[4].channel_num,psip->sip_para[4].sht_name,psip->sip_para[4].maj_num,psip->sip_para[4].min_num,
psip->sip_para[5].channel_num,psip->sip_para[5].sht_name,psip->sip_para[5].maj_num,psip->sip_para[5].min_num,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_PSTS3:
snprintf(pcInsert, iInsertLen,
"%sindex6=%d;sht_name6=\"%s\";maj_num6=%d;min_num6=%d;index7=%d;sht_name7=\"%s\";"
"maj_num7=%d;min_num7=%d;index8=%d;sht_name8=\"%s\";maj_num8=%d;min_num8=%d;%s",
JAVASCRIPT_HEADER,
psip->sip_para[6].channel_num,psip->sip_para[6].sht_name,psip->sip_para[6].maj_num,psip->sip_para[6].min_num,
psip->sip_para[7].channel_num,psip->sip_para[7].sht_name,psip->sip_para[7].maj_num,psip->sip_para[7].min_num,
psip->sip_para[8].channel_num,psip->sip_para[8].sht_name,psip->sip_para[8].maj_num,psip->sip_para[8].min_num,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_PSTS4:
snprintf(pcInsert, iInsertLen,
"%sindex9=%d;sht_name9=\"%s\";maj_num9=%d;min_num9=%d;index10=%d;sht_name10=\"%s\";"
"maj_num10=%d;min_num10=%d;index11=%d;sht_name11=\"%s\";maj_num11=%d;min_num11=%d;%s",
JAVASCRIPT_HEADER,
psip->sip_para[9].channel_num,psip->sip_para[9].sht_name,psip->sip_para[9].maj_num,psip->sip_para[9].min_num,
psip->sip_para[10].channel_num,psip->sip_para[10].sht_name,psip->sip_para[10].maj_num,psip->sip_para[10].min_num,
psip->sip_para[11].channel_num,psip->sip_para[11].sht_name,psip->sip_para[11].maj_num,psip->sip_para[11].min_num,
JAVASCRIPT_FOOTER);
break;
case SSI_INDEX_FORM_PSTS5:
snprintf(pcInsert, iInsertLen,
"%stsid=%d;ts_edit=%d;index_max=%d;index12=%d;sht_name12=\"%s\";maj_num12=%d;min_num12=%d;%s",
JAVASCRIPT_HEADER,
psip->tsid,psip->ts_ctrl,psip->channel_max,psip->sip_para[12].channel_num,
psip->sip_para[12].sht_name,psip->sip_para[12].maj_num,psip->sip_para[12].min_num,
JAVASCRIPT_FOOTER);
break;
#endif
case SSI_INDEX_FORM_TITLE:
#if 1//_USE_RVL_
http_load_sys(&cgi_set);
#endif
snprintf(pcInsert, iInsertLen,
"%s",
cgi_set.web_title);
break;
default:
snprintf(pcInsert, iInsertLen, " ");
break;
}
return(strlen(pcInsert));
}
#if USE_HTTP_LOGIN
/*
为了实现多用户访问,记录访问端IP地址
*/
void check_ip_addr(const uint32 addr)
{
uint32 i=0;
login_state.current_ip = addr;
for(i=0;i<MAX_USER_NUM;i++)
{
if(addr==login_state.state[i].ip_addr)
{
uint32 tick = get_sys_tick();
if(login_state.state[i].pw_state)
{ //长时间未操作,验证状态重置
if(tick-login_state.state[i].latest_tick>MAX_NO_OP_TIME)
{
login_state.state[i].pw_state = LOGIN_NULL;
login_state.state[i].login_err = 0;
login_state.state[i].login_tick = 0;
}
}
login_state.state[i].latest_tick = tick;
login_state.index = i;
return;
}
}
if(i==MAX_USER_NUM)
{
for(i=0;i<MAX_USER_NUM;i++)
{
if(0==login_state.state[i].ip_addr)
{
login_state.index = i;
login_state.state[i].ip_addr = addr;
login_state.state[i].pw_state= LOGIN_NULL; //重置密码验证状况
login_state.state[i].latest_tick = get_sys_tick();
login_state.state[i].login_err = FALSE;
return;
}
}
//若记录已满,遍历记录找最久未访问的替换!
if(i==MAX_USER_NUM)
{
uint32 tick_bak = login_state.state[0].latest_tick;
uint32 old_index = 0;
//tick值越小,访问历史越古老,遍历寻找最小值
for(i=1;i<MAX_USER_NUM;i++)
{
if(tick_bak>login_state.state[i].latest_tick)
{
tick_bak = login_state.state[i].latest_tick;
old_index = i;
}
}
login_state.index = old_index;
login_state.state[old_index].ip_addr = addr;
login_state.state[old_index].pw_state= LOGIN_NULL; //重置密码验证状况
login_state.state[old_index].latest_tick = get_sys_tick();
login_state.state[old_index].login_err = FALSE;
}
}
}
#endif
static const tCGI g_psConfigCGIURIs[] =
{
{"/ioset.cgi", cgi_handle_set_sys},
{"/ionet.cgi", cgi_handle_set_net},
{"/iomode.cgi", cgi_handle_set_mode},
{"/iogps.cgi", cgi_handle_set_gps},
{"/iologin.cgi", cgi_handle_login},
#if ERR_TO_LCM
{"/iolatch_rst.cgi", cgi_handle_set_latch},
#endif
{"/ioctlrf.cgi", cgi_handle_set_rf},
{"/ioctlpower.cgi", cgi_handle_set_power},
{"/ioctlagc.cgi", cgi_handle_set_agc},
{"/ioctlrc.cgi", cgi_handle_set_rccmd},
{"/ioctltx.cgi", cgi_handle_set_tx},
#if USE_TS2IP
{"/iots.cgi", cgi_handle_set_ts},
#endif
#if USE_PSTS
{"/iotsid.cgi", cgi_psts_edit},
{"/iopsip0.cgi", cgi_psts_psip0},
{"/iopsip1.cgi", cgi_psts_psip1},
{"/iopsip2.cgi", cgi_psts_psip2},
{"/iopsip3.cgi", cgi_psts_psip3},
{"/iopsip4.cgi", cgi_psts_psip4},
{"/iopsip5.cgi", cgi_psts_psip5},
{"/iopsip6.cgi", cgi_psts_psip6},
{"/iopsip7.cgi", cgi_psts_psip7},
{"/iopsip8.cgi", cgi_psts_psip8},
{"/iopsip9.cgi", cgi_psts_psip9},
{"/iopsip10.cgi", cgi_psts_psip10},
{"/iopsip11.cgi", cgi_psts_psip11},
{"/iopsip12.cgi", cgi_psts_psip12},
#endif
{"/ioarmup.cgi", cgi_handle_arm_up },
{"/ioarmrst.cgi", cgi_handle_arm_rst }, //重新启动
{"/iosetnetcfg.cgi", cgi_handle_set_netcfg }, // cfg network
{ "/ioctlFreq.cgi", cgi_handle_set_freq },
};
void httpd_ssi_init(void)
{
http_set_ssi_handler(ssi_handle, g_pcConfigSSITags, SSI_INDEX_FORM_END);
}
void httpd_cgi_init(void)
{
http_set_cgi_handlers(g_psConfigCGIURIs, NUM_CONFIG_CGI_URIS);
}
#if ALARM_USE_UDP
void udp_alarm_init(void)
{
alarm_sockfd = lwip_socket(AF_INET, SOCK_DGRAM, 0);
memset(&alarm_clientaddr, 0, sizeof(alarm_clientaddr));
alarm_clientaddr.sin_family = AF_INET;
alarm_clientaddr.sin_addr.s_addr=*(uint32 *)atsc_para.wk_para.alarm_ip;
alarm_clientaddr.sin_port = htons(TCP_COMM_PORT);
//lwip_sendto(alarm_sockfd, (char *)"hello", 5, 0,(struct sockaddr *)&alarm_clientaddr, sizeof(alarm_clientaddr));
}
#endif
/*****************************************************************************
函 数 名 : web_task
功能描述 : 负责更新网页参数,同时与以太网通讯相关的功能也均在此任务中处理,如网络通讯,FPGA远程升级等
输入参数 : void * pvParameters
输出参数 : 无
返 回 值 : void
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2012年12月26日
作 者 : 郭金涛
修改内容 : 新生成函数
*****************************************************************************/
void web_task(void * pvParameters)
{
MSG *pmsg = NULL;
web_printf("%s init start...\n",__FUNCTION__);
httpd_init();
#if ALARM_USE_UDP
udp_alarm_init();
#endif
config_time_msg(MSG_SEC);
web_printf("%s init over.\n",__FUNCTION__);
while((pmsg = get_msg(OS_WAIT_FOREVER))!=NULL)
{
switch(pmsg->type)
{
case MSG_SEC:
task_is_ok(); //任务正常工作
#if 0//ald proc NEED_TO_EN
#if USE_TS_CHECK
#if 1//_USE_RVL_
check_ts_err_status();
check_ts_err_log();
#endif
#endif
#if USE_GPS_CHECK
#if 1//_USE_RVL_
check_fpga_gps_lock_status();
#endif
#endif
#if USE_TEMPERATURE_CHECK
#if 1//_USE_RVL_
check_temperature_status();
#endif
#endif
#if USE_OVERFLOW_CHECK
#if 1//_USE_RVL_
check_overflow_status();
#endif
#endif
#endif
break;
case MSG_WEB_SAVE_PARA:
#if 1//_USE_RVL_
http_save_change_para(pmsg);
#endif
break;
default:
break;
}
if(MSG_NEED_TO_FREE(pmsg))
free_msg(pmsg);
}
}
/***********************************************END*********************************/
#endif