Skip to content

Commit d33f621

Browse files
committed
modify modnetwork and modusocket for circuitpython
1 parent f4c3213 commit d33f621

File tree

5 files changed

+62
-52
lines changed

5 files changed

+62
-52
lines changed

shared-bindings/network/__init__.c

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@
3030

3131
#include "py/objlist.h"
3232
#include "py/runtime.h"
33-
#include "modnetwork.h"
33+
#include "py/mphal.h"
34+
#include "py/mperrno.h"
35+
#include "lib/netutils/netutils.h"
36+
37+
#include "shared-bindings/network/__init__.h"
3438

3539
#if MICROPY_PY_NETWORK
3640

@@ -42,6 +46,9 @@ void mod_network_init(void) {
4246
mp_obj_list_init(&MP_STATE_PORT(mod_network_nic_list), 0);
4347
}
4448

49+
void mod_network_deinit(void) {
50+
}
51+
4552
void mod_network_register_nic(mp_obj_t nic) {
4653
for (mp_uint_t i = 0; i < MP_STATE_PORT(mod_network_nic_list).len; i++) {
4754
if (MP_STATE_PORT(mod_network_nic_list).items[i] == nic) {
@@ -50,7 +57,7 @@ void mod_network_register_nic(mp_obj_t nic) {
5057
}
5158
}
5259
// nic not registered so add to list
53-
mp_obj_list_append(&MP_STATE_PORT(mod_network_nic_list), nic);
60+
mp_obj_list_append(MP_OBJ_FROM_PTR(&MP_STATE_PORT(mod_network_nic_list)), nic);
5461
}
5562

5663
mp_obj_t mod_network_find_nic(const uint8_t *ip) {
@@ -62,30 +69,29 @@ mp_obj_t mod_network_find_nic(const uint8_t *ip) {
6269
return nic;
6370
}
6471

65-
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "no available NIC"));
72+
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, translate("no available NIC")));
6673
}
6774

75+
STATIC mp_obj_t network_initialize(void) {
76+
mod_network_init();
77+
return mp_const_none;
78+
}
79+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_initialize_obj, network_initialize);
80+
6881
STATIC mp_obj_t network_route(void) {
69-
return &MP_STATE_PORT(mod_network_nic_list);
82+
return MP_OBJ_FROM_PTR(&MP_STATE_PORT(mod_network_nic_list));
7083
}
7184
STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_route_obj, network_route);
7285

7386
STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = {
7487
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_network) },
75-
76-
#if MICROPY_PY_WIZNET5K
77-
{ MP_ROM_QSTR(MP_QSTR_WIZNET5K), MP_ROM_PTR(&mod_network_nic_type_wiznet5k) },
78-
#endif
79-
#if MICROPY_PY_CC3K
80-
{ MP_ROM_QSTR(MP_QSTR_CC3K), MP_ROM_PTR(&mod_network_nic_type_cc3k) },
81-
#endif
82-
88+
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&network_initialize_obj) },
8389
{ MP_ROM_QSTR(MP_QSTR_route), MP_ROM_PTR(&network_route_obj) },
8490
};
8591

8692
STATIC MP_DEFINE_CONST_DICT(mp_module_network_globals, mp_module_network_globals_table);
8793

88-
const mp_obj_module_t mp_module_network = {
94+
const mp_obj_module_t network_module = {
8995
.base = { &mp_type_module },
9096
.globals = (mp_obj_dict_t*)&mp_module_network_globals,
9197
};

shared-bindings/network/__init__.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2424
* THE SOFTWARE.
2525
*/
26-
#ifndef MICROPY_INCLUDED_STM32_MODNETWORK_H
27-
#define MICROPY_INCLUDED_STM32_MODNETWORK_H
26+
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_NETWORK___INIT___H
27+
#define MICROPY_INCLUDED_SHARED_BINDINGS_NETWORK___INIT___H
2828

2929
#define MOD_NETWORK_IPADDR_BUF_SIZE (4)
3030

@@ -77,7 +77,8 @@ extern const mod_network_nic_type_t mod_network_nic_type_wiznet5k;
7777
extern const mod_network_nic_type_t mod_network_nic_type_cc3k;
7878

7979
void mod_network_init(void);
80+
void mod_network_deinit(void);
8081
void mod_network_register_nic(mp_obj_t nic);
8182
mp_obj_t mod_network_find_nic(const uint8_t *ip);
8283

83-
#endif // MICROPY_INCLUDED_STM32_MODNETWORK_H
84+
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_NETWORK___INIT___H

shared-bindings/socket/__init__.c

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* The MIT License (MIT)
55
*
66
* Copyright (c) 2014 Damien P. George
7+
* 2018 Nick Moore for Adafruit Industries
78
*
89
* Permission is hereby granted, free of charge, to any person obtaining a copy
910
* of this software and associated documentation files (the "Software"), to deal
@@ -33,12 +34,17 @@
3334
#include "py/stream.h"
3435
#include "py/mperrno.h"
3536
#include "lib/netutils/netutils.h"
36-
#include "modnetwork.h"
3737

38-
#if MICROPY_PY_USOCKET
38+
#include "shared-bindings/network/__init__.h"
3939

40-
/******************************************************************************/
41-
// socket class
40+
//| :mod:`socket` --- TCP, UDP and RAW socket support
41+
//| =================================================
42+
//|
43+
//| .. module:: socket
44+
//| :synopsis: TCP, UDP and RAW sockets
45+
//| :platform: SAMD21, SAMD51
46+
//|
47+
//| XXX TODO Write Docs.
4248

4349
STATIC const mp_obj_type_t socket_type;
4450

@@ -48,7 +54,7 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
4854

4955
// create socket object (not bound to any NIC yet)
5056
mod_network_socket_obj_t *s = m_new_obj_with_finaliser(mod_network_socket_obj_t);
51-
s->base.type = (mp_obj_t)&socket_type;
57+
s->base.type = &socket_type;
5258
s->nic = MP_OBJ_NULL;
5359
s->nic_type = NULL;
5460
s->u_param.domain = MOD_NETWORK_AF_INET;
@@ -64,7 +70,7 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
6470
}
6571
}
6672

67-
return s;
73+
return MP_OBJ_FROM_PTR(s);
6874
}
6975

7076
STATIC void socket_select_nic(mod_network_socket_obj_t *self, const byte *ip) {
@@ -83,7 +89,7 @@ STATIC void socket_select_nic(mod_network_socket_obj_t *self, const byte *ip) {
8389

8490
// method socket.bind(address)
8591
STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
86-
mod_network_socket_obj_t *self = self_in;
92+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
8793

8894
// get address
8995
uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE];
@@ -104,7 +110,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_bind_obj, socket_bind);
104110

105111
// method socket.listen(backlog)
106112
STATIC mp_obj_t socket_listen(mp_obj_t self_in, mp_obj_t backlog) {
107-
mod_network_socket_obj_t *self = self_in;
113+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
108114

109115
if (self->nic == MP_OBJ_NULL) {
110116
// not connected
@@ -123,12 +129,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_listen_obj, socket_listen);
123129

124130
// method socket.accept()
125131
STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
126-
mod_network_socket_obj_t *self = self_in;
132+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
127133

128134
// create new socket object
129135
// starts with empty NIC so that finaliser doesn't run close() method if accept() fails
130136
mod_network_socket_obj_t *socket2 = m_new_obj_with_finaliser(mod_network_socket_obj_t);
131-
socket2->base.type = (mp_obj_t)&socket_type;
137+
socket2->base.type = &socket_type;
132138
socket2->nic = MP_OBJ_NULL;
133139
socket2->nic_type = NULL;
134140

@@ -145,17 +151,17 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
145151
socket2->nic_type = self->nic_type;
146152

147153
// make the return value
148-
mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL);
149-
client->items[0] = socket2;
154+
mp_obj_tuple_t *client = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));
155+
client->items[0] = MP_OBJ_FROM_PTR(socket2);
150156
client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
151157

152-
return client;
158+
return MP_OBJ_FROM_PTR(client);
153159
}
154160
STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_accept_obj, socket_accept);
155161

156162
// method socket.connect(address)
157163
STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
158-
mod_network_socket_obj_t *self = self_in;
164+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
159165

160166
// get address
161167
uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE];
@@ -176,15 +182,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_connect_obj, socket_connect);
176182

177183
// method socket.send(bytes)
178184
STATIC mp_obj_t socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
179-
mod_network_socket_obj_t *self = self_in;
185+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
180186
if (self->nic == MP_OBJ_NULL) {
181187
// not connected
182188
mp_raise_OSError(MP_EPIPE);
183189
}
184190
mp_buffer_info_t bufinfo;
185191
mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ);
186192
int _errno;
187-
mp_uint_t ret = self->nic_type->send(self, bufinfo.buf, bufinfo.len, &_errno);
193+
mp_int_t ret = self->nic_type->send(self, bufinfo.buf, bufinfo.len, &_errno);
188194
if (ret == -1) {
189195
mp_raise_OSError(_errno);
190196
}
@@ -194,7 +200,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_send_obj, socket_send);
194200

195201
// method socket.recv(bufsize)
196202
STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
197-
mod_network_socket_obj_t *self = self_in;
203+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
198204
if (self->nic == MP_OBJ_NULL) {
199205
// not connected
200206
mp_raise_OSError(MP_ENOTCONN);
@@ -203,7 +209,7 @@ STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
203209
vstr_t vstr;
204210
vstr_init_len(&vstr, len);
205211
int _errno;
206-
mp_uint_t ret = self->nic_type->recv(self, (byte*)vstr.buf, len, &_errno);
212+
mp_int_t ret = self->nic_type->recv(self, (byte*)vstr.buf, len, &_errno);
207213
if (ret == -1) {
208214
mp_raise_OSError(_errno);
209215
}
@@ -217,7 +223,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recv_obj, socket_recv);
217223

218224
// method socket.sendto(bytes, address)
219225
STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_in) {
220-
mod_network_socket_obj_t *self = self_in;
226+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
221227

222228
// get the data
223229
mp_buffer_info_t bufinfo;
@@ -243,7 +249,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(socket_sendto_obj, socket_sendto);
243249

244250
// method socket.recvfrom(bufsize)
245251
STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
246-
mod_network_socket_obj_t *self = self_in;
252+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
247253
if (self->nic == MP_OBJ_NULL) {
248254
// not connected
249255
mp_raise_OSError(MP_ENOTCONN);
@@ -271,7 +277,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recvfrom_obj, socket_recvfrom);
271277

272278
// method socket.setsockopt(level, optname, value)
273279
STATIC mp_obj_t socket_setsockopt(size_t n_args, const mp_obj_t *args) {
274-
mod_network_socket_obj_t *self = args[0];
280+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(args[0]);
275281

276282
mp_int_t level = mp_obj_get_int(args[1]);
277283
mp_int_t opt = mp_obj_get_int(args[2]);
@@ -304,7 +310,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_setsockopt_obj, 4, 4, socket_s
304310
// timeout=None means blocking
305311
// otherwise, timeout is in seconds
306312
STATIC mp_obj_t socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
307-
mod_network_socket_obj_t *self = self_in;
313+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
308314
if (self->nic == MP_OBJ_NULL) {
309315
// not connected
310316
mp_raise_OSError(MP_ENOTCONN);
@@ -355,8 +361,8 @@ STATIC const mp_rom_map_elem_t socket_locals_dict_table[] = {
355361

356362
STATIC MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table);
357363

358-
mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t arg, int *errcode) {
359-
mod_network_socket_obj_t *self = self_in;
364+
mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
365+
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
360366
if (request == MP_STREAM_CLOSE) {
361367
if (self->nic != MP_OBJ_NULL) {
362368
self->nic_type->close(self);
@@ -383,8 +389,7 @@ STATIC const mp_obj_type_t socket_type = {
383389
/******************************************************************************/
384390
// usocket module
385391

386-
// function usocket.getaddrinfo(host, port)
387-
STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
392+
STATIC mp_obj_t socket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
388393
size_t hlen;
389394
const char *host = mp_obj_str_get_data(host_in, &hlen);
390395
mp_int_t port = mp_obj_get_int(port_in);
@@ -420,24 +425,24 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
420425
}
421426

422427
if (!have_ip) {
423-
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, "no available NIC"));
428+
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, translate("no available NIC")));
424429
}
425430

426-
mp_obj_tuple_t *tuple = mp_obj_new_tuple(5, NULL);
431+
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
427432
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_AF_INET);
428433
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
429434
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
430435
tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
431436
tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_BIG);
432437
return mp_obj_new_list(1, (mp_obj_t*)&tuple);
433438
}
434-
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_usocket_getaddrinfo_obj, mod_usocket_getaddrinfo);
439+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_getaddrinfo_obj, socket_getaddrinfo);
435440

436-
STATIC const mp_rom_map_elem_t mp_module_usocket_globals_table[] = {
441+
STATIC const mp_rom_map_elem_t socket_globals_table[] = {
437442
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },
438443

439444
{ MP_ROM_QSTR(MP_QSTR_socket), MP_ROM_PTR(&socket_type) },
440-
{ MP_ROM_QSTR(MP_QSTR_getaddrinfo), MP_ROM_PTR(&mod_usocket_getaddrinfo_obj) },
445+
{ MP_ROM_QSTR(MP_QSTR_getaddrinfo), MP_ROM_PTR(&socket_getaddrinfo_obj) },
441446

442447
// class constants
443448
{ MP_ROM_QSTR(MP_QSTR_AF_INET), MP_ROM_INT(MOD_NETWORK_AF_INET) },
@@ -458,11 +463,9 @@ STATIC const mp_rom_map_elem_t mp_module_usocket_globals_table[] = {
458463
*/
459464
};
460465

461-
STATIC MP_DEFINE_CONST_DICT(mp_module_usocket_globals, mp_module_usocket_globals_table);
466+
STATIC MP_DEFINE_CONST_DICT(socket_globals, socket_globals_table);
462467

463-
const mp_obj_module_t mp_module_usocket = {
468+
const mp_obj_module_t socket_module = {
464469
.base = { &mp_type_module },
465-
.globals = (mp_obj_dict_t*)&mp_module_usocket_globals,
470+
.globals = (mp_obj_dict_t*)&socket_globals,
466471
};
467-
468-
#endif // MICROPY_PY_USOCKET

shared-module/network/__init__.c

Whitespace-only changes.

shared-module/socket/__init__.c

Whitespace-only changes.

0 commit comments

Comments
 (0)