48
48
typedef struct _socket_obj_t {
49
49
mp_obj_base_t base ;
50
50
struct net_context * ctx ;
51
+ #ifndef CONFIG_NET_SOCKETS
51
52
union {
52
53
struct k_fifo recv_q ;
53
54
struct k_fifo accept_q ;
54
55
};
56
+ #endif
55
57
56
58
#define STATE_NEW 0
57
59
#define STATE_CONNECTING 1
@@ -62,6 +64,12 @@ typedef struct _socket_obj_t {
62
64
63
65
STATIC const mp_obj_type_t socket_type ;
64
66
67
+ #ifdef CONFIG_NET_SOCKETS
68
+ #define SOCK_FIELD (ptr , field ) ((ptr)->ctx->field)
69
+ #else
70
+ #define SOCK_FIELD (ptr , field ) ((ptr)->field)
71
+ #endif
72
+
65
73
// k_fifo extended API
66
74
67
75
static inline void * _k_fifo_peek_head (struct k_fifo * fifo )
@@ -171,10 +179,10 @@ static void sock_received_cb(struct net_context *context, struct net_pkt *pkt, i
171
179
172
180
// if net_buf == NULL, EOF
173
181
if (pkt == NULL ) {
174
- struct net_pkt * last_pkt = _k_fifo_peek_tail (& socket -> recv_q );
182
+ struct net_pkt * last_pkt = _k_fifo_peek_tail (& SOCK_FIELD ( socket , recv_q ) );
175
183
if (last_pkt == NULL ) {
176
184
socket -> state = STATE_PEER_CLOSED ;
177
- k_fifo_cancel_wait (& socket -> recv_q );
185
+ k_fifo_cancel_wait (& SOCK_FIELD ( socket , recv_q ) );
178
186
DEBUG_printf ("Marked socket %p as peer-closed\n" , socket );
179
187
} else {
180
188
// We abuse "buf_sent" flag to store EOF flag
@@ -191,7 +199,7 @@ static void sock_received_cb(struct net_context *context, struct net_pkt *pkt, i
191
199
unsigned header_len = net_pkt_appdata (pkt ) - pkt -> frags -> data ;
192
200
net_buf_pull (pkt -> frags , header_len );
193
201
194
- k_fifo_put (& socket -> recv_q , pkt );
202
+ k_fifo_put (& SOCK_FIELD ( socket , recv_q ) , pkt );
195
203
}
196
204
197
205
// Callback for incoming connections.
@@ -200,13 +208,12 @@ static void sock_accepted_cb(struct net_context *new_ctx, struct sockaddr *addr,
200
208
DEBUG_printf ("accept cb: context: %p, status: %d, new ctx: %p\n" , socket -> ctx , status , new_ctx );
201
209
DEBUG_printf ("new_ctx ref_cnt: %d\n" , new_ctx -> refcount );
202
210
203
- k_fifo_put (& socket -> accept_q , new_ctx );
211
+ k_fifo_put (& SOCK_FIELD ( socket , accept_q ) , new_ctx );
204
212
}
205
213
206
214
socket_obj_t * socket_new (void ) {
207
215
socket_obj_t * socket = m_new_obj_with_finaliser (socket_obj_t );
208
216
socket -> base .type = (mp_obj_t )& socket_type ;
209
- k_fifo_init (& socket -> recv_q );
210
217
socket -> state = STATE_NEW ;
211
218
return socket ;
212
219
}
@@ -250,6 +257,7 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
250
257
}
251
258
252
259
RAISE_ERRNO (net_context_get (family , socktype , proto , & socket -> ctx ));
260
+ k_fifo_init (& SOCK_FIELD (socket , recv_q ));
253
261
254
262
return MP_OBJ_FROM_PTR (socket );
255
263
}
@@ -302,7 +310,7 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
302
310
socket_obj_t * socket = self_in ;
303
311
socket_check_closed (socket );
304
312
305
- struct net_context * ctx = k_fifo_get (& socket -> accept_q , K_FOREVER );
313
+ struct net_context * ctx = k_fifo_get (& SOCK_FIELD ( socket , accept_q ) , K_FOREVER );
306
314
// Was overwritten by fifo
307
315
ctx -> refcount = 1 ;
308
316
@@ -375,7 +383,7 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
375
383
376
384
if (sock_type == SOCK_DGRAM ) {
377
385
378
- struct net_pkt * pkt = k_fifo_get (& socket -> recv_q , K_FOREVER );
386
+ struct net_pkt * pkt = k_fifo_get (& SOCK_FIELD ( socket , recv_q ) , K_FOREVER );
379
387
380
388
recv_len = net_pkt_appdatalen (pkt );
381
389
DEBUG_printf ("recv: pkt=%p, appdatalen: %d\n" , pkt , recv_len );
@@ -395,8 +403,8 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
395
403
return 0 ;
396
404
}
397
405
398
- _k_fifo_wait_non_empty (& socket -> recv_q , K_FOREVER );
399
- struct net_pkt * pkt = _k_fifo_peek_head (& socket -> recv_q );
406
+ _k_fifo_wait_non_empty (& SOCK_FIELD ( socket , recv_q ) , K_FOREVER );
407
+ struct net_pkt * pkt = _k_fifo_peek_head (& SOCK_FIELD ( socket , recv_q ) );
400
408
if (pkt == NULL ) {
401
409
DEBUG_printf ("TCP recv: NULL return from fifo\n" );
402
410
continue ;
@@ -426,7 +434,7 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
426
434
if (frag == NULL ) {
427
435
DEBUG_printf ("Finished processing pkt %p\n" , pkt );
428
436
// Drop head packet from queue
429
- k_fifo_get (& socket -> recv_q , K_NO_WAIT );
437
+ k_fifo_get (& SOCK_FIELD ( socket , recv_q ) , K_NO_WAIT );
430
438
431
439
// If "sent" flag was set, it's last packet and we reached EOF
432
440
if (net_pkt_sent (pkt )) {
0 commit comments