Improve lua API interface

This commit is contained in:
aeprox 2015-08-23 01:42:39 +02:00
parent 29ee02f680
commit 0caf745d8e
3 changed files with 38 additions and 15 deletions

View File

@ -13,7 +13,9 @@
static uint16_t ch0;
static uint16_t ch1;
/*
* Lua: error = tsl2561.init(sdapin, sclpin)
*/
static int ICACHE_FLASH_ATTR tsl2561_init(lua_State* L) {
uint32_t sda;
uint32_t scl;
@ -33,23 +35,44 @@ static int ICACHE_FLASH_ATTR tsl2561_init(lua_State* L) {
lua_pushnumber( L, error );
return 1;
}
/*
* Lua: error = tsl2561.settiming(integration, gain)
*/
static int ICACHE_FLASH_ATTR tsl2561_lua_settiming(lua_State* L) {
// check variables
if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2)) {
return luaL_error(L, "wrong arg range");
}
uint8_t integration = luaL_checkinteger(L, 1);
if(!((integration == TSL2561_INTEGRATIONTIME_13MS) ||(integration == TSL2561_INTEGRATIONTIME_101MS) || (integration == TSL2561_INTEGRATIONTIME_402MS))){
return luaL_error(L, "wrong range for arg integration");
}
uint8_t gain = luaL_checkinteger(L, 2);
if (!((gain == TSL2561_GAIN_16X) || (gain == TSL2561_GAIN_1X))){
return luaL_error(L, "wrong range for arg gain");
}
lua_pushnumber( L, tsl2561SetTiming(integration, gain) );
return 1;
}
/*
* Lua: lux, error = tsl2561.getlux()
*/
static int ICACHE_FLASH_ATTR tsl2561_lua_calclux(lua_State* L) {
lua_pushnumber( L, tsl2561CalculateLux(ch0,ch1) );
return 1;
uint8_t error = tsl2561GetLuminosity(&ch0,&ch1);
if (error){
lua_pushnumber(L, 0);
lua_pushnumber(L, error);
}
else{
lua_pushnumber(L, tsl2561CalculateLux(ch0,ch1));
lua_pushnumber(L, error);
}
return 2;
}
/*
* Lua: tsl2561.getrawchannels()
*/
static int ICACHE_FLASH_ATTR tsl2561_lua_getchannels(lua_State* L) {
uint8_t error = tsl2561GetLuminosity(&ch0,&ch1);
lua_pushnumber( L, ch0 );
@ -64,8 +87,8 @@ static int ICACHE_FLASH_ATTR tsl2561_lua_getchannels(lua_State* L) {
const LUA_REG_TYPE tsl2561_map[] =
{
{ LSTRKEY( "settiming" ), LFUNCVAL( tsl2561_lua_settiming)},
{ LSTRKEY( "calclux" ), LFUNCVAL( tsl2561_lua_calclux )},
{ LSTRKEY( "channels_raw" ), LFUNCVAL( tsl2561_lua_getchannels )},
{ LSTRKEY( "getlux" ), LFUNCVAL( tsl2561_lua_calclux )},
{ LSTRKEY( "getrawchannels" ), LFUNCVAL( tsl2561_lua_getchannels )},
{ LSTRKEY( "init" ), LFUNCVAL( tsl2561_init )},
{ LSTRKEY( "TSL2561_OK" ), LNUMVAL( TSL2561_ERROR_OK ) },
@ -74,11 +97,11 @@ const LUA_REG_TYPE tsl2561_map[] =
{ LSTRKEY( "TSL2561_ERROR_NOINIT" ), LNUMVAL( TSL2561_ERROR_NOINIT ) },
{ LSTRKEY( "TSL2561_ERROR_LAST" ), LNUMVAL( TSL2561_ERROR_LAST ) },
{ LSTRKEY( "TSL2561_INTEGRATIONTIME_13MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_13MS ) },
{ LSTRKEY( "TSL2561_INTEGRATIONTIME_101MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_101MS ) },
{ LSTRKEY( "TSL2561_INTEGRATIONTIME_402MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_402MS ) },
{ LSTRKEY( "TSL2561_GAIN_0X" ), LNUMVAL( TSL2561_GAIN_0X ) },
{ LSTRKEY( "TSL2561_GAIN_16X" ), LNUMVAL( TSL2561_GAIN_16X ) },
{ LSTRKEY( "INTEGRATIONTIME_13MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_13MS ) },
{ LSTRKEY( "INTEGRATIONTIME_101MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_101MS ) },
{ LSTRKEY( "INTEGRATIONTIME_402MS" ), LNUMVAL( TSL2561_INTEGRATIONTIME_402MS ) },
{ LSTRKEY( "GAIN_1X" ), LNUMVAL( TSL2561_GAIN_1X ) },
{ LSTRKEY( "GAIN_16X" ), LNUMVAL( TSL2561_GAIN_16X ) },
{ LNILKEY, LNILVAL}
};

View File

@ -71,7 +71,7 @@
static const uint32_t tsl2561_i2c_id = 0;
static bool _tsl2561Initialised = 0;
static tsl2561IntegrationTime_t _tsl2561IntegrationTime = TSL2561_INTEGRATIONTIME_402MS;
static tsl2561Gain_t _tsl2561Gain = TSL2561_GAIN_0X;
static tsl2561Gain_t _tsl2561Gain = TSL2561_GAIN_1X;
/**************************************************************************/

View File

@ -7,7 +7,7 @@
Software License Agreement (BSD License)
Copyright (c) 2010, microBuilder SARL/ Adapted for nodeMCU by Michael Lucas (Aeprox @github)
Copyright (c) 2010, microBuilder SARL
All rights reserved.
Redistribution and use in source and binary forms, with or without
@ -137,7 +137,7 @@ tsl2561IntegrationTime_t;
typedef enum
{
TSL2561_GAIN_0X = 0x00, // No gain
TSL2561_GAIN_1X = 0x00, // No gain
TSL2561_GAIN_16X = 0x10, // 16x gain
}
tsl2561Gain_t;