Hi,
I'm using CC3120MOD with following host driver/service pack/etc:
CHIP 822083584
MAC 31.2.0.0.0
PHY 2.2.0.6
NWP 3.11.1.0
ROM 0
HOST 3.0.1.61
For my application, I'm opening two different TCP socket. I have a dedicated task which, by mean of sl_select function call, is responsible for waiting data from sockets and calling installed callback to signal data to user.
Here the pseudo code of my task:
/* Task loop. */
while (true)
{
int16_t res;
uint8_t i;
/* Wait for any socket. */
rxSet.fd_array[0] = 0xFFFFFFFF;
/* Check for activity (blocking). */
if ((res = sl_Select (0, &rxSet, NULL, NULL, NULL)) > 0)
{
/* Loop over sockets. */
for (i = 0; i < WIFI_SOCKET_MAX; i++)
{
/* Get socket handle. */
handle = Wifi_SocketHandle[i];
/* Configure descriptor. */
SL_SOCKET_FD_ZERO (&rxSet);
SL_SOCKET_FD_SET (handle, &rxSet);
/* Clear timeout. */
timeVal.tv_sec = 0;
timeVal.tv_usec = 0;
/* Call selet again (with no timeout). */
res = sl_Select (0, &rxSet, NULL, NULL, &timeVal);
/* Something received? */
if (res > 0)
{
/* Read received data from socket. */
if ((res = sl_Recv (handle, buffer, sizeof (buffer), 0)) > 0)
{
// call user callback with data
}
else
{
// Socket closed? call user callback with error
}
}
else
{
/* Just do nothing. */
}
}
}
else
{
//@todo
}
}
Everything is working like a charm, except for one thing: when I call sl_stop, the function hangs on this loop:
#ifdef SL_PLATFORM_MULTI_THREADED
/* Do not continue until all sync object deleted (in relevant context) */
while (g_pCB->NumOfDeletedSyncObj < MAX_CONCURRENT_ACTIONS)
{
usleep(100000);
}
#endif
I think that's because sl_select is blocking waiting for data to be received. I tried also to close all sockets prior to call sl_stop, but sl_select never returns.
This is a known issue? Any workaround to this? I used to use old service pack and host driver and I don't remember such a problem.
Thanks in adavance.
Alessandro