/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
    printf("SDK version:%d.%d.%d\n",
    		SDK_VERSION_MAJOR,
    		SDK_VERSION_MINOR,
    		SDK_VERSION_REVISION);

    /* need to set opmode before you set config */
    wifi_set_opmode(STATIONAP_MODE);

    {
        struct station_config *config = (struct station_config *)zalloc(sizeof(struct station_config));
        sprintf(config->ssid, "CVR100W_T");
        sprintf(config->password, "justfortest");

        /* need to sure that you are in station mode first,
         * otherwise it will be failed. */
        wifi_station_set_config(config);
        free(config);
    }
    
    {
        struct ip_info ipinfo;
    	    
        ipinfo.gw.addr = ipaddr_addr("192.168.145.253");
    	ipinfo.ip.addr = ipaddr_addr("192.168.145.253");
    	ipinfo.netmask.addr = ipaddr_addr("255.255.255.0");
    	
    	wifi_set_ip_info(SOFTAP_IF, &ipinfo);
    }

    {
        struct dhcp_info *pdhcp_info = NULL;
    
        pdhcp_info = (struct dhcp_info *)zalloc(sizeof(struct dhcp_info));
        pdhcp_info->start_ip = ipaddr_addr("192.168.145.100");
        pdhcp_info->end_ip = ipaddr_addr("192.168.145.110");    // don't set the range too large, because it will cost memory.
        pdhcp_info->max_leases = 10;
        pdhcp_info->auto_time = 60;
        pdhcp_info->decline_time = 60;
        pdhcp_info->conflict_time = 60;
        pdhcp_info->offer_time = 60;
        pdhcp_info->min_lease_sec = 60;
        dhcp_set_info(pdhcp_info);
        free(pdhcp_info);
    }
    
    udhcpd_start();

    xTaskCreate(task2, "tsk2", 256, NULL, 2, NULL);
    xTaskCreate(task3, "tsk3", 256, NULL, 2, NULL);
}
 // warn: each IP in the range requires memory!
 void STC_FLASHMEM DHCPServer::configure(char const* startIP, char const* endIP, uint32_t maxLeases)
 {		
     //udhcpd_stop();
     dhcp_info info = {0};
     info.start_ip      = ipaddr_addr(APtr<char>(f_strdup(startIP)).get());
     info.end_ip        = ipaddr_addr(APtr<char>(f_strdup(endIP)).get());
     info.max_leases    = maxLeases;
     info.auto_time     = 60;
     info.decline_time  = 60;
     info.conflict_time = 60;
     info.offer_time    = 60;
     info.min_lease_sec = 60;
     dhcp_set_info(&info);
     udhcpd_start();			
 }