int main(void) { int ret; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(162);//延时初始化 tim3_init(162);//时钟初始化 sram_init();//SRAM初始化 ads1271_init(0);//ad初始化 参数为0 高速模式 led_init();//LED初始化 read_device_config();//读取flash中设备配置 current_source_init();//恒流源初始化 ethernet_init();//网络初始化 tcp_sever();//建立tcp服务器 while(!is_con());//等待连接 led_link(1);//开启连接灯 while(1) { //INT处理部分 ret = deal_int(); if((ret == NET_ERR) || (ret == NET_DISCONNECT)) sys_restart();//重启 //PRE处理部分 ret = deal_pre(); if((ret == NET_ERR) || (ret == NET_DISCONNECT)) sys_restart();//重启 //DIV处理 ret = deal_div(); if((ret == NET_ERR) || (ret == NET_DISCONNECT)) sys_restart();//重启 //STA处理 ret = deal_sta(); if((ret == NET_ERR) || (ret == NET_DISCONNECT)) sys_restart();//重启 //数据传输 while(1) { ret = deal_data(); if((ret == NET_ERR) || (ret == NET_DISCONNECT)) sys_restart();//重启 } } }
/* Read query from stream in json format treate it and create answer string * The query is a list of commands and treated by 'do_json_command' */ static void create_xml_string(const char *querystring, vis_xml_strings_t *xmlstring) { char *pch; char request[VIS_MAX_REQ_LEN] = {0}; char dutmac[VIS_MAX_MAC_LEN] = {0}; char stamac[VIS_MAX_MAC_LEN] = {0}; char band[VIS_MAX_BAND_LEN] = {0}; char dcon_ip[VIS_MAX_IP_LEN] = {0}; int isenabled = 0; static int donvramread = 1; vis_xml_strings_t configxml = {0}; vis_xml_strings_t graphxml = {0}; vis_xml_strings_t dutset = {0}; vis_xml_strings_t pkthdr = {0}; /* Read NVRAM variable for debug print. Read only once, that is why checking for 1 * From next time onwards default value 0 will be set to static var */ if (donvramread == 1) { char *tmpdebugflag = nvram_get("vis_debug_level"); if (tmpdebugflag) vis_debug_level = strtoul(tmpdebugflag, NULL, 0); donvramread = 0; } VIS_DEBUG("Request : %s\n", querystring); vis_xml_add_tag_and_attribute(&pkthdr, "PacketVersion", "Name", "\"1\""); vis_xml_add_only_tag(&pkthdr, "PacketHeader", TRUE); /* Open packet header tag */ vis_xml_add_tag_value(&pkthdr, "PacketType", "1"); vis_xml_add_tag_value(&pkthdr, "From", "2"); vis_xml_add_only_tag(&configxml, "Config", TRUE); /* Open Config tag */ vis_xml_add_only_tag(&graphxml, "EnabledGraphs", TRUE); /* Open enabled graphs tag */ pch = strtok((char*)querystring, "?=&"); while (pch != NULL) { int i; enum vis_enum_req_args id = VIS_UNKNOWN; for (i = 0; i < (sizeof(vis_req_args_list)/sizeof(vis_req_args)); i++) { if (strstr(pch, vis_req_args_list[i].req_name) != NULL) { pch = strtok(NULL, "?=&"); if (pch == NULL) break; id = vis_req_args_list[i].id; break; } } switch (id) { case VIS_REQUEST: /* Get the request name */ snprintf(request, sizeof(request), "%s", pch); vis_xml_add_tag_value(&pkthdr, "ReqRespType", request); break; case VIS_DUTMAC: /* Get the DUTMAC */ snprintf(dutmac, sizeof(dutmac), "%s", pch); break; case VIS_STAMAC: /* Get the STAMAC */ snprintf(stamac, sizeof(stamac), "%s", pch); break; case VIS_FREQBAND: /* Get the FreqBand */ snprintf(band, sizeof(band), "%s", pch); vis_xml_add_tag_value(&pkthdr, "FreqBand", band); break; case VIS_INTERVAL: /* Get Interval for config settings */ vis_xml_add_tag_value(&configxml, "SampleInterval", pch); break; case VIS_DBSIZE: /* Get Max database size for config settings */ vis_xml_add_tag_value(&configxml, "dbsize", pch); break; case VIS_STARTSTOP: /* Tells to stop or start the data collection */ vis_xml_add_tag_value(&configxml, "startstop", pch); break; case VIS_TOTAL: /* Get total graph names for config settings */ vis_xml_add_tag_value(&graphxml, "Total", pch); break; case VIS_GRAPHNAME: /* Get graphname for config settings */ vis_xml_add_tag_value(&graphxml, "graphname", pch); break; case VIS_DCONIP: /* Server IP for remote debug */ snprintf(dcon_ip, sizeof(dcon_ip), "%s", pch); break; case VIS_ISREMOTE_ENABLE: /* Flag for remote debugging enabled */ isenabled = atoi(pch); break; case VIS_DOSCAN: /* Flag for DO scan flag */ vis_xml_add_only_tag(&dutset, "DUTSet", TRUE); vis_xml_add_tag_value(&dutset, "DoScan", pch); vis_xml_add_only_tag(&dutset, "DUTSet", FALSE); break; case VIS_ISOVERWRITEDB: /* Get Overwrite DB flag for config settings */ vis_xml_add_tag_value(&configxml, "overwrtdb", pch); break; case VIS_ISAUTOSTART: /* Get Is Auto Start flag for config settings */ vis_xml_add_tag_value(&configxml, "autost", pch); break; case VIS_WEEKDAYS: /* Get Weekdays for config settings */ vis_xml_add_tag_value(&configxml, "wkdays", pch); break; case VIS_FROMTM: /* Get From Time for config settings */ vis_xml_add_tag_value(&configxml, "frmtm", pch); break; case VIS_TOTM: /* Get To Time for config settings */ vis_xml_add_tag_value(&configxml, "totm", pch); break; case VIS_UNKNOWN: break; } pch = strtok(NULL, "?=&"); } if (strcmp(request, "RemoteSettings") == 0) { char *tmpdcon_ip = nvram_get("vis_dcon_ipaddr"); if (tmpdcon_ip == NULL) goto vis_fun_end; char *value = nvram_get("vis_do_remote_dcon"); if (value) isenabled = atoi(value); vis_rdata = (unsigned char*)malloc(sizeof(char) * MAX_READ_BUFFER); memset(vis_rdata, 0, MAX_READ_BUFFER); snprintf(vis_rdata, MAX_READ_BUFFER, "{\"IsEnabled\":%d,\"ServerIP\":\"%s\"}", isenabled, tmpdcon_ip); goto vis_fun_end; } else if (strcmp(request, "SetRemoteDebug") == 0) { char tmpbuf[5] = {0}; nvram_set("vis_dcon_ipaddr", dcon_ip); snprintf(tmpbuf, sizeof(tmpbuf), "%d", isenabled); nvram_set("vis_do_remote_dcon", tmpbuf); nvram_commit(); sys_restart(); goto vis_fun_end; } vis_xml_add_only_tag(&graphxml, "EnabledGraphs", FALSE); /* Close EnabledGraphs Tag */ vis_xml_add_only_value(&configxml, graphxml.str); vis_xml_add_only_tag(&configxml, "Config", FALSE); /* Close Config Tag */ vis_xml_add_only_tag(&pkthdr, "PacketHeader", FALSE); /* Close Packet Header Tag */ vis_xml_add_only_tag(xmlstring, "?xml version=\"1.0\" encoding=\"utf-8\"?", TRUE); vis_xml_add_only_value(&pkthdr, configxml.str); vis_xml_add_only_tag(&pkthdr, "DUT", TRUE); /* Open DUT tag */ vis_xml_add_tag_value(&pkthdr, "MAC", dutmac); vis_xml_add_tag_value(&pkthdr, "STAMAC", stamac); vis_xml_add_only_tag(&pkthdr, "DUT", FALSE); /* Close DUT Tag */ if (dutset.str) vis_xml_add_only_value(&pkthdr, dutset.str); vis_xml_add_only_tag(&pkthdr, "PacketVersion", FALSE); /* Clsoe PacketVersion Tag */ vis_xml_add_only_value(xmlstring, pkthdr.str); vis_fun_end: /* Free the XML data buffers */ vis_xml_free_data_buffer(&configxml); vis_xml_free_data_buffer(&graphxml); vis_xml_free_data_buffer(&dutset); vis_xml_free_data_buffer(&pkthdr); }