1
0
mirror of https://github.com/elua/elua.git synced 2025-01-25 01:02:54 +08:00

Bug fix: always return 0 from Lua functions

Many mizar32.lcd() Lua functions used to tail-call the i2c_send_command()
functions, whereas they should explicitly return 0, the number of return
values from the Lua function. OK, i2c_send_command did return 0 but this
will change in future when it can detect slave presence and collisions.
This commit is contained in:
Martin Guy 2012-03-19 11:45:00 +01:00
parent 49ab7be03e
commit 374a21f15e

View File

@ -131,7 +131,8 @@ static int lcd_reset( lua_State *L )
cursor_type = DEFAULT_CURSOR_TYPE;
display_is_off = 0;
return send_command( LCD_CMD_RESET );
send_command( LCD_CMD_RESET );
return 0;
}
// "Entry mode" function.
@ -144,22 +145,25 @@ static int lcd_setup( lua_State *L )
unsigned shift_display = lua_toboolean( L, 1 ); // Default: move cursor
unsigned right_to_left = lua_toboolean( L, 2 ); // Default: print left-to-right
return send_command( LCD_CMD_ENTRYMODE + shift_display +
( ! right_to_left ) * 2 );
send_command( LCD_CMD_ENTRYMODE + shift_display +
( ! right_to_left ) * 2 );
return 0;
}
// Lua: mizar32.disp.clear()
// Clear the display, reset its shiftedness and put the cursor at 1,1
static int lcd_clear( lua_State *L )
{
return send_command( LCD_CMD_CLEAR );
send_command( LCD_CMD_CLEAR );
return 0;
}
// Lua: mizar32.disp.home()
// Reset the display's shiftedness and put the cursor at 1,1
static int lcd_home( lua_State *L )
{
return send_command( LCD_CMD_HOME );
send_command( LCD_CMD_HOME );
return 0;
}
// Lua: mizar32.disp.goto( row, col )
@ -175,7 +179,8 @@ static int lcd_goto( lua_State *L )
return luaL_error( L, "row/column must be 1-2 and 1-40" );
address = ( row - 1 ) * 0x40 + ( col - 1 ) ;
return send_command( (u8) (LCD_CMD_DDADDR + address) );
send_command( (u8) (LCD_CMD_DDADDR + address) );
return 0;
}
// Lua: mizar32.disp.print( string )
@ -279,20 +284,26 @@ static int lcd_cursor( lua_State *L )
switch ( luaL_checkoption( L, 1, NULL, args ) )
{
case 0:
return set_cursor( LCD_CMD_CURSOR_NONE );
set_cursor( LCD_CMD_CURSOR_NONE );
break;
case 1:
return set_cursor( LCD_CMD_CURSOR_BLOCK );
set_cursor( LCD_CMD_CURSOR_BLOCK );
break;
case 2:
return set_cursor( LCD_CMD_CURSOR_LINE );
set_cursor( LCD_CMD_CURSOR_LINE );
break;
case 3:
return send_command( LCD_CMD_SHIFT_CURSOR_LEFT );
send_command( LCD_CMD_SHIFT_CURSOR_LEFT );
break;
case 4:
return send_command( LCD_CMD_SHIFT_CURSOR_RIGHT );
send_command( LCD_CMD_SHIFT_CURSOR_RIGHT );
break;
default: return luaL_argerror( L, 1, NULL );
default:
return luaL_argerror( L, 1, NULL );
}
return 0;
}
// Perform display operations, selected by a string parameter.
@ -304,13 +315,18 @@ static int lcd_display( lua_State *L )
switch ( luaL_checkoption( L, 1, NULL, args ) )
{
case 0: display_is_off = 1;
return send_command( LCD_CMD_DISPLAY_OFF );
send_command( LCD_CMD_DISPLAY_OFF );
break;
case 1: display_is_off = 0;
return send_command( cursor_type ); // Turns display on
case 2: return send_command( LCD_CMD_SHIFT_DISPLAY_LEFT );
case 3: return send_command( LCD_CMD_SHIFT_DISPLAY_RIGHT );
send_command( cursor_type ); // Turns display on
break;
case 2: send_command( LCD_CMD_SHIFT_DISPLAY_LEFT );
break;
case 3: send_command( LCD_CMD_SHIFT_DISPLAY_RIGHT );
break;
default: return luaL_argerror( L, 1, NULL );
}
return 0;
}
// Lua: mizar32.disp.definechar( code, glyph )
@ -352,7 +368,9 @@ static int lcd_definechar( lua_State *L ) {
send_data( data, sizeof( data ) );
// Move back to where we were
return send_command( LCD_CMD_DDADDR + old_address );
send_command( LCD_CMD_DDADDR + old_address );
return 0;
}
#define MIN_OPT_LEVEL 2