diff --git a/app/cjson/cjson_mem.c b/app/cjson/cjson_mem.c index 90361633..092cb788 100644 --- a/app/cjson/cjson_mem.c +++ b/app/cjson/cjson_mem.c @@ -2,19 +2,14 @@ #include "../lua/lauxlib.h" #include -static lua_State *gL; static const char errfmt[] = "cjson %salloc: out of mem (%d bytes)"; -void cjson_mem_setlua (lua_State *L) -{ - gL = L; -} - void *cjson_mem_malloc (uint32_t sz) { void *p = (void*)c_malloc (sz); - if (!p && gL) - luaL_error (gL, errfmt, "m", sz); + lua_State *L = lua_getstate(); + if (!p) + luaL_error (L, errfmt, "m", sz); return p; } @@ -22,7 +17,8 @@ void *cjson_mem_malloc (uint32_t sz) void *cjson_mem_realloc (void *o, uint32_t sz) { void *p = (void*)c_realloc (o, sz); - if (!p && gL) - luaL_error (gL, errfmt, "re", sz); + lua_State *L = lua_getstate(); + if (!p) + luaL_error (L, errfmt, "re", sz); return p; } diff --git a/app/cjson/cjson_mem.h b/app/cjson/cjson_mem.h index beefb6c2..ad14e1b2 100644 --- a/app/cjson/cjson_mem.h +++ b/app/cjson/cjson_mem.h @@ -3,8 +3,6 @@ #include "../lua/lua.h" -void cjson_mem_setlua (lua_State *L); - void *cjson_mem_malloc (uint32_t sz); void *cjson_mem_realloc (void *p, uint32_t sz); diff --git a/app/coap/coap.h b/app/coap/coap.h index dc4bb6d9..68f2f69a 100644 --- a/app/coap/coap.h +++ b/app/coap/coap.h @@ -155,7 +155,6 @@ typedef struct typedef struct coap_luser_entry coap_luser_entry; struct coap_luser_entry{ - lua_State *L; // int ref; // char name[MAX_SEGMENTS_SIZE+1]; // +1 for string '\0' const char *name; diff --git a/app/coap/endpoints.c b/app/coap/endpoints.c index 00705f93..81e124cc 100644 --- a/app/coap/endpoints.c +++ b/app/coap/endpoints.c @@ -37,6 +37,7 @@ static int handle_get_variable(const coap_endpoint_t *ep, coap_rw_buffer_t *scra const coap_option_t *opt; uint8_t count; int n; + lua_State *L = lua_getstate(); if (NULL != (opt = coap_findOptions(inpkt, COAP_OPTION_URI_PATH, &count))) { if ((count != ep->path->count ) && (count != ep->path->count + 1)) // +1 for /f/[function], /v/[variable] @@ -58,19 +59,17 @@ static int handle_get_variable(const coap_endpoint_t *ep, coap_rw_buffer_t *scra NODE_DBG("/v1/v/"); NODE_DBG((char *)h->name); NODE_DBG(" match.\n"); - if(h->L == NULL) - return coap_make_response(scratch, outpkt, NULL, 0, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_NOT_FOUND, COAP_CONTENTTYPE_NONE); if(c_strlen(h->name)) { - n = lua_gettop(h->L); - lua_getglobal(h->L, h->name); - if (!lua_isnumber(h->L, -1) && !lua_isstring(h->L, -1)) { + n = lua_gettop(L); + lua_getglobal(L, h->name); + if (!lua_isnumber(L, -1) && !lua_isstring(L, -1)) { NODE_DBG ("should be a number or string.\n"); - lua_settop(h->L, n); + lua_settop(L, n); return coap_make_response(scratch, outpkt, NULL, 0, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_NOT_FOUND, COAP_CONTENTTYPE_NONE); } else { - const char *res = lua_tostring(h->L,-1); - lua_settop(h->L, n); + const char *res = lua_tostring(L,-1); + lua_settop(L, n); return coap_make_response(scratch, outpkt, (const uint8_t *)res, c_strlen(res), id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_CONTENT, h->content_type); } } @@ -94,6 +93,7 @@ static int handle_post_function(const coap_endpoint_t *ep, coap_rw_buffer_t *scr const coap_option_t *opt; uint8_t count; int n; + lua_State *L = lua_getstate(); if (NULL != (opt = coap_findOptions(inpkt, COAP_OPTION_URI_PATH, &count))) { if ((count != ep->path->count ) && (count != ep->path->count + 1)) // +1 for /f/[function], /v/[variable] @@ -116,37 +116,34 @@ static int handle_post_function(const coap_endpoint_t *ep, coap_rw_buffer_t *scr NODE_DBG((char *)h->name); NODE_DBG(" match.\n"); - if(h->L == NULL) - return coap_make_response(scratch, outpkt, NULL, 0, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_NOT_FOUND, COAP_CONTENTTYPE_NONE); - if(c_strlen(h->name)) { - n = lua_gettop(h->L); - lua_getglobal(h->L, h->name); - if (lua_type(h->L, -1) != LUA_TFUNCTION) { + n = lua_gettop(L); + lua_getglobal(L, h->name); + if (lua_type(L, -1) != LUA_TFUNCTION) { NODE_DBG ("should be a function\n"); - lua_settop(h->L, n); + lua_settop(L, n); return coap_make_response(scratch, outpkt, NULL, 0, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_NOT_FOUND, COAP_CONTENTTYPE_NONE); } else { - lua_pushlstring(h->L, inpkt->payload.p, inpkt->payload.len); // make sure payload.p is filled with '\0' after payload.len, or use lua_pushlstring - lua_call(h->L, 1, 1); - if (!lua_isnil(h->L, -1)){ /* get return? */ - if( lua_isstring(h->L, -1) ) // deal with the return string + lua_pushlstring(L, inpkt->payload.p, inpkt->payload.len); // make sure payload.p is filled with '\0' after payload.len, or use lua_pushlstring + lua_call(L, 1, 1); + if (!lua_isnil(L, -1)){ /* get return? */ + if( lua_isstring(L, -1) ) // deal with the return string { size_t len = 0; - const char *ret = luaL_checklstring( h->L, -1, &len ); + const char *ret = luaL_checklstring( L, -1, &len ); if(len > MAX_PAYLOAD_SIZE){ - lua_settop(h->L, n); - luaL_error( h->L, "return string:tok, COAP_RSPCODE_NOT_FOUND, COAP_CONTENTTYPE_NONE); } NODE_DBG((char *)ret); NODE_DBG("\n"); - lua_settop(h->L, n); + lua_settop(L, n); return coap_make_response(scratch, outpkt, ret, len, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_CONTENT, COAP_CONTENTTYPE_TEXT_PLAIN); } } else { - lua_settop(h->L, n); + lua_settop(L, n); return coap_make_response(scratch, outpkt, NULL, 0, id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_CONTENT, COAP_CONTENTTYPE_TEXT_PLAIN); } } @@ -198,10 +195,10 @@ static int handle_get_id(const coap_endpoint_t *ep, coap_rw_buffer_t *scratch, c return coap_make_response(scratch, outpkt, (const uint8_t *)(&id), sizeof(uint32_t), id_hi, id_lo, &inpkt->tok, COAP_RSPCODE_CONTENT, COAP_CONTENTTYPE_TEXT_PLAIN); } -coap_luser_entry var_head = {NULL,NULL,NULL,0}; +coap_luser_entry var_head = {NULL,NULL,0}; coap_luser_entry *variable_entry = &var_head; -coap_luser_entry func_head = {NULL,NULL,NULL,0}; +coap_luser_entry func_head = {NULL,NULL,0}; coap_luser_entry *function_entry = &func_head; const coap_endpoint_t endpoints[] = diff --git a/app/modules/bme280.c b/app/modules/bme280.c index dea3f5b5..898a7e64 100644 --- a/app/modules/bme280.c +++ b/app/modules/bme280.c @@ -304,7 +304,7 @@ static int bme280_lua_init(lua_State* L) { static void bme280_readoutdone (void *arg) { NODE_DBG("timer out\n"); - lua_State *L = arg; + lua_State *L = lua_getstate(); lua_rawgeti (L, LUA_REGISTRYINDEX, lua_connected_readout_ref); lua_call (L, 0, 0); luaL_unref (L, LUA_REGISTRYINDEX, lua_connected_readout_ref); diff --git a/app/modules/cjson.c b/app/modules/cjson.c index ec769e04..ed7a31eb 100644 --- a/app/modules/cjson.c +++ b/app/modules/cjson.c @@ -1617,8 +1617,6 @@ static const LUA_REG_TYPE cjson_map[] = { int luaopen_cjson( lua_State *L ) { - cjson_mem_setlua (L); - /* Initialise number conversions */ // fpconv_init(); // not needed for a specific cpu. if(-1==cfg_init(&_cfg)){ diff --git a/app/modules/coap.c b/app/modules/coap.c index 20b2d7a7..ce683e0c 100644 --- a/app/modules/coap.c +++ b/app/modules/coap.c @@ -24,7 +24,6 @@ coap_queue_t *gQueue = NULL; typedef struct lcoap_userdata { - lua_State *L; struct espconn *pesp_conn; int self_ref; }lcoap_userdata; @@ -103,7 +102,6 @@ static int coap_create( lua_State* L, const char* mt ) pesp_conn->state = ESPCONN_NONE; NODE_DBG("UDP server/client is set.\n"); - cud->L = L; pesp_conn->reverse = cud; NODE_DBG("coap_create is called.\n"); @@ -129,7 +127,6 @@ static int coap_delete( lua_State* L, const char* mt ) cud->self_ref = LUA_NOREF; } - cud->L = NULL; if(cud->pesp_conn) { if(cud->pesp_conn->proto.udp->remote_port || cud->pesp_conn->proto.udp->local_port) @@ -462,10 +459,8 @@ static int coap_regist( lua_State* L, const char* mt, int isvar ) return luaL_error(L, "not enough memory"); h->next = NULL; h->name = NULL; - h->L = NULL; } - h->L = L; h->name = name; h->content_type = content_type; diff --git a/app/modules/net.c b/app/modules/net.c index 8181b947..b9549487 100644 --- a/app/modules/net.c +++ b/app/modules/net.c @@ -34,7 +34,6 @@ static int expose_array(lua_State* L, char *array, unsigned short len); #define MAX_SOCKET 5 static int socket_num = 0; static int socket[MAX_SOCKET]; -static lua_State *gL = NULL; static int tcpserver_cb_connect_ref = LUA_NOREF; // for tcp server connected callback static uint16_t tcp_server_timeover = 30; @@ -65,8 +64,7 @@ static void net_server_disconnected(void *arg) // for tcp server only lnet_userdata *nud = (lnet_userdata *)pesp_conn->reverse; if(nud == NULL) return; - if(gL == NULL) - return; + lua_State *L = lua_getstate(); #if 0 char temp[20] = {0}; c_sprintf(temp, IPSTR, IP2STR( &(pesp_conn->proto.tcp->remote_ip) ) ); @@ -78,25 +76,25 @@ static void net_server_disconnected(void *arg) // for tcp server only #endif if(nud->cb_disconnect_ref != LUA_NOREF && nud->self_ref != LUA_NOREF) { - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_disconnect_ref); - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua - lua_call(gL, 1, 0); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_disconnect_ref); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua + lua_call(L, 1, 0); } int i; - lua_gc(gL, LUA_GCSTOP, 0); + lua_gc(L, LUA_GCSTOP, 0); for(i=0;iself_ref) ){ // found the saved client nud->pesp_conn->reverse = NULL; nud->pesp_conn = NULL; // the espconn is made by low level sdk, do not need to free, delete() will not free it. nud->self_ref = LUA_NOREF; // unref this, and the net.socket userdata will delete it self - luaL_unref(gL, LUA_REGISTRYINDEX, socket[i]); + luaL_unref(L, LUA_REGISTRYINDEX, socket[i]); socket[i] = LUA_NOREF; socket_num--; break; } } - lua_gc(gL, LUA_GCRESTART, 0); + lua_gc(L, LUA_GCRESTART, 0); } static void net_socket_disconnected(void *arg) // tcp only @@ -108,11 +106,12 @@ static void net_socket_disconnected(void *arg) // tcp only lnet_userdata *nud = (lnet_userdata *)pesp_conn->reverse; if(nud == NULL) return; + lua_State *L = lua_getstate(); if(nud->cb_disconnect_ref != LUA_NOREF && nud->self_ref != LUA_NOREF) { - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_disconnect_ref); - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua - lua_call(gL, 1, 0); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_disconnect_ref); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua + lua_call(L, 1, 0); } if(pesp_conn->proto.tcp) @@ -121,12 +120,12 @@ static void net_socket_disconnected(void *arg) // tcp only if(nud->pesp_conn) c_free(nud->pesp_conn); nud->pesp_conn = NULL; // espconn is already disconnected - lua_gc(gL, LUA_GCSTOP, 0); + lua_gc(L, LUA_GCSTOP, 0); if(nud->self_ref != LUA_NOREF){ - luaL_unref(gL, LUA_REGISTRYINDEX, nud->self_ref); + luaL_unref(L, LUA_REGISTRYINDEX, nud->self_ref); nud->self_ref = LUA_NOREF; // unref this, and the net.socket userdata will delete it self } - lua_gc(gL, LUA_GCRESTART, 0); + lua_gc(L, LUA_GCRESTART, 0); } static void net_server_reconnected(void *arg, sint8_t err) @@ -154,15 +153,16 @@ static void net_socket_received(void *arg, char *pdata, unsigned short len) return; if(nud->self_ref == LUA_NOREF) return; - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_receive_ref); - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(server) to callback func in lua - // expose_array(gL, pdata, len); + lua_State *L = lua_getstate(); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_receive_ref); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(server) to callback func in lua + // expose_array(L, pdata, len); // *(pdata+len) = 0; // NODE_DBG(pdata); // NODE_DBG("\n"); - lua_pushlstring(gL, pdata, len); - // lua_pushinteger(gL, len); - lua_call(gL, 2, 0); + lua_pushlstring(L, pdata, len); + // lua_pushinteger(L, len); + lua_call(L, 2, 0); } static void net_socket_sent(void *arg) @@ -178,9 +178,10 @@ static void net_socket_sent(void *arg) return; if(nud->self_ref == LUA_NOREF) return; - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_send_ref); - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(server) to callback func in lua - lua_call(gL, 1, 0); + lua_State *L = lua_getstate(); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_send_ref); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(server) to callback func in lua + lua_call(L, 1, 0); } static void net_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) @@ -205,34 +206,16 @@ static void net_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) NODE_DBG("self_ref null.\n"); return; } -/* original - if(ipaddr == NULL) - { - NODE_ERR( "DNS Fail!\n" ); - goto end; - } - // ipaddr->addr is a uint32_t ip - char ip_str[20]; - c_memset(ip_str, 0, sizeof(ip_str)); - if(ipaddr->addr != 0) - { - c_sprintf(ip_str, IPSTR, IP2STR(&(ipaddr->addr))); - } - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_dns_found_ref); // the callback function - //lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(conn) to callback func in lua - lua_pushstring(gL, ip_str); // the ip para -*/ + lua_State *L = lua_getstate(); - // "enhanced" - - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_dns_found_ref); // the callback function - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(conn) to callback func in lua + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_dns_found_ref); // the callback function + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(conn) to callback func in lua if(ipaddr == NULL) { NODE_DBG( "DNS Fail!\n" ); - lua_pushnil(gL); + lua_pushnil(L); }else{ // ipaddr->addr is a uint32_t ip char ip_str[20]; @@ -241,21 +224,21 @@ static void net_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) { c_sprintf(ip_str, IPSTR, IP2STR(&(ipaddr->addr))); } - lua_pushstring(gL, ip_str); // the ip para + lua_pushstring(L, ip_str); // the ip para } // "enhanced" end - lua_call(gL, 2, 0); + lua_call(L, 2, 0); end: if((pesp_conn->type == ESPCONN_TCP && pesp_conn->proto.tcp->remote_port == 0) || (pesp_conn->type == ESPCONN_UDP && pesp_conn->proto.udp->remote_port == 0) ){ - lua_gc(gL, LUA_GCSTOP, 0); + lua_gc(L, LUA_GCSTOP, 0); if(nud->self_ref != LUA_NOREF){ - luaL_unref(gL, LUA_REGISTRYINDEX, nud->self_ref); + luaL_unref(L, LUA_REGISTRYINDEX, nud->self_ref); nud->self_ref = LUA_NOREF; // unref this, and the net.socket userdata will delete it self } - lua_gc(gL, LUA_GCRESTART, 0); + lua_gc(L, LUA_GCRESTART, 0); } } @@ -295,25 +278,24 @@ static void net_server_connected(void *arg) // for tcp only if(tcpserver_cb_connect_ref == LUA_NOREF) return; - if(!gL) - return; + lua_State *L = lua_getstate(); - lua_rawgeti(gL, LUA_REGISTRYINDEX, tcpserver_cb_connect_ref); // get function + lua_rawgeti(L, LUA_REGISTRYINDEX, tcpserver_cb_connect_ref); // get function // create a new client object - skt = (lnet_userdata *)lua_newuserdata(gL, sizeof(lnet_userdata)); + skt = (lnet_userdata *)lua_newuserdata(L, sizeof(lnet_userdata)); if(!skt){ NODE_ERR("can't newudata\n"); - lua_pop(gL, 1); + lua_pop(L, 1); return; } // set its metatable - luaL_getmetatable(gL, "net.socket"); - lua_setmetatable(gL, -2); + luaL_getmetatable(L, "net.socket"); + lua_setmetatable(L, -2); // pre-initialize it, in case of errors skt->self_ref = LUA_NOREF; - lua_pushvalue(gL, -1); // copy the top of stack - skt->self_ref = luaL_ref(gL, LUA_REGISTRYINDEX); // ref to it self, for module api to find the userdata + lua_pushvalue(L, -1); // copy the top of stack + skt->self_ref = luaL_ref(L, LUA_REGISTRYINDEX); // ref to it self, for module api to find the userdata socket[i] = skt->self_ref; // save to socket array socket_num++; skt->cb_connect_ref = LUA_NOREF; // this socket already connected @@ -337,7 +319,7 @@ static void net_server_connected(void *arg) // for tcp only espconn_regist_reconcb(pesp_conn, net_server_reconnected); // now socket[i] has the client ref, and stack top has the userdata - lua_call(gL, 1, 0); // function(conn) + lua_call(L, 1, 0); // function(conn) } static void net_socket_connected(void *arg) @@ -358,9 +340,10 @@ static void net_socket_connected(void *arg) return; if(nud->self_ref == LUA_NOREF) return; - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->cb_connect_ref); - lua_rawgeti(gL, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua - lua_call(gL, 1, 0); + lua_State *L = lua_getstate(); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->cb_connect_ref); + lua_rawgeti(L, LUA_REGISTRYINDEX, nud->self_ref); // pass the userdata(client) to callback func in lua + lua_call(L, 1, 0); } // Lua: s = net.create(type, secure/timeout, function(conn)) @@ -492,8 +475,6 @@ static int net_create( lua_State* L, const char* mt ) pUdpServer = pesp_conn; } - gL = L; // global L for net module. - // if call back function is specified, call it with para userdata // luaL_checkanyfunction(L, 2); if (lua_type(L, stack) == LUA_TFUNCTION || lua_type(L, stack) == LUA_TLIGHTFUNCTION){ @@ -575,12 +556,12 @@ static int net_delete( lua_State* L, const char* mt ) luaL_unref(L, LUA_REGISTRYINDEX, nud->cb_dns_found_ref); nud->cb_dns_found_ref = LUA_NOREF; } - lua_gc(gL, LUA_GCSTOP, 0); + lua_gc(L, LUA_GCSTOP, 0); if(LUA_NOREF!=nud->self_ref){ luaL_unref(L, LUA_REGISTRYINDEX, nud->self_ref); nud->self_ref = LUA_NOREF; } - lua_gc(gL, LUA_GCRESTART, 0); + lua_gc(L, LUA_GCRESTART, 0); return 0; } @@ -625,19 +606,18 @@ static void socket_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) lnet_userdata *nud = (lnet_userdata *)pesp_conn->reverse; if(nud == NULL) return; - if(gL == NULL) - return; + lua_State *L = lua_getstate(); if(ipaddr == NULL) { dns_reconn_count++; if( dns_reconn_count >= 5 ){ NODE_ERR( "DNS Fail!\n" ); - lua_gc(gL, LUA_GCSTOP, 0); + lua_gc(L, LUA_GCSTOP, 0); if(nud->self_ref != LUA_NOREF){ - luaL_unref(gL, LUA_REGISTRYINDEX, nud->self_ref); + luaL_unref(L, LUA_REGISTRYINDEX, nud->self_ref); nud->self_ref = LUA_NOREF; // unref this, and the net.socket userdata will delete it self } - lua_gc(gL, LUA_GCRESTART, 0); + lua_gc(L, LUA_GCRESTART, 0); return; } NODE_ERR( "DNS retry %d!\n", dns_reconn_count ); @@ -1175,8 +1155,8 @@ static int net_dns_static( lua_State* L ) lua_pushinteger(L, UDP); // we are going to create a new dummy UDP socket lua_call(L,1,1);// after this the stack should have a socket - lua_rawgeti(gL, LUA_REGISTRYINDEX, rdom); // load domain back to the stack - lua_rawgeti(gL, LUA_REGISTRYINDEX, rfunc); // load the callback function back to the stack + lua_rawgeti(L, LUA_REGISTRYINDEX, rdom); // load domain back to the stack + lua_rawgeti(L, LUA_REGISTRYINDEX, rfunc); // load the callback function back to the stack luaL_unref(L, LUA_REGISTRYINDEX, rdom); //free reference luaL_unref(L, LUA_REGISTRYINDEX, rfunc); //free reference diff --git a/app/modules/node.c b/app/modules/node.c index 39b0feea..18a770e6 100644 --- a/app/modules/node.c +++ b/app/modules/node.c @@ -333,7 +333,7 @@ void output_redirect(const char *str) { // return; // } - if (output_redir_ref == LUA_NOREF || !L) { + if (output_redir_ref == LUA_NOREF) { uart0_sendStr(str); return; } diff --git a/app/modules/sntp.c b/app/modules/sntp.c index 68b78577..14695395 100644 --- a/app/modules/sntp.c +++ b/app/modules/sntp.c @@ -204,7 +204,7 @@ static void on_recv (void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_a (void)port; sntp_dbg("sntp: on_recv\n"); - lua_State *L = arg; + lua_State *L = lua_getstate(); if (!state || state->pcb != pcb) { diff --git a/app/modules/uart.c b/app/modules/uart.c index 857d7137..f78b2d9a 100755 --- a/app/modules/uart.c +++ b/app/modules/uart.c @@ -8,7 +8,6 @@ #include "c_string.h" #include "rom.h" -static lua_State *gL = NULL; static int uart_receive_rf = LUA_NOREF; bool run_input = true; bool uart_on_data_cb(const char *buf, size_t len){ @@ -16,11 +15,12 @@ bool uart_on_data_cb(const char *buf, size_t len){ return false; if(uart_receive_rf == LUA_NOREF) return false; - if(!gL) + lua_State *L = lua_getstate(); + if(!L) return false; - lua_rawgeti(gL, LUA_REGISTRYINDEX, uart_receive_rf); - lua_pushlstring(gL, buf, len); - lua_call(gL, 1, 0); + lua_rawgeti(L, LUA_REGISTRYINDEX, uart_receive_rf); + lua_pushlstring(L, buf, len); + lua_call(L, 1, 0); return !run_input; } @@ -75,7 +75,6 @@ static int uart_on( lua_State* L ) } if(!lua_isnil(L, -1)){ uart_receive_rf = luaL_ref(L, LUA_REGISTRYINDEX); - gL = L; if(run==0) run_input = false; } else {