/****************************************************************************** * FileName: web_int_callbacks.c * Description: The web server inernal callbacks. *******************************************************************************/ #include "user_config.h" #ifdef USE_WEB #include "autoconf.h" #include "FreeRTOS.h" #include "task.h" #include "diag.h" #include "tcm_heap.h" #include "lwip/tcp.h" #include "flash_eep.h" #include "device_lock.h" #include "ethernetif.h" #include "tcpsrv/tcp_srv_conn.h" #include "web_srv_int.h" #include "web_utils.h" #include "webfs/webfs.h" #include "rtl8195a/rtl_libc.h" #include "sys_cfg.h" #include "wifi_api.h" #include "sys_api.h" #include "esp_comp.h" #include "sdk_ver.h" #include "ledeffectsserver.h" #ifdef USE_NETBIOS #include "netbios/netbios.h" #endif #ifdef USE_SNTP #include "sntp/sntp.h" #endif #ifdef USE_CAPTDNS #include "captdns.h" #endif #ifdef USE_MODBUS #include "modbustcp.h" #include "mdbtab.h" #endif #ifdef USE_RS485DRV #include "driver/rs485drv.h" #endif #ifdef USE_OVERLAY #include "overlay.h" #endif #undef atoi #define atoi rom_atoi //#define mMIN(a, b) ((alinkd; unsigned int len = web_conn->msgbufsize - web_conn->msgbuflen; if(len > WAV_HEADER_SIZE + 10) { len -= WAV_HEADER_SIZE; WAV_HEADER * ptr = (WAV_HEADER *) &web_conn->msgbuf[web_conn->msgbuflen]; os_memcpy(ptr, &wav_header, WAV_HEADER_SIZE); ptr->dsize = len; web_conn->msgbuflen += WAV_HEADER_SIZE; len >>= 1; read_adcs((uint16 *)(web_conn->msgbuf + web_conn->msgbuflen), len, 0x0808); web_conn->msgbuflen += len << 1; } if(!CheckSCB(SCB_WEBSOC)) SetSCB(SCB_FCLOSE | SCB_DISCONNECT); // connection close } #endif // TEST_SEND_WAVE //=============================================================================== // WiFi Scan XML //------------------------------------------------------------------------------- extern void wifi_set_timer_scan(int ms); static void ICACHE_FLASH_ATTR web_wscan_xml(TCP_SERV_CONN *ts_conn) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *) ts_conn->linkd; web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; // Check if this is a first round call if(CheckSCB(SCB_RETRYCB)==0) { int i = 0; web_conn->udata_start = 0; if(pwscn_rec->flg == 2) { i = pwscn_rec->ap_count; wifi_set_timer_scan(7000); } else if(pwscn_rec->flg == 0) api_wifi_scan(NULL); tcp_puts_fd("%d", i); if(i == 0) return; } while(web_conn->msgbuflen + 96 + 10 + 32 <= web_conn->msgbufsize) { if(pwscn_rec->flg && web_conn->udata_start < pwscn_rec->ap_count) { rtw_scan_result_t *si = &pwscn_rec->ap_details[web_conn->udata_start]; uint8 ssid[32*6 + 1]; int len = si->SSID.len; if(len > 32) len = 32; si->SSID.val[len] = '\0'; if(web_conn->msgbuflen + 96 + 10 + htmlcode(ssid, si->SSID.val, 32*6, 32) > web_conn->msgbufsize) break; tcp_puts_fd("%d%d" MACSTR "%s%d%d%d", web_conn->udata_start, si->channel, rtw_security_to_idx(si->security), MAC2STR(si->BSSID.octet), ssid, si->signal_strength, // si->band, // rtw_802_11_band_t si->bss_type & 3, // rtw_bss_type_t si->wps_type); // rtw_wps_type_t web_conn->udata_start++; if(web_conn->udata_start >= pwscn_rec->ap_count) { wifi_close_scan(); ClrSCB(SCB_RETRYCB); return; } } else { wifi_close_scan(); ClrSCB(SCB_RETRYCB); return; } } // repeat in the next call ... SetSCB(SCB_RETRYCB); SetNextFunSCB(web_wscan_xml); return; } #ifdef USE_MODBUS //=============================================================================== // Mdb XML //------------------------------------------------------------------------------- void ICACHE_FLASH_ATTR web_modbus_xml(TCP_SERV_CONN *ts_conn) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *) ts_conn->linkd; while(web_conn->msgbuflen + 24 <= web_conn->msgbufsize) { if(web_conn->udata_start < web_conn->udata_stop) { uint16 val16; if(RdMdbData((uint8 *)&val16, web_conn->udata_start, 1) != 0) tcp_puts_fd("?", web_conn->udata_start, web_conn->udata_start); else { if(ts_conn->flag.user_option2) { if(ts_conn->flag.user_option1) { tcp_puts_fd("0x%04x", web_conn->udata_start, val16, web_conn->udata_start); } else { tcp_puts_fd("%04x", web_conn->udata_start, val16, web_conn->udata_start); }; } else { if(ts_conn->flag.user_option1) { tcp_puts_fd("%d", web_conn->udata_start, (sint32)((sint16)val16), web_conn->udata_start); } else { tcp_puts_fd("%u", web_conn->udata_start, val16, web_conn->udata_start); }; }; }; web_conn->udata_start++; } else { ClrSCB(SCB_RETRYCB); return; } } // repeat in the next call ... SetSCB(SCB_RETRYCB); SetNextFunSCB(web_modbus_xml); return; } #endif //=============================================================================== // RAM hexdump //------------------------------------------------------------------------------- void ICACHE_FLASH_ATTR web_hexdump(TCP_SERV_CONN *ts_conn) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *) ts_conn->linkd; union { uint32 dw[4]; uint8 b[16]; }data; web_conn->udata_start &= 0xfffffff0; uint32 *addr = (uint32 *)web_conn->udata_start; int i; web_conn->udata_stop &= 0xfffffff0; while(web_conn->msgbuflen + (9+3*16+17+2) <= web_conn->msgbufsize) { // if((uint32)addr < 0x9A000000) { if((uint32)addr >= 0x98000000 && (uint32)addr < 0x9A000000) { OpenFlash(); } tcp_puts("%08x", addr); for(i=0 ; i < 4 ; i++) data.dw[i] = *addr++; web_conn->udata_start = (uint32)addr; if(ts_conn->flag.user_option1) { // dword or byte ? for(i=0 ; i < 4 ; i++) tcp_puts(" %08x", data.dw[i]); } else { for(i=0 ; i < 16 ; i++) tcp_puts(" %02x", data.b[i]); } if((uint32)addr >= 0x98000000 && (uint32)addr < 0x9A000000) { CloseFlash(); } tcp_put(' '); tcp_put(' '); for(i=0 ; i < 16 ; i++) tcp_put((data.b[i] >=' ' && data.b[i] != 0x7F)? data.b[i] : '.'); tcp_puts("\r\n"); if((uint32)addr >= web_conn->udata_stop) { ClrSCB(SCB_RETRYCB); if(!CheckSCB(SCB_WEBSOC)) SetSCB(SCB_FCLOSE | SCB_DISCONNECT); // connection close return; } // } else { // tcp_puts("%p = Bad address!\r\n", addr); // ClrSCB(SCB_RETRYCB); // if(!CheckSCB(SCB_WEBSOC)) SetSCB(SCB_FCLOSE | SCB_DISCONNECT); // connection close // return; // }; } // repeat in the next call ... SetSCB(SCB_RETRYCB); SetNextFunSCB(web_hexdump); return; } /****************************************************************************** * FunctionName : web saved flash * Description : Processing the flash data send * Parameters : none (Calback) * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR web_get_flash(TCP_SERV_CONN *ts_conn) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *)ts_conn->linkd; // Check if this is a first round call if(CheckSCB(SCB_RETRYCB)==0) { if(web_conn->udata_start == web_conn->udata_stop) return; #if DEBUGSOO > 2 os_printf("file_size:%08x ", web_conn->udata_stop - web_conn->udata_start ); #endif } // Get/put as many bytes as possible unsigned int len = mMIN(web_conn->msgbufsize - web_conn->msgbuflen, web_conn->udata_stop - web_conn->udata_start); // Read Flash addr = web_conn->webfinc_offsets, len = x, buf = sendbuf #if DEBUGSOO > 2 os_printf("%08x..%08x ",web_conn->udata_start, web_conn->udata_start + len ); #endif device_mutex_lock(RT_DEV_LOCK_FLASH); if(spi_flash_read(web_conn->udata_start, web_conn->msgbuf, len)) { web_conn->udata_start += len; web_conn->msgbuflen += len; if(web_conn->udata_start < web_conn->udata_stop) { SetNextFunSCB(web_get_flash); device_mutex_unlock(RT_DEV_LOCK_FLASH); SetSCB(SCB_RETRYCB); return; }; }; device_mutex_unlock(RT_DEV_LOCK_FLASH); ClrSCB(SCB_RETRYCB); // SetSCB(SCB_FCLOSE | SCB_DISCONNECT); return; } /****************************************************************************** * FunctionName : web saved flash * Description : Processing the flash data send * Parameters : none (Calback) * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR web_get_ram(TCP_SERV_CONN *ts_conn) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *)ts_conn->linkd; // Check if this is a first round call if(CheckSCB(SCB_RETRYCB)==0) { // On initial call, проверка параметров if(web_conn->udata_start == web_conn->udata_stop) { // SetSCB(SCB_FCLOSE | SCB_DISCONNECT); return; } #if DEBUGSOO > 2 os_printf("file_size:%08x ", web_conn->udata_stop - web_conn->udata_start ); #endif } // Get/put as many bytes as possible uint32 len = mMIN(web_conn->msgbufsize - web_conn->msgbuflen, web_conn->udata_stop - web_conn->udata_start); if((uint32)web_conn->udata_start >= 0x98000000 && (uint32)web_conn->udata_start < 0x9A000000) { OpenFlash(); } copy_align4(web_conn->msgbuf, (void *)(web_conn->udata_start), len); if((uint32)web_conn->udata_start >= 0x98000000 && (uint32)web_conn->udata_start < 0x9A000000) { CloseFlash(); } web_conn->msgbuflen += len; web_conn->udata_start += len; #if DEBUGSOO > 2 os_printf("%08x-%08x ",web_conn->udata_start, web_conn->udata_start + len ); #endif if(web_conn->udata_start != web_conn->udata_stop) { SetSCB(SCB_RETRYCB); SetNextFunSCB(web_get_ram); return; }; ClrSCB(SCB_RETRYCB); // SetSCB(SCB_FCLOSE | SCB_DISCONNECT); return; } /****************************************************************************** * FunctionName : web_callback * Description : callback * Parameters : struct TCP_SERV_CONN * Returns : none ******************************************************************************/ void ICACHE_FLASH_ATTR web_int_callback(TCP_SERV_CONN *ts_conn, uint8 *cstr) { WEB_SRV_CONN *web_conn = (WEB_SRV_CONN *)ts_conn->linkd; // uint8 *cstr = &web_conn->msgbuf[web_conn->msgbuflen]; { uint8 *vstr = os_strchr(cstr, '='); if(vstr != NULL) { *vstr++ = '\0'; web_int_vars(ts_conn, cstr, vstr); return; } } #if DEBUGSOO > 3 os_printf("[%s]\n", cstr); #endif ifcmp("start") tcp_puts("0x%08x", web_conn->udata_start); else ifcmp("stop") tcp_puts("0x%08x", web_conn->udata_stop); // **************************************************************************************************** // // **************************************** User settings ********************************************* // else ifcmp("ws_") { cstr += 3; ifcmp("filt_") { cstr += 5; ifcmp("rbw_") { cstr += 4; ifcmp("enbl") tcp_puts("%d", filt_rainbow.enabled); else ifcmp("huesteps") tcp_puts("%d", filt_rainbow.hue_steps); else ifcmp("cyclesteps") tcp_puts("%d", filt_rainbow.cycle_steps); } else ifcmp("fd_") { cstr += 3; ifcmp("enbl") tcp_puts("%d", filt_fade.enabled); else ifcmp("min") tcp_puts("%d", filt_fade.min); else ifcmp("max") tcp_puts("%d", filt_fade.max); else ifcmp("cyclesteps") tcp_puts("%d", filt_fade.steps); } else ifcmp("wave_") { cstr += 5; ifcmp("enbl") tcp_puts("%d", filt_wave.enabled); else ifcmp("step") tcp_puts("%d", filt_wave.step); else ifcmp("wavesteps") tcp_puts("%d", filt_wave.wave_steps); } else ifcmp("const_") { cstr += 6; ifcmp("enbl") tcp_puts("%d", filt_const.enabled); else ifcmp("hue") tcp_puts("%d", filt_const.hue); else ifcmp("sat") tcp_puts("%d", filt_const.sat); else ifcmp("value") tcp_puts("%d", filt_const.value); } } else ifcmp("isenable") tcp_puts("%d", strip.enable); else ifcmp("striplen") tcp_puts("%d", strip.strip_len); } // **************************************************************************************************** // // **************************************************************************************************** // #if USE_WEB_AUTH_LEVEL else ifcmp("realm") tcp_puts("%u", web_conn->auth_realm); else ifcmp("auth") tcp_puts("%u", web_conn->auth_level); #endif else ifcmp("xml_") { cstr+=4; ifcmp("scan") web_wscan_xml(ts_conn); #if WEB_DEBUG_FUNCTIONS else { #if USE_WEB_AUTH_LEVEL if(web_conn->auth_level < WEB_AUTH_LEVEL_USER) return; else #endif { web_conn->udata_start&=~3; ifcmp("ram") tcp_puts("0x%08x", *((uint32*)web_conn->udata_start)); else tcp_put('?'); web_conn->udata_start += 4; } } #endif } else ifcmp("sys_") { cstr+=4; ifcmp("url") tcp_strcpy(get_new_hostname()); else ifcmp("cid") tcp_puts("%08x", HalGetChipId()); else ifcmp("fid") tcp_puts("%08x", spi_flash_get_id()); else ifcmp("fsize") tcp_puts("%u", spi_flash_real_size()); // flashchip->chip_size else ifcmp("sdkver") tcp_strcpy_fd(SDK_VERSION); else ifcmp("sysver") tcp_strcpy_fd(SYS_VERSION); else ifcmp("webver") tcp_strcpy_fd(WEB_SVERSION); else ifcmp("heap") tcp_puts("%u", xPortGetFreeHeapSize()); else ifcmp("heapm") tcp_puts("%u", xPortGetMinimumEverFreeHeapSize()); else ifcmp("tcmh") tcp_puts("%u", tcm_heap_freeSpace()); else ifcmp("time") tcp_puts("%u", xTaskGetTickCount()); else ifcmp("mactime") { if(wifi_mode) { union { uint32 dw[2]; uint64 dd; }ux; ux.dd = *((uint64_t *)(WIFI_REG_BASE + 0x0560)); // REG_TSFTR -> #include "hal_com_reg.h" tcp_puts("0x%08x%08x", ux.dw[1], ux.dw[0]); } } else ifcmp("clkcpu") tcp_puts("%u", HalGetCpuClk()); else ifcmp("debug") tcp_put('1' - (print_off & 1)); // rtl_print on/off #if WEB_DEBUG_FUNCTIONS else ifcmp("restart") { #if USE_WEB_AUTH_LEVEL if(web_conn->auth_level < WEB_AUTH_LEVEL_USER) return; #endif webserver_qfn((web_ex_func_cb)sys_reset, NULL, 200); } else ifcmp("ram") tcp_puts("0x%08x", *((uint32 *)(ahextoul(cstr+3)&(~3)))); else ifcmp("rdec") tcp_puts("%d", *((uint32 *)(ahextoul(cstr+4)&(~3)))); #endif // #if WEB_DEBUG_FUNCTIONS else ifcmp("ip") { uint32 cur_ip; if(netif_default != NULL) cur_ip = netif_default->ip_addr.addr; tcp_puts(IPSTR, IP2STR(&cur_ip)); } #ifdef USE_NETBIOS else ifcmp("netbios") { if(syscfg.cfg.b.netbios_ena) tcp_strcpy(netbios_name); } #endif else tcp_put('?'); } #ifdef WEB_INA219_DRV else ifcmp("ina219") { if(CheckSCB(SCB_WEBSOC)) { extern int ina219_ws(TCP_SERV_CONN *ts_conn, char cmd); int x = ina219_ws(ts_conn, cstr[6]); if(x < 0) SetSCB(SCB_FCLOSE|SCB_DISCONNECT); else tcp_puts("%d", x); } } #endif #ifdef WEB_MLX90614_DRV else ifcmp("mlx90614") { if(CheckSCB(SCB_WEBSOC)) { extern int mlx90614_ws(TCP_SERV_CONN *ts_conn, char cmd); int x = mlx90614_ws(ts_conn, cstr[6]); if(x < 0) SetSCB(SCB_FCLOSE|SCB_DISCONNECT); else tcp_puts("%d", x); } } #endif #ifdef WEB_ADC_DRV else ifcmp("adc") { if(CheckSCB(SCB_WEBSOC)) { extern int adc_ws(TCP_SERV_CONN *ts_conn, char cmd); int x = adc_ws(ts_conn, cstr[6]); if(x < 0) SetSCB(SCB_FCLOSE|SCB_DISCONNECT); else tcp_puts("%d", x); } } #endif #ifdef WEB_MPU6050 else ifcmp("mpu6050") { if (CheckSCB(SCB_WEBSOC)) { } } #endif else ifcmp("cfg_") { cstr += 4; ifcmp("web_") { cstr += 4; ifcmp("port") tcp_puts("%u", syscfg.web_port); else ifcmp("twrec") tcp_puts("%u", syscfg.web_twrec); else ifcmp("twcls") tcp_puts("%u", syscfg.web_twcls); else ifcmp("twd") tcp_put((syscfg.cfg.b.web_time_wait_delete)? '1' : '0'); else tcp_put('?'); } else ifcmp("sleep") tcp_put((syscfg.cfg.b.powersave_enable)? '1' : '0'); else ifcmp("pinclr") tcp_put((syscfg.cfg.b.pin_clear_cfg_enable)? '1' : '0'); else ifcmp("debug") tcp_put((syscfg.cfg.b.debug_print_enable)? '1' : '0'); #ifdef USE_NETBIOS else ifcmp("netbios") tcp_put((syscfg.cfg.b.netbios_ena)? '1' : '0'); #endif #ifdef USE_SNTP else ifcmp("sntp") tcp_put((syscfg.cfg.b.sntp_ena)? '1' : '0'); #endif #ifdef USE_CAPTDNS else ifcmp("cdns") tcp_put((syscfg.cfg.b.cdns_ena)? '1' : '0'); #endif else tcp_put('?'); } else ifcmp("wifi_") { cstr+=5; ifcmp("rdcfg") read_wifi_cfg(-1); else ifcmp("newcfg") webserver_qfn((web_ex_func_cb)wifi_run, (void *)((uint32)wifi_cfg.mode), 200); else ifcmp("cmode") tcp_puts("%d", wifi_mode); else ifcmp("mode") tcp_puts("%d", wifi_cfg.mode); else ifcmp("bgn") tcp_puts("%d", wifi_cfg.bgn); else ifcmp("txpow") tcp_puts("%u", wifi_cfg.tx_pwr); else ifcmp("lflg") tcp_puts("%u", wifi_cfg.load_flg); else ifcmp("sflg") tcp_puts("%u", wifi_cfg.save_flg); else ifcmp("adpt") tcp_puts("%u", wifi_cfg.adaptivity); else ifcmp("country") tcp_puts("%u", wifi_cfg.country_code); else ifcmp("ap_") { cstr+=3; ifcmp("ssid") { wifi_ap_cfg.ssid[NDIS_802_11_LENGTH_SSID] = '\0'; tcp_strcpy(wifi_ap_cfg.ssid); } else ifcmp("psw") { wifi_ap_cfg.password[IW_PASSPHRASE_MAX_SIZE] = '\0'; tcp_strcpy(wifi_ap_cfg.password); } else ifcmp("chl") tcp_puts("%u", wifi_ap_cfg.channel); else ifcmp("mcns") tcp_puts("%u", wifi_ap_cfg.max_sta); else ifcmp("auth") tcp_put((wifi_ap_cfg.security) ? '1' : '0'); else ifcmp("hssid") tcp_put((wifi_ap_cfg.ssid_hidden & 1) + '0'); else ifcmp("bint") tcp_puts("%u", wifi_ap_cfg.beacon_interval); else ifcmp("mac") tcp_puts(MACSTR, MAC2STR(xnetif[WLAN_AP_NETIF_NUM].hwaddr)); else ifcmp("hostname") tcp_strcpy(lwip_host_name[1]); else ifcmp("dhcp") tcp_puts("%u", wifi_ap_dhcp.mode); else ifcmp("ip") tcp_puts(IPSTR, IP2STR(&wifi_ap_dhcp.ip)); else ifcmp("gw") tcp_puts(IPSTR, IP2STR(&wifi_ap_dhcp.gw)); else ifcmp("msk") tcp_puts(IPSTR, IP2STR(&wifi_ap_dhcp.mask)); else ifcmp("cip") tcp_puts(IPSTR, IP2STR(&xnetif[WLAN_ST_NETIF_NUM].ip_addr.addr)); // else ifcmp("mac") strtomac(pvar, wifi_ap_cfg.macaddr); // else ifcmp("sip") tcp_puts(IPSTR, IP2STR(&wifi_ap_dhcp.start_ip)); // else ifcmp("eip") tcp_puts(IPSTR, IP2STR(&wifi_ap_dhcp.end_ip)); #if DEBUGSOO > 2 else os_printf(" - none! "); #endif } else ifcmp("st_") { cstr+=3; ifcmp("rssi") { int rssi; wifi_get_rssi(&rssi); tcp_puts("%d", rssi); } else ifcmp("status") tcp_puts("%u", wifi_st_status); else ifcmp("arec") tcp_puts("%u", wifi_st_cfg.autoreconnect); else ifcmp("rect") tcp_puts("%u", wifi_st_cfg.reconnect_pause); ifcmp("ssid") { wifi_st_cfg.ssid[NDIS_802_11_LENGTH_SSID] = '\0'; tcp_strcpy(wifi_st_cfg.ssid); } else ifcmp("psw") { wifi_st_cfg.password[IW_PASSPHRASE_MAX_SIZE] = '\0'; tcp_strcpy(wifi_st_cfg.password); } else ifcmp("mac") tcp_puts(MACSTR, MAC2STR(xnetif[WLAN_ST_NETIF_NUM].hwaddr)); else ifcmp("bssid") tcp_puts(MACSTR, MAC2STR(wifi_st_cfg.bssid)); else ifcmp("sbss") tcp_puts("%u", wifi_st_cfg.flg); else ifcmp("sleep") tcp_puts("%d", wifi_st_cfg.sleep); else ifcmp("dtim") tcp_puts("%u", wifi_st_cfg.dtim); #if LWIP_NETIF_HOSTNAME else ifcmp("hostname") tcp_strcpy(lwip_host_name[0]); #endif else ifcmp("auth") tcp_puts("%u", wifi_st_cfg.security); else ifcmp("dhcp") tcp_puts("%u", wifi_st_dhcp.mode); else ifcmp("ip") tcp_puts(IPSTR, IP2STR(&wifi_st_dhcp.ip)); else ifcmp("gw") tcp_puts(IPSTR, IP2STR(&wifi_st_dhcp.gw)); else ifcmp("msk") tcp_puts(IPSTR, IP2STR(&wifi_st_dhcp.mask)); #if DEBUGSOO > 5 else os_printf(" - none!\n"); #endif } #if DEBUGSOO > 5 else os_printf(" - none!\n"); #endif } else ifcmp("bin_") { #if USE_WEB_AUTH_LEVEL if(web_conn->auth_level < WEB_AUTH_LEVEL_USER) return; #endif cstr+=4; ifcmp("flash") { cstr+=5; if(*cstr == '_') { cstr++; #if WEB_DEBUG_FUNCTIONS ifcmp("all") { web_conn->udata_start = 0; web_conn->udata_stop = spi_flash_real_size(); web_get_flash(ts_conn); } else ifcmp("sec_") { web_conn->udata_start = ahextoul(cstr+4) << 12; web_conn->udata_stop = web_conn->udata_start + FLASH_SECTOR_SIZE; web_get_flash(ts_conn); } else #endif // #if WEB_DEBUG_FUNCTIONS ifcmp("disk") { web_conn->udata_start = WEBFS_base_addr(); web_conn->udata_stop = web_conn->udata_start + WEBFS_curent_size(); web_get_flash(ts_conn); } else tcp_put('?'); } else web_get_flash(ts_conn); } #if WEB_DEBUG_FUNCTIONS else ifcmp("ram") web_get_ram(ts_conn); #endif // #if WEB_DEBUG_FUNCTIONS else tcp_put('?'); } #if WEB_DEBUG_FUNCTIONS else ifcmp("hexdmp") { #if USE_WEB_AUTH_LEVEL if(web_conn->auth_level < WEB_AUTH_LEVEL_USER) return; #endif if(cstr[6]=='d') ts_conn->flag.user_option1 = 1; else ts_conn->flag.user_option1 = 0; web_hexdump(ts_conn); } #endif // #if WEB_DEBUG_FUNCTIONS else ifcmp("web_") { cstr+=4; ifcmp("port") tcp_puts("%u", ts_conn->pcfg->port); else ifcmp("host") tcp_puts(IPSTR ":%d", IP2STR(&(ts_conn->pcb->local_ip.addr)), ts_conn->pcb->local_port); else ifcmp("remote") tcp_puts(IPSTR ":%d", IP2STR(&(ts_conn->remote_ip.dw)), ts_conn->remote_port); else ifcmp("twrec") tcp_puts("%u", ts_conn->pcfg->time_wait_rec); else ifcmp("twcls") tcp_puts("%u", ts_conn->pcfg->time_wait_cls); else tcp_put('?'); } else ifcmp("wfs_") { cstr+=4; ifcmp("files") tcp_puts("%u", numFiles); else ifcmp("addr") tcp_puts("0x%08x", WEBFS_base_addr()); else ifcmp("size") tcp_puts("%u", WEBFS_curent_size()); else ifcmp("max_size") tcp_puts("%u", WEBFS_max_size()); else tcp_put('?'); } #ifdef USE_OVERLAY else ifcmp("ovl") { cstr += 3; if(*cstr == ':') { int i = ovl_loader(cstr + 1); if (i == 0) { if(CheckSCB(SCB_WEBSOC)) { tcp_puts("%d", ovl_call(1)); } else { web_conn->web_disc_cb = (web_func_disc_cb)ovl_call; // адрес старта оверлея web_conn->web_disc_par = 1; // параметр функции - инициализация } } tcp_puts("%d", i); } else if(*cstr == '$') { if(ovl_call != NULL) tcp_puts("%d", ovl_call(ahextoul(cstr + 1))); else tcp_put('?'); } else if(*cstr == '@') { if(ovl_call != NULL) tcp_puts("%d", ovl_call((int) cstr + 1)); else tcp_put('?'); } else tcp_put('?'); } #endif #ifdef USE_SNTP else ifcmp("sntp_") { cstr += 5; ifcmp("time") tcp_puts("%u", sntp_gen_system_time(0)); // get_sntp_time else tcp_put('?'); } #endif #ifdef TEST_SEND_WAVE else ifcmp("test_adc") web_test_adc(ts_conn); #endif else ifcmp("hellomsg") tcp_puts_fd("Web on RTL871x!"); else tcp_put('?'); } #endif // USE_WEB