void luaTask(void *params){ doScript(); while(1){ portTickType xLastWakeTime, startTickTime; const portTickType xFrequency = LUA_1Hz; startTickTime = xLastWakeTime = xTaskGetTickCount(); if (getShouldReloadScript()){ doScript(); setShouldReloadScript(0); } lockLua(); lua_getglobal(g_lua, LUA_PERIODIC_FUNCTION); if (! lua_isnil(g_lua,-1)){ if (lua_pcall(g_lua, 0, 0, 0) != 0){ // TODO log or indicate error. store this in a "Last Error" // SendString("Error calling "); // SendString(LUA_PERIODIC_FUNCTION); // SendString("(): "); // SendString( lua_tostring(g_lua,-1)); // SendCrlf(); lua_pop(g_lua,1); } } else{ // //handle missing function error lua_pop(g_lua,1); } unlockLua(); vTaskDelayUntil( &xLastWakeTime, xFrequency ); } }
void ReloadScript(Serial *serial, unsigned int argc, char **argv) { setShouldReloadScript(1); put_commandOK(serial); }