/* @NOT_ACT_USED */ /****************************************************************************** 版权所有 (C), 2001-2011, 上海全波通信技术有限公司 ****************************************************************************** 文 件 名 : web_server.c 版 本 号 : 初稿 作 者 : 郭金涛 生成日期 : 2013年8月7日 最近修改 : 功能描述 : 网页部分处理主文件,负责响应网页的CGI,另外有网页任务负责更新数 据信息 函数列表 : 修改历史 : 1.日 期 : 2013年8月7日 作 者 : 郭金涛 修改内容 : 创建文件 ******************************************************************************/ #include #include #include #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;iuser_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 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;ivalid==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>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;iMAX_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;ilogin_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