mirror of
https://github.com/opentx/opentx.git
synced 2025-07-18 05:45:21 +03:00
Fixes #2084: Lua model.insertInput() could not add a line to an empty input or at the end of the existing input lines
Also added unsigned to various vars (ported from master)
This commit is contained in:
parent
ae16191e76
commit
2b8374f418
1 changed files with 54 additions and 58 deletions
|
@ -614,7 +614,7 @@ static int luaModelSetInfo(lua_State *L)
|
|||
|
||||
static int luaModelGetTimer(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < MAX_TIMERS) {
|
||||
TimerData & timer = g_model.timers[idx];
|
||||
lua_newtable(L);
|
||||
|
@ -633,7 +633,7 @@ static int luaModelGetTimer(lua_State *L)
|
|||
|
||||
static int luaModelSetTimer(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
|
||||
if (idx < MAX_TIMERS) {
|
||||
TimerData & timer = g_model.timers[idx];
|
||||
|
@ -667,47 +667,43 @@ static int luaModelSetTimer(lua_State *L)
|
|||
|
||||
static int luaModelResetTimer(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < MAX_TIMERS) {
|
||||
timerReset(idx);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getFirstInput(int chn)
|
||||
static unsigned int getFirstInput(unsigned int chn)
|
||||
{
|
||||
for (int i=0; i<MAX_INPUTS; i++) {
|
||||
for (unsigned int i=0; i<MAX_INPUTS; i++) {
|
||||
ExpoData * expo = expoAddress(i);
|
||||
if (!expo->srcRaw || expo->chn>chn) break;
|
||||
if (expo->chn == chn) {
|
||||
if (!expo->srcRaw || expo->chn >= chn) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getInputsCountFromFirst(int chn, int first)
|
||||
static unsigned int getInputsCountFromFirst(unsigned int chn, unsigned int first)
|
||||
{
|
||||
int count = 0;
|
||||
if (first >= 0) {
|
||||
for (int i=first; i<MAX_INPUTS; i++) {
|
||||
ExpoData * expo = expoAddress(i);
|
||||
if (!expo->srcRaw || expo->chn!=chn) break;
|
||||
count++;
|
||||
}
|
||||
unsigned int count = 0;
|
||||
for (unsigned int i=first; i<MAX_INPUTS; i++) {
|
||||
ExpoData * expo = expoAddress(i);
|
||||
if (!expo->srcRaw || expo->chn!=chn) break;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static int getInputsCount(int chn)
|
||||
static unsigned int getInputsCount(unsigned int chn)
|
||||
{
|
||||
int first = getFirstInput(chn);
|
||||
return getInputsCountFromFirst(chn, first);
|
||||
return getInputsCountFromFirst(chn, getFirstInput(chn));
|
||||
}
|
||||
|
||||
static int luaModelGetInputsCount(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
int count = getInputsCount(chn);
|
||||
lua_pushinteger(L, count);
|
||||
return 1;
|
||||
|
@ -715,11 +711,11 @@ static int luaModelGetInputsCount(lua_State *L)
|
|||
|
||||
static int luaModelGetInput(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
int first = getFirstInput(chn);
|
||||
int count = getInputsCountFromFirst(chn, first);
|
||||
if (first>=0 && idx<count) {
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int first = getFirstInput(chn);
|
||||
unsigned int count = getInputsCountFromFirst(chn, first);
|
||||
if (count && (idx < count)) {
|
||||
ExpoData * expo = expoAddress(first+idx);
|
||||
lua_newtable(L);
|
||||
lua_pushtablezstring(L, "name", expo->name);
|
||||
|
@ -735,15 +731,15 @@ static int luaModelGetInput(lua_State *L)
|
|||
|
||||
static int luaModelInsertInput(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
|
||||
int first = getFirstInput(chn);
|
||||
int count = getInputsCountFromFirst(chn, first);
|
||||
unsigned int first = getFirstInput(chn);
|
||||
unsigned int count = getInputsCountFromFirst(chn, first);
|
||||
|
||||
if (chn<MAX_INPUTS && getExpoMixCount(1)<MAX_INPUTS && idx<=count) {
|
||||
idx = first+idx;
|
||||
s_currCh = chn+1;
|
||||
idx = first + idx;
|
||||
s_currCh = chn + 1;
|
||||
insertExpoMix(1, idx);
|
||||
ExpoData * expo = expoAddress(idx);
|
||||
luaL_checktype(L, -1, LUA_TTABLE);
|
||||
|
@ -774,13 +770,13 @@ static int luaModelInsertInput(lua_State *L)
|
|||
|
||||
static int luaModelDeleteInput(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
|
||||
int first = getFirstInput(chn);
|
||||
int count = getInputsCountFromFirst(chn, first);
|
||||
unsigned int count = getInputsCountFromFirst(chn, first);
|
||||
|
||||
if (first>=0 && idx<count) {
|
||||
if (count && (idx < count)) {
|
||||
deleteExpoMix(1, first+idx);
|
||||
}
|
||||
|
||||
|
@ -831,7 +827,7 @@ static int getMixesCount(int chn)
|
|||
|
||||
static int luaModelGetMixesCount(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
int count = getMixesCount(chn);
|
||||
lua_pushinteger(L, count);
|
||||
return 1;
|
||||
|
@ -839,11 +835,11 @@ static int luaModelGetMixesCount(lua_State *L)
|
|||
|
||||
static int luaModelGetMix(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
int first = getFirstMix(chn);
|
||||
int count = getMixesCountFromFirst(chn, first);
|
||||
if (idx<count) {
|
||||
unsigned int count = getMixesCountFromFirst(chn, first);
|
||||
if (idx < count) {
|
||||
MixData * mix = mixAddress(first+idx);
|
||||
lua_newtable(L);
|
||||
lua_pushtablezstring(L, "name", mix->name);
|
||||
|
@ -870,11 +866,11 @@ static int luaModelGetMix(lua_State *L)
|
|||
|
||||
static int luaModelInsertMix(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
|
||||
int first = getFirstMix(chn);
|
||||
int count = getMixesCountFromFirst(chn, first);
|
||||
unsigned int count = getMixesCountFromFirst(chn, first);
|
||||
|
||||
if (chn<NUM_CHNOUT && getExpoMixCount(0)<MAX_MIXERS && idx<=count) {
|
||||
idx += first;
|
||||
|
@ -939,13 +935,13 @@ static int luaModelInsertMix(lua_State *L)
|
|||
|
||||
static int luaModelDeleteMix(lua_State *L)
|
||||
{
|
||||
int chn = luaL_checkunsigned(L, 1);
|
||||
int idx = luaL_checkunsigned(L, 2);
|
||||
unsigned int chn = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 2);
|
||||
|
||||
int first = getFirstMix(chn);
|
||||
int count = getMixesCountFromFirst(chn, first);
|
||||
unsigned int count = getMixesCountFromFirst(chn, first);
|
||||
|
||||
if (idx<count) {
|
||||
if (idx < count) {
|
||||
deleteExpoMix(0, first+idx);
|
||||
}
|
||||
|
||||
|
@ -960,7 +956,7 @@ static int luaModelDeleteMixes(lua_State *L)
|
|||
|
||||
static int luaModelGetLogicalSwitch(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_LOGICAL_SWITCH) {
|
||||
LogicalSwitchData * sw = lswAddress(idx);
|
||||
lua_newtable(L);
|
||||
|
@ -980,7 +976,7 @@ static int luaModelGetLogicalSwitch(lua_State *L)
|
|||
|
||||
static int luaModelSetLogicalSwitch(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_LOGICAL_SWITCH) {
|
||||
LogicalSwitchData * sw = lswAddress(idx);
|
||||
memclear(sw, sizeof(LogicalSwitchData));
|
||||
|
@ -1018,7 +1014,7 @@ static int luaModelSetLogicalSwitch(lua_State *L)
|
|||
|
||||
static int luaModelGetCurve(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < MAX_CURVES) {
|
||||
CurveInfo & curveInfo = g_model.curves[idx];
|
||||
lua_newtable(L);
|
||||
|
@ -1060,7 +1056,7 @@ static int luaModelGetCurve(lua_State *L)
|
|||
|
||||
static int luaModelGetCustomFunction(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_CFN) {
|
||||
CustomFunctionData * cfn = &g_model.customFn[idx];
|
||||
lua_newtable(L);
|
||||
|
@ -1084,7 +1080,7 @@ static int luaModelGetCustomFunction(lua_State *L)
|
|||
|
||||
static int luaModelSetCustomFunction(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_CFN) {
|
||||
CustomFunctionData * cfn = &g_model.customFn[idx];
|
||||
memclear(cfn, sizeof(CustomFunctionData));
|
||||
|
@ -1123,7 +1119,7 @@ static int luaModelSetCustomFunction(lua_State *L)
|
|||
|
||||
static int luaModelGetOutput(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_CHNOUT) {
|
||||
LimitData * limit = limitAddress(idx);
|
||||
lua_newtable(L);
|
||||
|
@ -1147,7 +1143,7 @@ static int luaModelGetOutput(lua_State *L)
|
|||
|
||||
static int luaModelSetOutput(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
if (idx < NUM_CHNOUT) {
|
||||
LimitData * limit = limitAddress(idx);
|
||||
luaL_checktype(L, -1, LUA_TTABLE);
|
||||
|
@ -1191,8 +1187,8 @@ static int luaModelSetOutput(lua_State *L)
|
|||
|
||||
static int luaModelGetGlobalVariable(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
int phase = luaL_checkunsigned(L, 2);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int phase = luaL_checkunsigned(L, 2);
|
||||
if (phase < MAX_FLIGHT_MODES && idx < MAX_GVARS)
|
||||
lua_pushinteger(L, g_model.flightModeData[phase].gvars[idx]);
|
||||
else
|
||||
|
@ -1202,8 +1198,8 @@ static int luaModelGetGlobalVariable(lua_State *L)
|
|||
|
||||
static int luaModelSetGlobalVariable(lua_State *L)
|
||||
{
|
||||
int idx = luaL_checkunsigned(L, 1);
|
||||
int phase = luaL_checkunsigned(L, 2);
|
||||
unsigned int idx = luaL_checkunsigned(L, 1);
|
||||
unsigned int phase = luaL_checkunsigned(L, 2);
|
||||
int value = luaL_checkinteger(L, 3);
|
||||
if (phase < MAX_FLIGHT_MODES && idx < MAX_GVARS && value >= -GVAR_MAX && value <= GVAR_MAX) {
|
||||
g_model.flightModeData[phase].gvars[idx] = value;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue