1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 00:35:18 +03:00

Lua scripts now in custom functions!

This commit is contained in:
bsongis 2014-06-12 18:18:31 +02:00
parent c23f1e974a
commit 89433127c4
17 changed files with 239 additions and 93 deletions

View file

@ -4828,19 +4828,27 @@ void menuModelLogicalSwitches(uint8_t event)
void onCustomFunctionsFileSelectionMenu(const char *result) void onCustomFunctionsFileSelectionMenu(const char *result)
{ {
int8_t sub = m_posVert - 1; int8_t sub = m_posVert - 1;
CustomFnData * cf = &g_model.funcSw[sub];
uint8_t func = CFN_FUNC(cf);
if (result == STR_UPDATE_LIST) { if (result == STR_UPDATE_LIST) {
char directory[] = SOUNDS_PATH; char directory[] = SOUNDS_PATH;
strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); if (func == FUNC_PLAY_SCRIPT)
if (!listSdFiles(directory, SOUNDS_EXT, sizeof(g_model.funcSw[sub].play.name), NULL)) { strcpy(directory, SCRIPTS_PATH);
POPUP_WARNING(STR_NO_SOUNDS_ON_SD); else
strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2);
if (!listSdFiles(directory, func==FUNC_PLAY_SCRIPT ? SCRIPTS_EXT : SOUNDS_EXT, sizeof(cf->play.name), NULL)) {
POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD);
s_menu_flags = 0; s_menu_flags = 0;
} }
} }
else { else {
// The user choosed a wav file in the list // The user choosed a file in the list
memcpy(g_model.funcSw[sub].play.name, result, sizeof(g_model.funcSw[sub].play.name)); memcpy(cf->play.name, result, sizeof(cf->play.name));
eeDirty(EE_MODEL); eeDirty(EE_MODEL);
if (func == FUNC_PLAY_SCRIPT) {
LUA_LOAD_MODEL_SCRIPTS();
}
} }
} }
#endif #endif
@ -4874,7 +4882,6 @@ void onCustomFunctionsMenu(const char *result)
eeDirty(EE_MODEL); eeDirty(EE_MODEL);
} }
} }
#endif #endif
void menuModelCustomFunctions(uint8_t event) void menuModelCustomFunctions(uint8_t event)
@ -5018,7 +5025,7 @@ void menuModelCustomFunctions(uint8_t event)
} }
#endif #endif
#if defined(CPUARM) && defined(SDCARD) #if defined(CPUARM) && defined(SDCARD)
else if (func == FUNC_PLAY_TRACK || func == FUNC_BACKGND_MUSIC) { else if (func == FUNC_PLAY_TRACK || func == FUNC_BACKGND_MUSIC || func == FUNC_PLAY_SCRIPT) {
#if LCD_W >= 212 #if LCD_W >= 212
xcoord_t x = MODEL_CUSTOM_FUNC_3RD_COLUMN; xcoord_t x = MODEL_CUSTOM_FUNC_3RD_COLUMN;
#else #else
@ -5031,12 +5038,15 @@ void menuModelCustomFunctions(uint8_t event)
if (active && event==EVT_KEY_BREAK(KEY_ENTER)) { if (active && event==EVT_KEY_BREAK(KEY_ENTER)) {
s_editMode = 0; s_editMode = 0;
char directory[] = SOUNDS_PATH; char directory[] = SOUNDS_PATH;
strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); if (func==FUNC_PLAY_SCRIPT)
if (listSdFiles(directory, SOUNDS_EXT, sizeof(sd->play.name), sd->play.name)) { strcpy(directory, SCRIPTS_PATH);
else
strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2);
if (listSdFiles(directory, func==FUNC_PLAY_SCRIPT ? SCRIPTS_EXT : SOUNDS_EXT, sizeof(sd->play.name), sd->play.name)) {
menuHandler = onCustomFunctionsFileSelectionMenu; menuHandler = onCustomFunctionsFileSelectionMenu;
} }
else { else {
POPUP_WARNING(STR_NO_SOUNDS_ON_SD); POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD);
s_menu_flags = 0; s_menu_flags = 0;
} }
} }
@ -5235,7 +5245,7 @@ void menuModelCustomScriptOne(uint8_t event)
putsStrIdx(lcdLastPos+FW, 0, "LUA", s_currIdx+1, 0); putsStrIdx(lcdLastPos+FW, 0, "LUA", s_currIdx+1, 0);
SUBMENU_NOTITLE(3+scriptInternalData[s_currIdx].inputsCount, { 0, 0, LABEL(inputs), 0/*repeated*/ }); SUBMENU_NOTITLE(3+scriptInputsOutputs[s_currIdx].inputsCount, { 0, 0, LABEL(inputs), 0/*repeated*/ });
int8_t sub = m_posVert; int8_t sub = m_posVert;
@ -5268,32 +5278,32 @@ void menuModelCustomScriptOne(uint8_t event)
else if (i == ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL) { else if (i == ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL) {
lcd_putsLeft(y, STR_INPUTS); lcd_putsLeft(y, STR_INPUTS);
} }
else if (i <= ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL+scriptInternalData[s_currIdx].inputsCount) { else if (i <= ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL+scriptInputsOutputs[s_currIdx].inputsCount) {
int inputIdx = i-ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL-1; int inputIdx = i-ITEM_MODEL_CUSTOMSCRIPT_PARAMS_LABEL-1;
lcd_putsnAtt(INDENT_WIDTH, y, scriptInternalData[s_currIdx].inputs[inputIdx].name, 10, 0); lcd_putsnAtt(INDENT_WIDTH, y, scriptInputsOutputs[s_currIdx].inputs[inputIdx].name, 10, 0);
if (scriptInternalData[s_currIdx].inputs[inputIdx].type == 0) { if (scriptInputsOutputs[s_currIdx].inputs[inputIdx].type == 0) {
lcd_outdezAtt(SCRIPT_ONE_2ND_COLUMN_POS, y, g_model.scriptsData[s_currIdx].inputs[inputIdx]+scriptInternalData[s_currIdx].inputs[inputIdx].def, attr|LEFT); lcd_outdezAtt(SCRIPT_ONE_2ND_COLUMN_POS, y, g_model.scriptsData[s_currIdx].inputs[inputIdx]+scriptInputsOutputs[s_currIdx].inputs[inputIdx].def, attr|LEFT);
if (attr) { if (attr) {
CHECK_INCDEC_MODELVAR(event, g_model.scriptsData[s_currIdx].inputs[inputIdx], scriptInternalData[s_currIdx].inputs[inputIdx].min-scriptInternalData[s_currIdx].inputs[inputIdx].def, scriptInternalData[s_currIdx].inputs[inputIdx].max-scriptInternalData[s_currIdx].inputs[inputIdx].def); CHECK_INCDEC_MODELVAR(event, g_model.scriptsData[s_currIdx].inputs[inputIdx], scriptInputsOutputs[s_currIdx].inputs[inputIdx].min-scriptInputsOutputs[s_currIdx].inputs[inputIdx].def, scriptInputsOutputs[s_currIdx].inputs[inputIdx].max-scriptInputsOutputs[s_currIdx].inputs[inputIdx].def);
} }
} }
else { else {
putsMixerSource(SCRIPT_ONE_2ND_COLUMN_POS, y, g_model.scriptsData[s_currIdx].inputs[inputIdx]+scriptInternalData[s_currIdx].inputs[inputIdx].def, attr); putsMixerSource(SCRIPT_ONE_2ND_COLUMN_POS, y, g_model.scriptsData[s_currIdx].inputs[inputIdx]+scriptInputsOutputs[s_currIdx].inputs[inputIdx].def, attr);
if (attr) { if (attr) {
uint8_t *source = (uint8_t *)&g_model.scriptsData[s_currIdx].inputs[inputIdx]; uint8_t *source = (uint8_t *)&g_model.scriptsData[s_currIdx].inputs[inputIdx];
CHECK_INCDEC_MODELSOURCE(event, *source, scriptInternalData[s_currIdx].inputs[inputIdx].min-scriptInternalData[s_currIdx].inputs[inputIdx].def, scriptInternalData[s_currIdx].inputs[inputIdx].max-scriptInternalData[s_currIdx].inputs[inputIdx].def); CHECK_INCDEC_MODELSOURCE(event, *source, scriptInputsOutputs[s_currIdx].inputs[inputIdx].min-scriptInputsOutputs[s_currIdx].inputs[inputIdx].def, scriptInputsOutputs[s_currIdx].inputs[inputIdx].max-scriptInputsOutputs[s_currIdx].inputs[inputIdx].def);
} }
} }
} }
} }
if (scriptInternalData[s_currIdx].outputsCount > 0) { if (scriptInputsOutputs[s_currIdx].outputsCount > 0) {
lcd_vline(SCRIPT_ONE_3RD_COLUMN_POS-4, FH+1, LCD_H-FH-1); lcd_vline(SCRIPT_ONE_3RD_COLUMN_POS-4, FH+1, LCD_H-FH-1);
lcd_puts(SCRIPT_ONE_3RD_COLUMN_POS, FH+1, STR_OUTPUTS); lcd_puts(SCRIPT_ONE_3RD_COLUMN_POS, FH+1, STR_OUTPUTS);
for (int i=0; i<scriptInternalData[s_currIdx].outputsCount; i++) { for (int i=0; i<scriptInputsOutputs[s_currIdx].outputsCount; i++) {
putsMixerSource(SCRIPT_ONE_3RD_COLUMN_POS+INDENT_WIDTH, FH+1+FH+i*FH, MIXSRC_FIRST_LUA+(s_currIdx*MAX_SCRIPT_OUTPUTS)+i, 0); putsMixerSource(SCRIPT_ONE_3RD_COLUMN_POS+INDENT_WIDTH, FH+1+FH+i*FH, MIXSRC_FIRST_LUA+(s_currIdx*MAX_SCRIPT_OUTPUTS)+i, 0);
lcd_outdezNAtt(SCRIPT_ONE_3RD_COLUMN_POS+11*FW+3, FH+1+FH+i*FH, calcRESXto1000(scriptInternalData[s_currIdx].outputs[i].value), PREC1); lcd_outdezNAtt(SCRIPT_ONE_3RD_COLUMN_POS+11*FW+3, FH+1+FH+i*FH, calcRESXto1000(scriptInputsOutputs[s_currIdx].outputs[i].value), PREC1);
} }
} }
} }
@ -5320,7 +5330,7 @@ void menuModelCustomScripts(uint8_t event)
break; break;
} }
for (int i=0; i<MAX_SCRIPTS; i++) { for (int i=0, scriptIndex=0; i<MAX_SCRIPTS; i++) {
y = 1 + (i+1)*FH; y = 1 + (i+1)*FH;
ScriptData &sd = g_model.scriptsData[i]; ScriptData &sd = g_model.scriptsData[i];
@ -5331,7 +5341,7 @@ void menuModelCustomScripts(uint8_t event)
// LUA script // LUA script
if (ZEXIST(sd.file)) { if (ZEXIST(sd.file)) {
lcd_putsnAtt(5*FW, y, sd.file, sizeof(sd.file), 0); lcd_putsnAtt(5*FW, y, sd.file, sizeof(sd.file), 0);
switch (scriptInternalData[i].state) { switch (scriptInternalData[scriptIndex].state) {
case SCRIPT_SYNTAX_ERROR: case SCRIPT_SYNTAX_ERROR:
lcd_puts(28*FW+2, y, "(error)"); lcd_puts(28*FW+2, y, "(error)");
break; break;
@ -5342,12 +5352,13 @@ void menuModelCustomScripts(uint8_t event)
lcd_puts(29*FW+2, y, "(leak)"); lcd_puts(29*FW+2, y, "(leak)");
break; break;
default: default:
lcd_outdezAtt(31*FW, y, luaGetCpuUsed(i)); lcd_outdezAtt(31*FW, y, luaGetCpuUsed(scriptIndex));
lcd_putc(31*FW, y, '%'); lcd_putc(31*FW, y, '%');
lcd_outdezAtt(34*FW+2, y, luaGetMemUsed(i)); lcd_outdezAtt(34*FW+2, y, luaGetMemUsed(scriptIndex));
lcd_putc(34*FW+2, y, 'k'); lcd_putc(34*FW+2, y, 'k');
break; break;
} }
scriptIndex++;
} }
else { else {
lcd_putsiAtt(5*FW, y, STR_VCSWFUNC, 0, 0); lcd_putsiAtt(5*FW, y, STR_VCSWFUNC, 0, 0);

View file

@ -341,16 +341,11 @@ uint8_t scrollbar_X = LCD_W-1;
#if defined(CPUARM) #if defined(CPUARM)
bool modelHasNotes() bool modelHasNotes()
{ {
FILINFO info;
TCHAR lfn[_MAX_LFN + 1];
info.lfname = lfn;
info.lfsize = sizeof(lfn);
char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/"; char filename[sizeof(MODELS_PATH)+1+sizeof(g_model.header.name)+sizeof(TEXT_EXT)] = MODELS_PATH "/";
char *buf = strcat_modelname(&filename[sizeof(MODELS_PATH)], g_eeGeneral.currModel); char *buf = strcat_modelname(&filename[sizeof(MODELS_PATH)], g_eeGeneral.currModel);
strcpy(buf, TEXT_EXT); strcpy(buf, TEXT_EXT);
return (f_stat(filename, &info) == FR_OK); return isFileAvailable(filename);
} }
void pushModelNotes() void pushModelNotes()
@ -1391,7 +1386,7 @@ bool isSourceAvailable(int source)
#if defined(LUA_MODEL_SCRIPTS) #if defined(LUA_MODEL_SCRIPTS)
if (source>=MIXSRC_FIRST_LUA && source<=MIXSRC_LAST_LUA) { if (source>=MIXSRC_FIRST_LUA && source<=MIXSRC_LAST_LUA) {
div_t qr = div(source-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS); div_t qr = div(source-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS);
return (scriptInternalData[qr.quot].state==SCRIPT_OK && qr.rem<scriptInternalData[qr.quot].outputsCount); return (qr.rem<scriptInputsOutputs[qr.quot].outputsCount);
} }
#elif defined(PCBTARANIS) #elif defined(PCBTARANIS)
if (source>=MIXSRC_FIRST_LUA && source<=MIXSRC_LAST_LUA) if (source>=MIXSRC_FIRST_LUA && source<=MIXSRC_LAST_LUA)
@ -1568,7 +1563,9 @@ bool isAssignableFunctionAvailable(int function)
case FUNC_RESERVE1: case FUNC_RESERVE1:
case FUNC_RESERVE2: case FUNC_RESERVE2:
case FUNC_RESERVE3: case FUNC_RESERVE3:
case FUNC_RESERVE4: #if !defined(LUA)
case FUNC_PLAY_SCRIPT:
#endif
case FUNC_RESERVE5: case FUNC_RESERVE5:
return false; return false;

View file

@ -976,10 +976,10 @@ void putsMixerSource(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags att)
else if (idx <= MIXSRC_LAST_LUA) { else if (idx <= MIXSRC_LAST_LUA) {
div_t qr = div(idx-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS); div_t qr = div(idx-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS);
#if defined(LUA_MODEL_SCRIPTS) #if defined(LUA_MODEL_SCRIPTS)
if (qr.quot < MAX_SCRIPTS && qr.rem < scriptInternalData[qr.quot].outputsCount) { if (qr.quot < MAX_SCRIPTS && qr.rem < scriptInputsOutputs[qr.quot].outputsCount) {
lcd_putcAtt(x+2, y+1, '1'+qr.quot, TINSIZE); lcd_putcAtt(x+2, y+1, '1'+qr.quot, TINSIZE);
lcd_filled_rect(x, y, 7, 7); lcd_filled_rect(x, y, 7, 7);
lcd_putsnAtt(x+8, y, scriptInternalData[qr.quot].outputs[qr.rem].name, att & STREXPANDED ? 9 : 4, att); lcd_putsnAtt(x+8, y, scriptInputsOutputs[qr.quot].outputs[qr.rem].name, att & STREXPANDED ? 9 : 4, att);
} }
else else
#endif #endif

View file

@ -58,7 +58,9 @@ extern "C" {
lua_State *L = NULL; lua_State *L = NULL;
uint8_t luaState = 0; uint8_t luaState = 0;
uint8_t luaScriptsCount = 0;
ScriptInternalData scriptInternalData[MAX_SCRIPTS] = { { SCRIPT_NOFILE, 0 } }; ScriptInternalData scriptInternalData[MAX_SCRIPTS] = { { SCRIPT_NOFILE, 0 } };
ScriptInputsOutputs scriptInputsOutputs[MAX_SCRIPTS] = { 0 };
ScriptInternalData standaloneScript = { SCRIPT_NOFILE, 0 }; ScriptInternalData standaloneScript = { SCRIPT_NOFILE, 0 };
uint16_t maxLuaInterval = 0; uint16_t maxLuaInterval = 0;
uint16_t maxLuaDuration = 0; uint16_t maxLuaDuration = 0;
@ -915,7 +917,7 @@ static int luaDefaultChannel(lua_State *L)
return 1; return 1;
} }
int luaGetInputs(ScriptInternalData & sid) int luaGetInputs(ScriptInputsOutputs & sid)
{ {
if (!lua_istable(L, -1)) if (!lua_istable(L, -1))
return -1; return -1;
@ -969,7 +971,7 @@ int luaGetInputs(ScriptInternalData & sid)
return 0; return 0;
} }
int luaGetOutputs(ScriptInternalData & sid) int luaGetOutputs(ScriptInputsOutputs & sid)
{ {
if (!lua_istable(L, -1)) if (!lua_istable(L, -1))
return -1; return -1;
@ -1107,7 +1109,7 @@ void luaFree(ScriptInternalData & sid)
} }
} }
int luaLoad(const char *filename, ScriptInternalData & sid) int luaLoad(const char *filename, ScriptInternalData & sid, ScriptInputsOutputs * sio=NULL)
{ {
int init = 0; int init = 0;
@ -1136,11 +1138,11 @@ int luaLoad(const char *filename, ScriptInternalData & sid)
sid.run = luaL_ref(L, LUA_REGISTRYINDEX); sid.run = luaL_ref(L, LUA_REGISTRYINDEX);
lua_pushnil(L); lua_pushnil(L);
} }
else if (!strcmp(key, "input")) { else if (sio && !strcmp(key, "input")) {
luaGetInputs(sid); luaGetInputs(*sio);
} }
else if (!strcmp(key, "output")) { else if (sio && !strcmp(key, "output")) {
luaGetOutputs(sid); luaGetOutputs(*sio);
} }
} }
@ -1170,26 +1172,65 @@ int luaLoad(const char *filename, ScriptInternalData & sid)
void luaLoadModelScript(uint8_t index) void luaLoadModelScript(uint8_t index)
{ {
ScriptData & sd = g_model.scriptsData[index]; ScriptData & sd = g_model.scriptsData[index];
ScriptInternalData & sid = scriptInternalData[index];
memset(&sid, 0, sizeof(sid));
sid.state = SCRIPT_NOFILE;
if (ZEXIST(sd.file)) { if (ZEXIST(sd.file)) {
ScriptInternalData & sid = scriptInternalData[luaScriptsCount++];
ScriptInputsOutputs * sio = &scriptInputsOutputs[index];
memset(&sid, 0, sizeof(sid));
sid.reference = SCRIPT_MIX_FIRST+index;
sid.state = SCRIPT_NOFILE;
char filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)+sizeof(SCRIPTS_EXT)] = SCRIPTS_PATH "/"; char filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)+sizeof(SCRIPTS_EXT)] = SCRIPTS_PATH "/";
strncpy(filename+sizeof(SCRIPTS_PATH), sd.file, sizeof(sd.file)); strncpy(filename+sizeof(SCRIPTS_PATH), sd.file, sizeof(sd.file));
filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)] = '\0'; filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)] = '\0';
strcat(filename+sizeof(SCRIPTS_PATH), SCRIPTS_EXT); strcat(filename+sizeof(SCRIPTS_PATH), SCRIPTS_EXT);
luaLoad(filename, sid); luaLoad(filename, sid, sio);
} }
} }
bool luaLoadFunctionScript(uint8_t index)
{
CustomFnData & fn = g_model.funcSw[index];
if (fn.func == FUNC_PLAY_SCRIPT && ZEXIST(fn.play.name)) {
if (luaScriptsCount < MAX_SCRIPTS) {
ScriptInternalData & sid = scriptInternalData[luaScriptsCount++];
memset(&sid, 0, sizeof(sid));
sid.reference = SCRIPT_FUNC_FIRST+index;
sid.state = SCRIPT_NOFILE;
char filename[sizeof(SCRIPTS_PATH)+sizeof(fn.play.name)+sizeof(SCRIPTS_EXT)] = SCRIPTS_PATH "/";
strncpy(filename+sizeof(SCRIPTS_PATH), fn.play.name, sizeof(fn.play.name));
filename[sizeof(SCRIPTS_PATH)+sizeof(fn.play.name)] = '\0';
strcat(filename+sizeof(SCRIPTS_PATH), SCRIPTS_EXT);
luaLoad(filename, sid);
}
else {
return false;
}
}
return true;
}
void luaLoadModelScripts() void luaLoadModelScripts()
{ {
luaScriptsCount = 0;
// Load model scripts // Load model scripts
for (int i=0; i<MAX_SCRIPTS; i++) { for (int i=0; i<MAX_SCRIPTS; i++) {
luaLoadModelScript(i); luaLoadModelScript(i);
} }
// Load custom function scripts
for (int i=0; i<NUM_CFN; i++) {
if (!luaLoadFunctionScript(i)) {
POPUP_WARNING("Too many Lua scripts!"); // TODO translation
break;
}
}
#if 0
// Load telemetry screen script
#endif
} }
char lua_warning_str[WARNING_LINE_LEN+1]; char lua_warning_str[WARNING_LINE_LEN+1];
@ -1333,37 +1374,60 @@ void luaTask(uint8_t evt)
luaLoadModelScripts(); luaLoadModelScripts();
} }
for (int i=0; i<MAX_SCRIPTS; i++) { for (int i=0; i<luaScriptsCount; i++) {
ScriptData & sd = g_model.scriptsData[i];
ScriptInternalData & sid = scriptInternalData[i]; ScriptInternalData & sid = scriptInternalData[i];
if (sid.state == SCRIPT_OK) { if (sid.state == SCRIPT_OK) {
uint8_t prev_mem = lua_gc(L, LUA_GCCOUNT, 0); uint8_t prev_mem = lua_gc(L, LUA_GCCOUNT, 0);
SET_LUA_INSTRUCTIONS_COUNT(PERMANENT_SCRIPTS_MAX_INSTRUCTIONS); SET_LUA_INSTRUCTIONS_COUNT(PERMANENT_SCRIPTS_MAX_INSTRUCTIONS);
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run); const char *filename;
for (int j=0; j<sid.inputsCount; j++) { ScriptInputsOutputs * sio = NULL;
if (sid.inputs[j].type == 1) if (sid.reference >= SCRIPT_MIX_FIRST && sid.reference <= SCRIPT_MIX_LAST) {
luaGetValueAndPush((uint8_t)sd.inputs[j]); ScriptData & sd = g_model.scriptsData[sid.reference-SCRIPT_MIX_FIRST];
else sio = &scriptInputsOutputs[sid.reference-SCRIPT_MIX_FIRST];
lua_pushinteger(L, sd.inputs[j] + sid.inputs[j].def); filename = sd.file;
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run);
for (int j=0; j<sio->inputsCount; j++) {
if (sio->inputs[j].type == 1)
luaGetValueAndPush((uint8_t)sd.inputs[j]);
else
lua_pushinteger(L, sd.inputs[j] + sio->inputs[j].def);
}
} }
if (lua_pcall(L, sid.inputsCount, sid.outputsCount, 0) == 0) { else if (sid.reference >= SCRIPT_FUNC_FIRST && sid.reference <= SCRIPT_FUNC_LAST) {
for (int j=sid.outputsCount-1; j>=0; j--) { CustomFnData & fn = g_model.funcSw[sid.reference-SCRIPT_FUNC_FIRST];
if (!lua_isnumber(L, -1)) { if (!getSwitch(fn.swtch)) {
sid.state = (instructionsPercent > 100 ? SCRIPT_KILLED : SCRIPT_SYNTAX_ERROR); continue;
TRACE("Script %10s disabled", sd.file); }
break; filename = fn.play.name;
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run);
}
#if 0
else {
// SCRIPT_TELEMETRY_SCREEN
filename = "telem";
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run);
}
#endif
if (lua_pcall(L, sio ? sio->inputsCount : 0, sio ? sio->outputsCount : 0, 0) == 0) {
if (sio) {
for (int j=sio->outputsCount-1; j>=0; j--) {
if (!lua_isnumber(L, -1)) {
sid.state = (instructionsPercent > 100 ? SCRIPT_KILLED : SCRIPT_SYNTAX_ERROR);
TRACE("Script %8s disabled", filename);
break;
}
sio->outputs[j].value = lua_tointeger(L, -1);
lua_pop(L, 1);
} }
sid.outputs[j].value = lua_tointeger(L, -1);
lua_pop(L, 1);
} }
} }
else { else {
if (instructionsPercent > 100) { if (instructionsPercent > 100) {
TRACE("Script %10s killed", sd.file); TRACE("Script %8s killed", filename);
sid.state = SCRIPT_KILLED; sid.state = SCRIPT_KILLED;
} }
else { else {
TRACE("Script %10s error: %s", sd.file, lua_tostring(L, -1)); TRACE("Script %8s error: %s", filename, lua_tostring(L, -1));
sid.state = SCRIPT_SYNTAX_ERROR; sid.state = SCRIPT_SYNTAX_ERROR;
} }
} }
@ -1392,6 +1456,7 @@ void luaTask(uint8_t evt)
if (max_idx >= 0) { if (max_idx >= 0) {
ScriptInternalData & sid = scriptInternalData[max_idx]; ScriptInternalData & sid = scriptInternalData[max_idx];
TRACE("Script %d killed", max_idx); TRACE("Script %d killed", max_idx);
// TODO Global Warning
sid.state = SCRIPT_LEAK; sid.state = SCRIPT_LEAK;
luaFree(sid); luaFree(sid);
} }

View file

@ -267,7 +267,7 @@ getvalue_t getValue(uint8_t i)
else if (i<MIXSRC_LAST_LUA) { else if (i<MIXSRC_LAST_LUA) {
#if defined(LUA_MODEL_SCRIPTS) #if defined(LUA_MODEL_SCRIPTS)
div_t qr = div(i-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS); div_t qr = div(i-MIXSRC_FIRST_LUA, MAX_SCRIPT_OUTPUTS);
return scriptInternalData[qr.quot].outputs[qr.rem].value; return scriptInputsOutputs[qr.quot].outputs[qr.rem].value;
#else #else
return 0; return 0;
#endif #endif

View file

@ -824,7 +824,7 @@ enum Functions {
FUNC_PLAY_VALUE, FUNC_PLAY_VALUE,
#if defined(CPUARM) #if defined(CPUARM)
FUNC_PLAY_DIFF, FUNC_PLAY_DIFF,
FUNC_RESERVE4, FUNC_PLAY_SCRIPT,
FUNC_RESERVE5, FUNC_RESERVE5,
FUNC_BACKGND_MUSIC, FUNC_BACKGND_MUSIC,
FUNC_BACKGND_MUSIC_PAUSE, FUNC_BACKGND_MUSIC_PAUSE,

View file

@ -1018,6 +1018,7 @@ void generalDefault();
void modelDefault(uint8_t id); void modelDefault(uint8_t id);
#if defined(CPUARM) #if defined(CPUARM)
bool isFileAvailable(const char * filename);
void checkModelIdUnique(uint8_t id); void checkModelIdUnique(uint8_t id);
#endif #endif
@ -1450,11 +1451,21 @@ enum AUDIO_SOUNDS {
SCRIPT_KILLED, SCRIPT_KILLED,
SCRIPT_LEAK SCRIPT_LEAK
}; };
enum ScriptReference {
SCRIPT_MIX_FIRST,
SCRIPT_MIX_LAST=SCRIPT_MIX_FIRST+MAX_SCRIPTS-1,
SCRIPT_FUNC_FIRST,
SCRIPT_FUNC_LAST=SCRIPT_FUNC_FIRST+MAX_SCRIPTS-1,
SCRIPT_TELEMETRY_SCREEN,
};
struct ScriptInternalData { struct ScriptInternalData {
uint8_t reference;
uint8_t state; uint8_t state;
int run; int run;
uint8_t instructions; uint8_t instructions;
uint8_t memory; uint8_t memory;
};
struct ScriptInputsOutputs {
uint8_t inputsCount; uint8_t inputsCount;
ScriptInput inputs[MAX_SCRIPT_INPUTS]; ScriptInput inputs[MAX_SCRIPT_INPUTS];
uint8_t outputsCount; uint8_t outputsCount;
@ -1463,8 +1474,10 @@ enum AUDIO_SOUNDS {
#define LUASTATE_STANDALONE_SCRIPT_RUNNING 1 #define LUASTATE_STANDALONE_SCRIPT_RUNNING 1
#define LUASTATE_RELOAD_MODEL_SCRIPTS 2 #define LUASTATE_RELOAD_MODEL_SCRIPTS 2
extern uint8_t luaState; extern uint8_t luaState;
extern ScriptInternalData scriptInternalData[MAX_SCRIPTS]; extern uint8_t luaScriptsCount;
extern ScriptInternalData standaloneScript; extern ScriptInternalData standaloneScript;
extern ScriptInternalData scriptInternalData[MAX_SCRIPTS];
extern ScriptInputsOutputs scriptInputsOutputs[MAX_SCRIPTS];
void luaInit(); void luaInit();
void luaTask(uint8_t evt); void luaTask(uint8_t evt);
void luaExec(const char *filename); void luaExec(const char *filename);

View file

@ -249,8 +249,14 @@
#define TR_ADJUST_GVAR "[AdjustGV]\0" #define TR_ADJUST_GVAR "[AdjustGV]\0"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_TEST "Test\0 " #define TR_CFN_PLAY_SCRIPT "Lua Script "
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0 "
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
#endif #endif
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[rezerva]\0 " #define TR_CFN_RESERVE "[rezerva]\0 "
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Zámek \0 ""Trenér \0 ""Insta-Trim\0""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Hlasitost\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_CFN_TEST #define TR_VFSWFUNC "Zámek \0 ""Trenér \0 ""Insta-Trim\0""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Hlasitost\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Zámek \0 ""Trenér \0 ""Insta-Trim\0""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_CFN_TEST #define TR_VFSWFUNC "Zámek \0 ""Trenér \0 ""Insta-Trim\0""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[AdjustGV]" #define TR_ADJUST_GVAR "[AdjustGV]"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[Reserve]\0" #define TR_CFN_RESERVE "[Reserve]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[AdjustGV]" #define TR_ADJUST_GVAR "[AdjustGV]"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0" #define TR_CFN_RESERVE "[reserve]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST
#else #else

View file

@ -243,13 +243,19 @@
#define TR_SDCLOGS "[SD Logs]\0" #define TR_SDCLOGS "[SD Logs]\0"
#endif #endif
#ifdef GVARS #if defined(GVARS)
#define TR_ADJUST_GVAR "Ajuste\0 " #define TR_ADJUST_GVAR "Ajuste\0 "
#else #else
#define TR_ADJUST_GVAR "[AdjustGV]" #define TR_ADJUST_GVAR "[AdjustGV]"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0" #define TR_CFN_RESERVE "[reserve]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volumen\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_CFN_TEST #define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volumen\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_CFN_TEST #define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[AdjustGV]" #define TR_ADJUST_GVAR "[AdjustGV]"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0" #define TR_CFN_RESERVE "[reserve]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[AjusteGV]\0 " #define TR_ADJUST_GVAR "[AjusteGV]\0 "
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Script Lua\0 "
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0 " #define TR_CFN_TEST "Test\0 "
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0 " #define TR_CFN_RESERVE "[reserve]\0 "
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Sécur.\0 ""Ecolage\0 ""Trim instant.""Remise à 0\0 ""Déf.\0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_CFN_TEST #define TR_VFSWFUNC "Sécur.\0 ""Ecolage\0 ""Trim instant.""Remise à 0\0 ""Déf.\0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Sécur.\0 ""Ecolage\0 ""Trim instant.""Remise à 0\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_CFN_TEST #define TR_VFSWFUNC "Sécur.\0 ""Ecolage\0 ""Trim instant.""Remise à 0\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[RegolaVG]\0 " #define TR_ADJUST_GVAR "[RegolaVG]\0 "
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script\0 "
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0 " #define TR_CFN_TEST "Test\0 "
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[riserva] \0" #define TR_CFN_RESERVE "[riserva] \0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Blocco\0 ""Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_CFN_TEST #define TR_VFSWFUNC "Blocco\0 ""Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Blocco\0 ""Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_CFN_TEST #define TR_VFSWFUNC "Blocco\0 ""Maestro \0 ""Trim Instant.""Azzera\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[UstawZG] " #define TR_ADJUST_GVAR "[UstawZG] "
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[rezerwa]\0" #define TR_CFN_RESERVE "[rezerwa]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Bezp.\0 ""Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_CFN_TEST #define TR_VFSWFUNC "Bezp.\0 ""Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Bezp.\0 ""Trener \0 ""Inst-Trim ""Resetuj\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_CFN_TEST #define TR_VFSWFUNC "Bezp.\0 ""Trener \0 ""Inst-Trim ""Resetuj\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_CFN_TEST
#else #else

View file

@ -249,8 +249,14 @@
#define TR_ADJUST_GVAR "[AdjustGV]\0 " #define TR_ADJUST_GVAR "[AdjustGV]\0 "
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_TEST "Teste\0 " #define TR_CFN_PLAY_SCRIPT "Lua Script\0 "
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Teste\0 "
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
#endif #endif
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0 " #define TR_CFN_RESERVE "[reserve]\0 "
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_CFN_TEST #define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_CFN_TEST #define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_CFN_TEST
#else #else

View file

@ -249,7 +249,13 @@
#define TR_ADJUST_GVAR "[Just. GV]" #define TR_ADJUST_GVAR "[Just. GV]"
#endif #endif
#ifdef DEBUG #if defined(LUA)
#define TR_CFN_PLAY_SCRIPT "Lua Script"
#else
#define TR_CFN_PLAY_SCRIPT "[Lua]\0 "
#endif
#if defined(DEBUG)
#define TR_CFN_TEST "Test\0" #define TR_CFN_TEST "Test\0"
#else #else
#define TR_CFN_TEST #define TR_CFN_TEST
@ -258,7 +264,7 @@
#define TR_CFN_RESERVE "[reserve]\0" #define TR_CFN_RESERVE "[reserve]\0"
#if defined(CPUARM) #if defined(CPUARM)
#define TR_VFSWFUNC "Säkra \0 ""Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_CFN_TEST #define TR_VFSWFUNC "Säkra \0 ""Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_PLAY_SCRIPT TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_CFN_TEST
#elif defined(PCBGRUVIN9X) #elif defined(PCBGRUVIN9X)
#define TR_VFSWFUNC "Säkra \0 ""Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_CFN_TEST #define TR_VFSWFUNC "Säkra \0 ""Trainer \0 ""Sätt Trim\0""Nollställ\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_CFN_TEST
#else #else