int flash_tracks(const Tracks *source, size_t rawSize) { int result = memory_flash_region((void *)&g_tracks, (void *)source, rawSize); if (result == 0) pr_info("win\r\n"); else pr_info("fail\r\n"); return result; }
enum script_add_result flashScriptPage(const unsigned int page, const char *data, const enum script_add_mode mode) { if (page >= MAX_SCRIPT_PAGES) { pr_error("lua: invalid script index\r\n"); return SCRIPT_ADD_RESULT_FAIL; } switch (mode) { case SCRIPT_ADD_MODE_IN_PROGRESS: case SCRIPT_ADD_MODE_COMPLETE: /* Valid cases. Carry on */ break; default: pr_error_int_msg("lua: Unknown script_add_mode: ", mode); return SCRIPT_ADD_RESULT_FAIL; } static ScriptConfig *g_scriptBuffer; if (NULL == g_scriptBuffer) { terminate_lua(); pr_debug("lua: Allocating new script buffer\r\n"); g_scriptBuffer = (ScriptConfig *) portMalloc(sizeof(ScriptConfig)); memcpy((void *)g_scriptBuffer, (void *)&g_scriptConfig, sizeof(ScriptConfig)); } if (NULL == g_scriptBuffer) { pr_error("lua: Failed to allocate memory for script " "buffer.\r\n"); return SCRIPT_ADD_RESULT_FAIL; } char *pageToAdd = g_scriptBuffer->script + page * SCRIPT_PAGE_SIZE; strncpy(pageToAdd, data, SCRIPT_PAGE_SIZE); if (SCRIPT_ADD_MODE_IN_PROGRESS == mode) return SCRIPT_ADD_RESULT_OK; pr_info("lua: Completed updating LUA. Flashing... "); const int rc = memory_flash_region((void*) &g_scriptConfig, (void*) g_scriptBuffer, sizeof(ScriptConfig)); portFree(g_scriptBuffer); g_scriptBuffer = NULL; if (0 != rc) { pr_info_int_msg("failed with code ", rc); return SCRIPT_ADD_RESULT_FAIL; } pr_info("win!\r\n"); initialize_lua(); return SCRIPT_ADD_RESULT_OK; }
int flash_default_script() { int result = -1; pr_info("flashing default script..."); /* * Stop LUA if we are flashing its data. This is mainly done to recover * RAM since our flashing operation is a heavy bugger */ terminate_lua(); ScriptConfig *defaultScriptConfig = (ScriptConfig *)portMalloc(sizeof(ScriptConfig)); if (defaultScriptConfig != NULL) { defaultScriptConfig->magicInit = MAGIC_NUMBER_SCRIPT_INIT; strncpy(defaultScriptConfig->script, DEFAULT_SCRIPT, sizeof(DEFAULT_SCRIPT)); result = memory_flash_region((void *)&g_scriptConfig, (void *)defaultScriptConfig, sizeof (ScriptConfig)); portFree(defaultScriptConfig); } if (result == 0) pr_info("win\r\n"); else pr_info("fail\r\n"); return result; }