summaryrefslogtreecommitdiffstatshomepage
path: root/zephyr/modusocket.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-03-31 23:13:12 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-03-31 23:14:39 +0300
commit64d00511e11eed6e37134e5b43acac8a33226ca0 (patch)
tree41e3a1c679e3c6218d5f19d6b24a2977e22ce91d /zephyr/modusocket.c
parent88582e33ccbf6b5d5a2f6a9a592d35139688efa4 (diff)
downloadmicropython-64d00511e11eed6e37134e5b43acac8a33226ca0.tar.gz
micropython-64d00511e11eed6e37134e5b43acac8a33226ca0.zip
zephyr/modusocket: Implement send().
Diffstat (limited to 'zephyr/modusocket.c')
-rw-r--r--zephyr/modusocket.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c
index 109b8943c2..ea084368ca 100644
--- a/zephyr/modusocket.c
+++ b/zephyr/modusocket.c
@@ -130,6 +130,25 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_connect_obj, socket_connect);
+STATIC mp_obj_t socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
+ socket_obj_t *socket = self_in;
+ socket_check_closed(socket);
+
+ mp_buffer_info_t bufinfo;
+ mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ);
+
+ struct net_buf *send_buf = net_nbuf_get_tx(socket->ctx, K_FOREVER);
+ // TODO: Probably should limit how much data we send in one call still
+ if (!net_nbuf_append(send_buf, bufinfo.len, bufinfo.buf, K_FOREVER)) {
+ mp_raise_OSError(ENOSPC);
+ }
+
+ RAISE_ERRNO(net_context_send(send_buf, /*cb*/NULL, K_FOREVER, NULL, NULL));
+
+ return mp_obj_new_int_from_uint(bufinfo.len);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_send_obj, socket_send);
+
STATIC mp_obj_t socket_close(mp_obj_t self_in) {
socket_obj_t *socket = self_in;
if (socket->ctx != NULL) {
@@ -145,6 +164,7 @@ STATIC const mp_map_elem_t socket_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&socket_close_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_bind), (mp_obj_t)&socket_bind_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_connect), (mp_obj_t)&socket_connect_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_send), (mp_obj_t)&socket_send_obj },
};
STATIC MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table);