Fork of Tangara with customizations
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tangara-fw/lib/esp-idf-lua/examples/vfs/main/main.c

95 lines
2.0 KiB

#include <stdio.h>
#include <inttypes.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <string.h>
#include <stdbool.h>
#include <lua/lua.h>
#include <lua/lauxlib.h>
#include <lua/lualib.h>
#include <esp_spiffs.h>
#include <esp_err.h>
#include <esp_log.h>
static const char *TAG = "LUA-VFS";
static void report(lua_State *L, int status)
{
if (status == LUA_OK) return;
const char *msg = lua_tostring(L, -1);
printf("%s\n", msg);
lua_pop(L, 1);
}
static void halt()
{
ESP_LOGE(TAG, "System halted");
while (1)
vTaskDelay(1000);
}
static void mount_fs()
{
esp_vfs_spiffs_conf_t conf = {
.base_path = "/lua",
.partition_label = NULL,
.max_files = 5,
.format_if_mount_failed = false
};
esp_err_t ret = esp_vfs_spiffs_register(&conf);
switch (ret)
{
case ESP_OK:
break;
case ESP_FAIL:
ESP_LOGE(TAG, "Failed to mount or format filesystem");
halt();
break;
case ESP_ERR_NOT_FOUND:
ESP_LOGE(TAG, "Failed to find SPIFFS partition");
halt();
break;
default:
ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
halt();
}
size_t total = 0, used = 0;
ESP_ERROR_CHECK(esp_spiffs_info(NULL, &total, &used));
ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
}
void test(void *arg)
{
mount_fs();
lua_State *L = luaL_newstate();
ESP_ERROR_CHECK(L ? ESP_OK : ESP_FAIL);
luaL_openlibs(L);
int r = luaL_loadfilex(L, "/lua/main.lua", NULL);
if (r != LUA_OK)
printf("Failed to execute /lua/main.lua\n");
else
r = lua_pcall(L, 0, LUA_MULTRET, 0);
report(L, r);
lua_close(L);
printf("State closed, heap: %" PRIu32 "\n", xPortGetFreeHeapSize());
while (1)
{
printf(".");
fflush(stdout);
vTaskDelay(100);
}
}
void app_main()
{
xTaskCreate(test, "test", 0x10000, NULL, 5, NULL);
}