TCP server (using net_context) running on nrf7002-DK in STA mode stopping receiving data

Hello everybody,

                         I have very bad problem for me. I am developing application on nrf7002-DK based on STA (station) example. I add own AT command analyzer and SCAN, so I am able to see webs that are available near my nrf7002-DK. With special AT command, i am able to connect to any web that my DK see.

I create AT command that allows me create a TCP server on nrf7002-DK.

static void create_tcp_server1(int port_number)
{
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//                                          Vytvoření TCP serveru
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    int rc = net_context_get(AF_INET, SOCK_STREAM, IPPROTO_TCP, &server1.tcp_server);
    if (rc < 0) 
	{
		if(loggovani==true)
		{
           printk("net_context_get selhal: %d\n", rc);
		}
        
    } 
	else 
	{
	    if(loggovani==true)
		{
           printk("Podařilo se definovat parametry TCP serveru\n");
		}
    }
    //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	//                        Definice portu, na kterém poběží server
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    struct sockaddr_in addr;
    int ret;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port_number);
    addr.sin_addr.s_addr = INADDR_ANY;
    //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	//                              Svázání serveru s portem
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ret = net_context_bind(server1.tcp_server, (struct sockaddr *)&addr, sizeof(addr));
    if (ret < 0) 
	{
		if(loggovani==true)
		{
           printk("Spojení serveru s portem selhalo: %d\n", ret);
		}

    }
	else 
	{
		if(loggovani==true)
		{
		   printk("Uspesne bindnuto\n");
		}
	}
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	//                          Zahájení poslouchání na portu
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    ret = net_context_listen(server1.tcp_server, 5);
    if (ret < 0) 
	{
		if(loggovani==true)
		{
           printk("Poslouchání na portu selhalo: %d\n", ret);
		}

    }
	else
	{
		if(loggovani==true)
		{
           printk("Server posloucha na portu\n");
		}
	}
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	//                    Nastavení callbacku pro akceptování klienta
	//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ret = net_context_accept(server1.tcp_server, obsazovani_slotu_server1, K_NO_WAIT, NULL);
    if (ret < 0) {
		if(loggovani==true)
		{
          printk("Pristup selhal: %d\n", ret);
		}
        
    }
	else
	{
		if(loggovani==true)
		{
          printk("Callback pro prihlaseni klienta pridan \n");
		}
	}
	printk("\n+TCPSERVER 1: RUNNING\n");
	server1.is_running=true;
}

I am working with net_context architecture. I try to use sockets, but it doesn't work.

I can show callabck, that I am using for receiving data:

static void prijimac_server1_klient1(struct net_context *context, struct net_pkt *pkt, union net_ip_header *ip_hdr, union net_proto_header *proto_hdr, int status, void *user_data)
{
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//                 Testování toho, jestli nepřišel prázdný packet
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	if (!pkt)//pokud přišel prázdný packet. znamená to, že se klient odpojil
	{
        printk("\n+TCPSERVER 1, CLIENT 1 DISCONNECTED\n");
		printk("\nOK\n");
		server1.pripojen1=false;
		server1.transparetni_rezim1=false;
		server1.ip_client1=NULL;
		int ret = net_context_accept(server1.tcp_server, obsazovani_slotu_server1, K_NO_WAIT, NULL);
        if (ret < 0) 
		{
			if(loggovani==true)
			{
              printk("Callback pro prihlaseni se podarilo nastavit: %d\n", ret);
			}
        }
	    else
	    {
			if(loggovani==true)
			{
				printk("Callback pro prihlaseni klienta pridan \n");
			} 
	    }
	 }
	 else
	 {
		 if(server1.transparetni_rezim1==false)
		 {
            printk("+TCPSERVER 1, DATA CLIENT 1: ");
		 }
         size_t len = net_pkt_remaining_data(pkt);
		 data_prisla_1_1=true;
         //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		 //   Kontrola toho, jestli se data vejdou do bufferu
		 //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         if (len > sizeof(server1.buffer)) 
		 {
           len = sizeof(server1.buffer); //snížení velikosti přijímaných dat
         }
         //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		 //                 Samotné přijetí dat
		 //+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         int ret = net_pkt_read(pkt, server1.buffer, len);
		 bool nalezeni= prohledej_buffer_serveru_1("JEDE, JEDE, MASINKA, KOURI SE JI Z KOMINKA");
		 net_pkt_unref(pkt);
         if (pkt) 
         {
	printk("SE nepovedlo\n");
	pkt = NULL;
}
else
{
	printk("POVEDLO se\n");
}  
net_context_recv(context, prijimac_server1_klient1,  K_NO_WAIT, NULL);
         //context->fifo_reserved;
          
		  //printk("%d\n",pocet);
		 //net_context_unref(context);
		 //net_context_ref(context);
		 //net_context_put(context);
		 if(nalezeni==true)
		 {
            printk("\nDATA NALEZENA\n");
			kontrola_nezkresleni_1_1=true;
		 }
		 else
		 {
            printk("\nNENASEL JSEM TO\n");
		 }
         if (ret == 0) 
		 {
           //for(int ukazovatko=0;ukazovatko<len;ukazovatko++)
		   //{
              //printk("%c",server1.buffer[ukazovatko]);
		   //}
		   //printk("\n");
         }
		 else
		 {
			if(loggovani==true)
			{
			   printk("Data se nepodarila nacist\n");   
		    }
	     }
	  }

}

I do net_pkt_unref().

If I connect to network, create and run TCP server, i can connect TCP client into TCP server. I am able to send data from client to server. But after maybe a 20 message.

I can show you log of communication:

> AT#TCPSERVER=1,1,6523

+TCPSERVER 1: RUNNING
OK
+TCPSERVER 1, CLIENT 1 CONNECTED
OK
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

DATA NALEZENA
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO
+TCPSERVER 1, DATA CLIENT 1: SE nepovedlo

NENASEL JSEM TO

+TCPSERVER 1, CLIENT 1 DISCONNECTED

CONNECTION DATA FLOW TIME EXPIRED

DATA DISTORTION

OK

this log shows: if message +TCPSERVER 1: DATA CLIENT 1: means, that data will be read by server (now without plot into console)

I added function, that will disconnect client, that didn't send message for some time (maybe 30 seconds). If I do disconnection of client and I do new connection, data start flow (only maybe 20 messages). If you do net_context unref and put.

void disconnect_server_1_client_1()
{
	    int navratova=0;
		//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		//             První fáze odpojování klienta
		//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	    navratova=net_context_unref(server1.client1);
		if(navratova==0)
		{
			if(loggovani==true)
		    {
              printk("Klient 1 server 1 se odpojuje, krok 1\n");
			}
		}
		else
		{
			if(loggovani==true)
		    {
              printk("Odpojeni klienta 1 server 1 se nezdarilo\n");
			}
		}
	    navratova=net_context_put(server1.client1); 
		if(navratova==0)
		{
			if(loggovani==true)
		    {
              printk("Klient 1 server 1 se odpojuje, krok 2\n");
			}
		}
		else
		{
			if(loggovani==true)
		    {
              printk("Odpojeni klienta 1 server 1 se nezdarilo\n");
			}
		}
		server1.pripojen1=false;
		printk("\n+TCPSERVER 1, CLIENT 1 DISCONNECTED\n");
		//printk("\nOK\n");
};

My prj. conf looks like this:

#
# Copyright (c) 2022 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_WIFI=y
CONFIG_WIFI_NRF70=y

CONFIG_SERIAL=y
CONFIG_NRFX_UART0=y
CONFIG_UART_ASYNC_API=y
# WPA supplicant
CONFIG_WIFI_NRF70_LOG_LEVEL_INF=n
CONFIG_WIFI_NRF70_LOG_LEVEL_DBG=n
CONFIG_WIFI_NRF70_LOG_LEVEL_DEFAULT=n
CONFIG_WIFI_NRF70_LOG_LEVEL_WRN=n
CONFIG_WIFI_NRF70_LOG_LEVEL_OFF=n
CONFIG_WIFI_NRF70_LOG_LEVEL_ERR=n

CONFIG_WIFI_READY_LIB=y
CONFIG_WIFI_NM_WPA_SUPPLICANT=y
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_DBG=n
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_INF=n
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_DEFAULT=n
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_ERR=n
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_OFF=n
CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_WRN=n
CONFIG_NRF_WIFI_RPU_RECOVERY=y

CONFIG_WIFI_CREDENTIALS=y
CONFIG_WIFI_CREDENTIALS_STATIC=y
CONFIG_WIFI_CREDENTIALS_STATIC_SSID="yyyyyyyyyy"
CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="xxxxxxxxxx"

# Networking
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_LOG=n
CONFIG_NET_IPV4=y
CONFIG_NET_UDP=y
CONFIG_NET_TCP=y
CONFIG_NET_DHCPV4=y

CONFIG_NET_MGMT_EVENT_LOG_LEVEL_DBG=n
CONFIG_NET_MGMT_EVENT_LOG_LEVEL_DEFAULT=n
CONFIG_NET_MGMT_EVENT_LOG_LEVEL_INF=n
CONFIG_NET_MGMT_EVENT_LOG_LEVEL_ERR=n
CONFIG_NET_MGMT_EVENT_LOG_LEVEL_WRN=n
CONFIG_NET_MGMT_EVENT_LOG_LEVEL_OFF=n



CONFIG_NET_PKT_RX_COUNT=32
CONFIG_NET_PKT_TX_COUNT=32
CONFIG_NRF70_RX_NUM_BUFS=16

# Below section is the primary contributor to SRAM and is currently
# tuned for performance, but this will be revisited in the future.
CONFIG_NET_BUF_RX_COUNT=64
CONFIG_NET_BUF_TX_COUNT=64
CONFIG_HEAP_MEM_POOL_SIZE=47000
CONFIG_HEAP_MEM_POOL_IGNORE_MIN=y
CONFIG_NRF_WIFI_CTRL_HEAP_SIZE=20000
CONFIG_NRF_WIFI_DATA_HEAP_SIZE=60000
CONFIG_NET_TC_TX_COUNT=1

CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=1
CONFIG_NET_MAX_CONTEXTS=50
CONFIG_NET_CONTEXT_SYNC_RECV=y

CONFIG_INIT_STACKS=y

CONFIG_NET_L2_ETHERNET=y
CONFIG_NET_L2_WIFI_MGMT=y
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_DBG=n
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_INF=n
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_WRN=n
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_ERR=n
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_DEFAULT=n
CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_OFF=n

CONFIG_WIFI_MGMT_SCAN_SSID_FILT_MAX=4

CONFIG_NET_CONFIG_SETTINGS=y
CONFIG_NET_CONFIG_INIT_TIMEOUT=0

CONFIG_NET_SOCKETS_POLL_MAX=15

# Memories
CONFIG_MAIN_STACK_SIZE=60400
CONFIG_NET_TX_STACK_SIZE=16384
CONFIG_NET_RX_STACK_SIZE=16384
CONFIG_STA_SAMPLE_START_WIFI_THREAD_STACK_SIZE=60400

# Debugging
CONFIG_STACK_SENTINEL=y
CONFIG_DEBUG_COREDUMP=y
CONFIG_DEBUG_COREDUMP_BACKEND_LOGGING=y
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
CONFIG_SHELL_CMDS_RESIZE=n


# Kernel options
CONFIG_ENTROPY_GENERATOR=y

# Logging
CONFIG_LOG_BUFFER_SIZE=16384
CONFIG_POSIX_CLOCK=y

CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.168.1.99"
CONFIG_NET_CONFIG_MY_IPV4_NETMASK="255.255.255.0"
CONFIG_NET_CONFIG_MY_IPV4_GW="192.168.1.1"

# printing of scan results puts pressure on queues in new locking
# design in net_mgmt. So, use a higher timeout for a crowded
# environment.
CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT=50

CONFIG_WIFI_MGMT_RAW_SCAN_RESULTS=n
CONFIG_WIFI_MGMT_RAW_SCAN_RESULTS_ONLY=n

CONFIG_WIFI_SCAN_DWELL_TIME_ACTIVE=50
CONFIG_WIFI_SCAN_DWELL_TIME_PASSIVE=130

CONFIG_WIFI_LOG_LEVEL_OFF=n
CONFIG_WIFI_LOG_LEVEL_INF=n

CONFIG_LOG_BACKEND_NET_AUTOSTART=n
CONFIG_LOG=n
CONFIG_LOG_DEFAULT_LEVEL=3

CONFIG_TIMER=y
CONFIG_COUNTER=y
CONFIG_CLOCK_CONTROL=y
CONFIG_CLOCK_CONTROL_NRF=y
CONFIG_NRFX_CLOCK=y
CONFIG_RTC_ALARM=y
CONFIG_RTC_UPDATE=y
CONFIG_NET_ICMPV4_ACCEPT_BROADCAST=y

#CONFIG_NET_BUF_DATA_SIZE=8192
CONFIG_NET_BUF_POOL_USAGE=y

CONFIG_NET_RX_DEFAULT_PRIORITY=7

Could you please help me solve this problem, I want to be able read any count of messages.

Kind regards

Jaroslav Havel 

Parents
  • Hi, Jaroslav.

    We'll do our best to help you.

    Could you please specify again what your specific problem is?

    I am working with net_context architecture. I try to use sockets, but it doesn't work.

    What specifically doesn't work when you're trying to use sockets?

    I added function, that will disconnect client, that didn't send message for some time (maybe 30 seconds). If I do disconnection of client and I do new connection, data start flow (only maybe 20 messages). If you do net_context unref and put.

    Is it that you're only able to receive 20 messages before a disconnect occurs?

    Could you please help me solve this problem, I want to be able read any count of messages.

    Or is it a different number of messages you're able to receive before the disconnect occurs?

    Best regards,
    Mathias

  • Hi Mathias,

                        I have some news, that can help us solve problem with TCP server. I also implemented the TCP server in another project based on the SoftAP example. It's a different project, based on the fact that the nrf7002-DK behaves as an AP, there is no scan, etc., but the implementation of my TCP server is the same.I found exactly the same behavior of the TCP server. In the case when the TCP server receives several messages, it is blocked (frozen). It does not accept any more messages on a specific connection with the client. The number of messages is smaller (about 4 to 5), this is because the buffer sizes are specified differently.

    I think the problem arises with memory release.

    The implementation of the server and callback for receiving data is the same as in the main post.

    Kind Regards

    Jaroslav

  • Hi, Jaroslav.

    I got some input from a colleague that you should use POSIX sockets. Have a look at the HTTPS Client and UDP samples for references.

    Best regards,
    Mathias

Reply Children
  • Hi Mathias,

    thanks for reply.

    I am trying to use sockets, but if i open TCP server, after some little time, a get error.

    [00:01:52.010,681] <err> os: ***** MPU FAULT *****
    [00:01:52.010,711] <err> os:   Data Access Violation
    [00:01:52.010,711] <err> os:   MMFAR Address: 0x8
    [00:01:52.010,742] <err> os: r0/a1:  0x0005737d  r1/a2:  0xe000ed00  r2/a3:  0x0005737c
    [00:01:52.010,742] <err> os: r3/a4:  0x00000008 r12/ip:  0x200061d8 r14/lr:  0x00003ba5
    [00:01:52.010,772] <err> os:  xpsr:  0x29000000
    [00:01:52.010,772] <err> os: Faulting instruction address (r15/pc): 0x0005999a
    [00:01:52.010,803] <err> os: >>> ZEPHYR FATAL ERROR 19: Unknown error on CPU 0
    [00:01:52.010,864] <err> os: Current thread: 0x20006618 (unknown)
    [00:01:52.072,235] <err> coredump: #CD:BEGIN#
    [00:01:52.077,301] <err> coredump: #CD:5a4502000300050013000000
    [00:01:52.083,862] <err> coredump: #CD:4102004400
    [00:01:52.089,233] <err> coredump: #CD:7d73050000ed00e07c73050008000000d8610020a53b00009a99050000000029
    [00:01:52.099,273] <err> coredump: #CD:5819052000000000000000000000000000000000000000000000000000000000
    [00:01:52.109,313] <err> coredump: #CD:00000000
    [00:01:52.114,501] <err> coredump: #CD:4d010018660020b0660020
    [00:01:52.120,910] <err> coredump: #CD:c8640020a8e90020000000000180000000000000000000000000000000000000
    [00:01:52.130,950] <err> coredump: #CD:21f8050000000000d966020000000000000000009819052044fc002098190520
    [00:01:52.141,021] <err> coredump: #CD:0100565143fc0020ffffffffffffffff40190520000000007066002070660020
    [00:01:52.151,062] <err> coredump: #CD:00010000b82f042060ea000010000000840e0020081a05200000000000000000
    [00:01:52.161,102] <err> coredump: #CD:2b0d0520fc03000018660020000000000000000000000000
    [00:01:52.169,769] <err> coredump: #CD:4d0100b82f0420181a0520
    [00:01:52.176,177] <err> coredump: #CD:f0f0f0f0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    [00:01:52.186,248] <err> coredump: #CD:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    My prj.conf looks like this:

    #
    # Copyright (c) 2022 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    #
    CONFIG_WIFI=y
    CONFIG_WIFI_NRF70=y
    
    CONFIG_SERIAL=y
    CONFIG_NRFX_UART0=y
    CONFIG_UART_ASYNC_API=y
    # WPA supplicant
    CONFIG_WIFI_NRF70_LOG_LEVEL_INF=n
    CONFIG_WIFI_NRF70_LOG_LEVEL_DBG=n
    CONFIG_WIFI_NRF70_LOG_LEVEL_DEFAULT=n
    CONFIG_WIFI_NRF70_LOG_LEVEL_WRN=n
    CONFIG_WIFI_NRF70_LOG_LEVEL_OFF=n
    CONFIG_WIFI_NRF70_LOG_LEVEL_ERR=n
    
    CONFIG_WIFI_READY_LIB=y
    CONFIG_WIFI_NM_WPA_SUPPLICANT=y
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_DBG=n
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_INF=n
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_DEFAULT=n
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_ERR=n
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_OFF=n
    CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_WRN=n
    CONFIG_NRF_WIFI_RPU_RECOVERY=y
    
    CONFIG_WIFI_CREDENTIALS=y
    CONFIG_WIFI_CREDENTIALS_STATIC=y
    CONFIG_WIFI_CREDENTIALS_STATIC_SSID="xxxxxxxxx"
    CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="yyyyyyyyyy"
    
    # Networking
    CONFIG_NETWORKING=y
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_LOG=n
    CONFIG_NET_IPV4=y
    CONFIG_NET_UDP=y
    CONFIG_NET_TCP=y
    CONFIG_NET_DHCPV4=y
    
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_DBG=n
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_DEFAULT=n
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_INF=n
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_ERR=n
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_WRN=n
    CONFIG_NET_MGMT_EVENT_LOG_LEVEL_OFF=n
    
    
    
    CONFIG_NET_PKT_RX_COUNT=32
    CONFIG_NET_PKT_TX_COUNT=32
    CONFIG_NRF70_RX_NUM_BUFS=16
    
    # Below section is the primary contributor to SRAM and is currently
    # tuned for performance, but this will be revisited in the future.
    CONFIG_NET_BUF_RX_COUNT=64
    CONFIG_NET_BUF_TX_COUNT=64
    CONFIG_HEAP_MEM_POOL_SIZE=47000
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=32768
    CONFIG_HEAP_MEM_POOL_IGNORE_MIN=y
    CONFIG_NRF_WIFI_CTRL_HEAP_SIZE=20000
    CONFIG_NRF_WIFI_DATA_HEAP_SIZE=40000
    CONFIG_NET_TC_TX_COUNT=1
    
    CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=1
    CONFIG_NET_MAX_CONTEXTS=50
    CONFIG_NET_CONTEXT_SYNC_RECV=y
    
    CONFIG_INIT_STACKS=y
    
    CONFIG_NET_L2_ETHERNET=y
    CONFIG_NET_L2_WIFI_MGMT=y
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_DBG=n
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_INF=n
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_WRN=n
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_ERR=n
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_DEFAULT=n
    CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_OFF=n
    
    CONFIG_WIFI_MGMT_SCAN_SSID_FILT_MAX=4
    
    CONFIG_NET_CONFIG_SETTINGS=y
    CONFIG_NET_CONFIG_INIT_TIMEOUT=0
    
    CONFIG_NET_SOCKETS_POLL_MAX=15
    
    # Memories
    CONFIG_MAIN_STACK_SIZE=60000
    CONFIG_NET_TX_STACK_SIZE=4096
    CONFIG_NET_RX_STACK_SIZE=4096
    CONFIG_STA_SAMPLE_START_WIFI_THREAD_STACK_SIZE=65400
    
    # Debugging
    CONFIG_STACK_SENTINEL=y
    CONFIG_DEBUG_COREDUMP=y
    CONFIG_DEBUG_COREDUMP_BACKEND_LOGGING=y
    CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
    CONFIG_SHELL_CMDS_RESIZE=n
    
    
    # Kernel options
    CONFIG_ENTROPY_GENERATOR=y
    
    # Logging
    CONFIG_LOG_BUFFER_SIZE=16384
    CONFIG_POSIX_CLOCK=y
    
    CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.168.1.99"
    CONFIG_NET_CONFIG_MY_IPV4_NETMASK="255.255.255.0"
    CONFIG_NET_CONFIG_MY_IPV4_GW="192.168.1.1"
    
    # printing of scan results puts pressure on queues in new locking
    # design in net_mgmt. So, use a higher timeout for a crowded
    # environment.
    CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT=5000
    
    CONFIG_WIFI_MGMT_RAW_SCAN_RESULTS=n
    CONFIG_WIFI_MGMT_RAW_SCAN_RESULTS_ONLY=n
    
    CONFIG_WIFI_SCAN_DWELL_TIME_ACTIVE=50
    CONFIG_WIFI_SCAN_DWELL_TIME_PASSIVE=130
    
    CONFIG_WIFI_LOG_LEVEL_OFF=n
    CONFIG_WIFI_LOG_LEVEL_INF=n
    
    CONFIG_LOG_BACKEND_NET_AUTOSTART=n
    CONFIG_LOG=n
    CONFIG_LOG_DEFAULT_LEVEL=3
    
    CONFIG_TIMER=y
    CONFIG_COUNTER=y
    CONFIG_CLOCK_CONTROL=y
    CONFIG_CLOCK_CONTROL_NRF=y
    CONFIG_NRFX_CLOCK=y
    CONFIG_RTC_ALARM=y
    CONFIG_RTC_UPDATE=y
    CONFIG_NET_ICMPV4_ACCEPT_BROADCAST=y
    
    #CONFIG_NET_BUF_DATA_SIZE=8192
    CONFIG_NET_BUF_POOL_USAGE=y
    
    CONFIG_NET_RX_DEFAULT_PRIORITY=7
    CONFIG_MULTITHREADING=y

    Any idea how to fix it?

    Kind regards

    Jaroslav

  • Hello Mathias,

    thank you for help. I already fixed trouble with socket, cause I had some syntax error inside code. Compilator didn't find it. Now, everything is ok, socket is working (TCP server runs on own thread).

    Kind Regards

    Jaroslav

  • That's great, Jaroslav!

    I'm happy to hear you figured it out.

    If there are no further questions, please close the ticket.

Related