Skip to content
Snippets Groups Projects
Commit d39d96b7 authored by Josef Gajdusek's avatar Josef Gajdusek Committed by Damien George
Browse files

esp8266: Add .onsent callback support

The function passed to socket.onsent() gets called after data is succesfully
sent by the socket.
parent 2d56df67
No related branches found
No related tags found
No related merge requests found
...@@ -47,6 +47,7 @@ typedef struct _esp_socket_obj_t { ...@@ -47,6 +47,7 @@ typedef struct _esp_socket_obj_t {
mp_obj_t cb_connect; mp_obj_t cb_connect;
mp_obj_t cb_recv; mp_obj_t cb_recv;
mp_obj_t cb_sent;
mp_obj_t cb_disconnect; mp_obj_t cb_disconnect;
uint8_t *recvbuf; uint8_t *recvbuf;
...@@ -69,6 +70,7 @@ STATIC mp_obj_t esp_socket_make_new_base() { ...@@ -69,6 +70,7 @@ STATIC mp_obj_t esp_socket_make_new_base() {
s->cb_connect = mp_const_none; s->cb_connect = mp_const_none;
s->cb_recv = mp_const_none; s->cb_recv = mp_const_none;
s->cb_disconnect = mp_const_none; s->cb_disconnect = mp_const_none;
s->cb_sent = mp_const_none;
s->fromserver = false; s->fromserver = false;
s->connlist = NULL; s->connlist = NULL;
return s; return s;
...@@ -168,6 +170,12 @@ STATIC void esp_socket_recv_callback(void *arg, char *pdata, unsigned short len) ...@@ -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) { 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) { 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) { ...@@ -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_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) { STATIC mp_obj_t esp_socket_ondisconnect(mp_obj_t self_in, mp_obj_t lambda_in) {
esp_socket_obj_t *s = self_in; esp_socket_obj_t *s = self_in;
s->cb_disconnect = lambda_in; s->cb_disconnect = lambda_in;
...@@ -454,6 +469,7 @@ STATIC const mp_map_elem_t esp_socket_locals_dict_table[] = { ...@@ -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_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_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_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 }, { 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); STATIC MP_DEFINE_CONST_DICT(esp_socket_locals_dict, esp_socket_locals_dict_table);
......
...@@ -62,6 +62,7 @@ Q(close) ...@@ -62,6 +62,7 @@ Q(close)
Q(protocol) Q(protocol)
Q(onconnect) Q(onconnect)
Q(onrecv) Q(onrecv)
Q(onsent)
Q(ondisconnect) Q(ondisconnect)
Q(STAT_IDLE) Q(STAT_IDLE)
Q(STAT_CONNECTING) Q(STAT_CONNECTING)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment