BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) { int i; #ifdef SBBS long line=0L; FILE *instream; char str[256],fname[13]; #endif if(cfg->size!=sizeof(scfg_t)) { sprintf(error,"cfg->size (%"PRIu32") != sizeof(scfg_t) (%d)" ,cfg->size,sizeof(scfg_t)); return(FALSE); } free_cfg(cfg); /* free allocated config parameters */ cfg->prepped=FALSE; /* reset prepped flag */ if(cfg->node_num<1) cfg->node_num=1; backslash(cfg->ctrl_dir); if(read_main_cfg(cfg, error)==FALSE) return(FALSE); if(prep) for(i=0;i<cfg->sys_nodes;i++) prep_dir(cfg->ctrl_dir, cfg->node_path[i], sizeof(cfg->node_path[i])); SAFECOPY(cfg->node_dir,cfg->node_path[cfg->node_num-1]); prep_dir(cfg->ctrl_dir, cfg->node_dir, sizeof(cfg->node_dir)); if(read_node_cfg(cfg, error)==FALSE) return(FALSE); if(read_msgs_cfg(cfg, error)==FALSE) return(FALSE); if(read_file_cfg(cfg, error)==FALSE) return(FALSE); if(read_xtrn_cfg(cfg, error)==FALSE) return(FALSE); if(read_chat_cfg(cfg, error)==FALSE) return(FALSE); if(read_attr_cfg(cfg, error)==FALSE) return(FALSE); #ifdef SBBS if(text!=NULL) { /* Free existing text if allocated */ free_text(text); strcpy(fname,"text.dat"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d opening %s",errno,str); return(FALSE); } for(i=0;i<TOTAL_TEXT;i++) if((text[i]=readtext(&line,instream,i))==NULL) { i--; break; } fclose(instream); if(i<TOTAL_TEXT) { sprintf(error,"line %d in %s: Less than TOTAL_TEXT (%u) strings defined in %s." ,i,fname ,TOTAL_TEXT,fname); return(FALSE); } } #endif /* Override com-port settings */ cfg->com_base=0xf; /* All nodes use FOSSIL */ cfg->com_port=1; /* All nodes use "COM1" */ if(prep) prep_cfg(cfg); /* Auto-toggle daylight savings time in US time-zones */ sys_timezone(cfg); return(TRUE); }
/***************************************************************************** ** Function name: U16 tcp_task (void) ** ** Descriptions: envia dados para o servidor TCP *****************************************************************************/ void tcp_task(void) { static U32 tcp_timer = 0u; U8 buf_udp[100],i; /****************** instantâneo ********************************/ #if USE_TCP_SERVER /*Comunicação TCP SERVER será usada?*/ U8 ip[4]; #if USE_PCK_SERV static U32 cnt_tcp_serv = 0u; if(tcp_state.bit.dataToSend) { tcp_state.bit.dataToSend = __FALSE; cnt_tcp_serv = 0; //if(tcp_buf[0] == 0) //sprintf((char*)tcp_buf,"%02X.%02X.%02X.%02X.%02X.%02X\r\n\0",own_hw_adr[0],own_hw_adr[1],own_hw_adr[2],own_hw_adr[3],own_hw_adr[4],own_hw_adr[5]); //tcpSend((char*)tcp_buf, strlen((const char*)tcp_buf), tcp_server_soc, CMD_SEND_TO_SERVER); //memset(tcp_buf,0,sizeof(tcp_buf)); } #endif #endif /****************** a cada 100ms *******************************/ if(!tick) return; ++tcp_timer; dhcp_check(); /****************** a cada 1s **********************************/ if((tcp_timer%TASK_1S)) return; #if USE_TCP_CLIENT if(!(tcp_timer%TASK_5S)) { /*Pacote UDP de identificação*/ sprintf((char*)buf_udp,"%s %u.%u.%u.%u %02X.%02X.%02X.%02X.%02X.%02X %s %s %u.%u.%u.%u %u.%u.%u.%u\r\n\0",lhost_name,MY_IP[0],MY_IP[1],MY_IP[2],MY_IP[3], own_hw_adr[0],own_hw_adr[1],own_hw_adr[2],own_hw_adr[3],own_hw_adr[4],own_hw_adr[5], cfg.tcp.port_serv_rem, cfg.tcp.ip_serv_rem, MY_MASK[0], MY_MASK[1], MY_MASK[2], MY_MASK[3], MY_GATEWAY[0], MY_GATEWAY[1], MY_GATEWAY[2], MY_GATEWAY[3]); if(!ftp_state.bit.UpdateTcp) udpSendBroadcast(buf_udp); //udpSendUnicast(buf_udp,cfg.tcp.ip_app); } if(!(tcp_timer%TASK_30S)) /*A cada 30s*/ { /*Mantém o link ativo*/ //if(tcp_get_state (tcp_client_soc[0]) == TCP_STATE_CONNECT) //{ sprintf(buf_tx,"LOK OK\r\n\0"); for(i=0;i<MAX_NUM_SOC;i++) tcpSend (buf_tx, strlen(buf_tx), tcp_client_soc[i], CMD_SEND_TO_CLIENT); //tcpSend (buf_tx, strlen(buf_tx), tcp_client_soc[0], CMD_SEND_TO_CLIENT); //} } #endif #if USE_TCP_SERVER && USE_PCK_SERV /*Comunicação TCP SERVER será usada?*/ if(!(++cnt_tcp_serv % atoi(cfg.tcp.interval_packet_serv))) tcp_state.bit.dataToSend = __TRUE; #endif #if USE_TCP_SERVER /*Comunicação TCP SERVER será usada?*/ /*Analisa estado de comunicação com o servidor externo*/ if(tcp_get_state (tcp_server_soc) != TCP_STATE_CONNECT) { tcp_state.bit.serverConnected = __FALSE; inet_aton((U8*)cfg.tcp.ip_serv_rem,ip); tcp_connect(tcp_server_soc,ip,atoi(cfg.tcp.port_serv_rem),atoi(cfg.tcp.port_serv_loc)); }else tcp_state.bit.serverConnected = __TRUE; #endif /*Houve alteração das cenas via FTP?*/ if(ftp_state.bit.UpdateScene) { printf ("[Scene config via FTP]\r\r"); fflush(stdout); ftp_state.bit.UpdateScene = __FALSE; init_scene(0xFF); } if(ftp_state.bit.UpdateFileCfg) { printf ("[CFG.CFG configurado via FTP]\r\r"); fflush(stdout); ftp_state.bit.UpdateFileCfg = __FALSE; read_file_cfg(); } /*Houve alteração das configurações TCP via FTP?*/ if(ftp_state.bit.UpdateTcp) { printf ("[TCP Config via FTP..Reiniciando]\r\r"); fflush(stdout); #if USE_TCP_CLIENT for(i=0;i<MAX_NUM_SOC;i++) tcp_close (tcp_client_soc[i]); #endif #if USE_TCP_SERVER tcp_close (tcp_server_soc); #endif LPC_WDT->WDTC = 0x003FFFF; /*0.5s*/ wdt_feed(); while(1); } }