From d39d96b70045d82f207f9bb8d1908aeb40b75b7c Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Wed, 6 May 2015 00:17:04 +0200 Subject: esp8266: Add .onsent callback support The function passed to socket.onsent() gets called after data is succesfully sent by the socket. --- esp8266/modesp.c | 16 ++++++++++++++++ esp8266/qstrdefsport.h | 1 + 2 files changed, 17 insertions(+) (limited to 'esp8266') diff --git a/esp8266/modesp.c b/esp8266/modesp.c index ac9da09a56..e7f2b0ab4a 100644 --- a/esp8266/modesp.c +++ b/esp8266/modesp.c @@ -47,6 +47,7 @@ typedef struct _esp_socket_obj_t { mp_obj_t cb_connect; mp_obj_t cb_recv; + mp_obj_t cb_sent; mp_obj_t cb_disconnect; uint8_t *recvbuf; @@ -69,6 +70,7 @@ STATIC mp_obj_t esp_socket_make_new_base() { s->cb_connect = mp_const_none; s->cb_recv = mp_const_none; s->cb_disconnect = mp_const_none; + s->cb_sent = mp_const_none; s->fromserver = false; s->connlist = NULL; return s; @@ -168,6 +170,12 @@ STATIC void esp_socket_recv_callback(void *arg, char *pdata, unsigned short len) } STATIC void esp_socket_sent_callback(void *arg) { + struct espconn *conn = arg; + esp_socket_obj_t *s = conn->reverse; + + if (s->cb_sent != mp_const_none) { + call_function_1_protected(s->cb_sent, s); + } } STATIC void esp_socket_disconnect_callback(void *arg) { @@ -379,6 +387,13 @@ STATIC mp_obj_t esp_socket_onrecv(mp_obj_t self_in, mp_obj_t lambda_in) { } STATIC MP_DEFINE_CONST_FUN_OBJ_2(esp_socket_onrecv_obj, esp_socket_onrecv); +STATIC mp_obj_t esp_socket_onsent(mp_obj_t self_in, mp_obj_t lambda_in) { + esp_socket_obj_t *s = self_in; + s->cb_sent = lambda_in; + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(esp_socket_onsent_obj, esp_socket_onsent); + STATIC mp_obj_t esp_socket_ondisconnect(mp_obj_t self_in, mp_obj_t lambda_in) { esp_socket_obj_t *s = self_in; s->cb_disconnect = lambda_in; @@ -454,6 +469,7 @@ STATIC const mp_map_elem_t esp_socket_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_recvfrom), (mp_obj_t)&esp_socket_recvfrom_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_onconnect), (mp_obj_t)&esp_socket_onconnect_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_onrecv), (mp_obj_t)&esp_socket_onrecv_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_onsent), (mp_obj_t)&esp_socket_onsent_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_ondisconnect), (mp_obj_t)&esp_socket_ondisconnect_obj }, }; STATIC MP_DEFINE_CONST_DICT(esp_socket_locals_dict, esp_socket_locals_dict_table); diff --git a/esp8266/qstrdefsport.h b/esp8266/qstrdefsport.h index fb064095e4..704cb70c0e 100644 --- a/esp8266/qstrdefsport.h +++ b/esp8266/qstrdefsport.h @@ -62,6 +62,7 @@ Q(close) Q(protocol) Q(onconnect) Q(onrecv) +Q(onsent) Q(ondisconnect) Q(STAT_IDLE) Q(STAT_CONNECTING) -- cgit v1.2.3