Skip to content
Snippets Groups Projects
Commit faf333c0 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

zephyr/modusocket: Factor out "extended k_fifo API".

Internal structure of k_fifo changed between 1.7 and 1.8, so we need
to abstract it away. This adds more functions than currently used, for
future work.
parent 390d5a3b
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
#include <stdio.h> #include <stdio.h>
#include <zephyr.h> #include <zephyr.h>
// Zephyr's generated version header
#include <version.h>
#include <net/net_context.h> #include <net/net_context.h>
#include <net/nbuf.h> #include <net/nbuf.h>
...@@ -55,6 +57,36 @@ typedef struct _socket_obj_t { ...@@ -55,6 +57,36 @@ typedef struct _socket_obj_t {
STATIC const mp_obj_type_t socket_type; STATIC const mp_obj_type_t socket_type;
// k_fifo extended API
static inline void *_k_fifo_peek_head(struct k_fifo *fifo)
{
#if KERNEL_VERSION_NUMBER < 0x010763 /* 1.7.99 */
return sys_slist_peek_head(&fifo->data_q);
#else
return sys_slist_peek_head(&fifo->_queue.data_q);
#endif
}
static inline void *_k_fifo_peek_tail(struct k_fifo *fifo)
{
#if KERNEL_VERSION_NUMBER < 0x010763 /* 1.7.99 */
return sys_slist_peek_tail(&fifo->data_q);
#else
return sys_slist_peek_tail(&fifo->_queue.data_q);
#endif
}
static inline void _k_fifo_wait_non_empty(struct k_fifo *fifo, int32_t timeout)
{
struct k_poll_event events[] = {
K_POLL_EVENT_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, fifo),
};
k_poll(events, MP_ARRAY_SIZE(events), timeout);
DEBUG_printf("poll res: %d\n", events[0].state);
}
// Helper functions // Helper functions
#define RAISE_ERRNO(x) { int _err = x; if (_err < 0) mp_raise_OSError(-_err); } #define RAISE_ERRNO(x) { int _err = x; if (_err < 0) mp_raise_OSError(-_err); }
...@@ -112,8 +144,7 @@ static void sock_received_cb(struct net_context *context, struct net_buf *net_bu ...@@ -112,8 +144,7 @@ static void sock_received_cb(struct net_context *context, struct net_buf *net_bu
// if net_buf == NULL, EOF // if net_buf == NULL, EOF
if (net_buf == NULL) { if (net_buf == NULL) {
// TODO: k_fifo accessor for this? struct net_buf *last_buf = _k_fifo_peek_tail(&socket->recv_q);
struct net_buf *last_buf = (struct net_buf*)sys_slist_peek_tail(&socket->recv_q.data_q);
// We abuse "buf_sent" flag to store EOF flag // We abuse "buf_sent" flag to store EOF flag
net_nbuf_set_buf_sent(last_buf, true); net_nbuf_set_buf_sent(last_buf, true);
DEBUG_printf("Set EOF flag on %p\n", last_buf); DEBUG_printf("Set EOF flag on %p\n", last_buf);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment