wapi: add basic wapi_event_stream_extract implementation
This commit is contained in:
parent
82debd80dc
commit
523d7645c4
@ -75,8 +75,10 @@ endif
|
|||||||
ifeq ($(CONFIG_NET),y)
|
ifeq ($(CONFIG_NET),y)
|
||||||
CSRCS += nsh_netinit.c nsh_netcmds.c
|
CSRCS += nsh_netinit.c nsh_netcmds.c
|
||||||
ifeq ($(CONFIG_WIRELESS_WAPI),y)
|
ifeq ($(CONFIG_WIRELESS_WAPI),y)
|
||||||
|
ifeq ($(CONFIG_NSH_NETINIT),y)
|
||||||
CSRCS += nsh_associate.c
|
CSRCS += nsh_associate.c
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
ifeq ($(CONFIG_NET_ROUTE),y)
|
ifeq ($(CONFIG_NET_ROUTE),y)
|
||||||
CSRCS += nsh_routecmds.c
|
CSRCS += nsh_routecmds.c
|
||||||
endif
|
endif
|
||||||
|
@ -224,7 +224,57 @@ static int wapi_event_stream_extract(FAR struct wapi_event_stream_s *stream,
|
|||||||
{
|
{
|
||||||
#warning Missing logic
|
#warning Missing logic
|
||||||
// return iw_extract_event_stream((struct stream_descr *)stream, iwe, 0);
|
// return iw_extract_event_stream((struct stream_descr *)stream, iwe, 0);
|
||||||
return -ENOSYS;
|
|
||||||
|
int ret;
|
||||||
|
struct iw_event *iwe_stream;
|
||||||
|
|
||||||
|
if (stream->current + offsetof(struct iw_event, u) > stream->end)
|
||||||
|
{
|
||||||
|
/* Nothing to process */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
iwe_stream = (struct iw_event*)stream->current;
|
||||||
|
|
||||||
|
if (stream->current + iwe_stream->len > stream->end ||
|
||||||
|
iwe_stream->len < offsetof(struct iw_event, u))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
|
|
||||||
|
switch (iwe_stream->cmd)
|
||||||
|
{
|
||||||
|
case SIOCGIWESSID:
|
||||||
|
case IWEVGENIE:
|
||||||
|
iwe->cmd = iwe_stream->cmd;
|
||||||
|
iwe->len = offsetof(struct iw_event, u) + sizeof(struct iw_point);
|
||||||
|
iwe->u.data.flags = iwe_stream->u.data.flags;
|
||||||
|
iwe->u.data.length = iwe_stream->u.data.length;
|
||||||
|
|
||||||
|
iwe->u.data.pointer = (FAR void*)(stream->current +
|
||||||
|
offsetof(struct iw_event, u) +
|
||||||
|
(unsigned long)iwe_stream->u.data.pointer);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (iwe_stream->len > sizeof(*iwe))
|
||||||
|
{
|
||||||
|
WAPI_ERROR("Unhandled event size 0x%x %d\n", iwe_stream->cmd,
|
||||||
|
iwe_stream->len);
|
||||||
|
iwe->cmd = 0;
|
||||||
|
iwe->len = offsetof(struct iw_event, u);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
memcpy(iwe, iwe_stream, iwe_stream->len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update stream to next event */
|
||||||
|
|
||||||
|
stream->current += iwe_stream->len;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -1113,6 +1163,8 @@ alloc:
|
|||||||
return -errcode;
|
return -errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("got %d bytes\n", wrq.u.data.length);
|
||||||
|
|
||||||
/* We have the results, process them. */
|
/* We have the results, process them. */
|
||||||
|
|
||||||
if (wrq.u.data.length)
|
if (wrq.u.data.length)
|
||||||
@ -1125,7 +1177,8 @@ alloc:
|
|||||||
{
|
{
|
||||||
/* Get the next event from the stream */
|
/* Get the next event from the stream */
|
||||||
|
|
||||||
if ((ret = wapi_event_stream_extract(&stream, &iwe)) >= 0)
|
ret = wapi_event_stream_extract(&stream, &iwe);
|
||||||
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
int eventret = wapi_scan_event(&iwe, aps);
|
int eventret = wapi_scan_event(&iwe, aps);
|
||||||
if (eventret < 0)
|
if (eventret < 0)
|
||||||
@ -1133,7 +1186,7 @@ alloc:
|
|||||||
ret = eventret;
|
ret = eventret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (ret < 0)
|
||||||
{
|
{
|
||||||
WAPI_ERROR("ERROR: wapi_event_stream_extract() failed!\n");
|
WAPI_ERROR("ERROR: wapi_event_stream_extract() failed!\n");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user