2014-12-22 12:35:05 +01:00
// Module for interfacing with GPIO
2016-06-16 20:33:26 +02:00
//#define NODE_DEBUG
2014-12-22 12:35:05 +01:00
2015-12-16 06:04:58 +01:00
# include "module.h"
2014-12-22 12:35:05 +01:00
# include "lauxlib.h"
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
# include "lmem.h"
2015-12-12 04:27:31 +01:00
# include "platform.h"
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
# include "user_interface.h"
2014-12-22 12:35:05 +01:00
# include "c_types.h"
# include "c_string.h"
2016-02-26 15:07:06 +01:00
# include "gpio.h"
2016-06-16 20:33:26 +02:00
# include "hw_timer.h"
2014-12-22 12:35:05 +01:00
# define PULLUP PLATFORM_GPIO_PULLUP
# define FLOAT PLATFORM_GPIO_FLOAT
# define OUTPUT PLATFORM_GPIO_OUTPUT
2016-03-10 22:55:44 +01:00
# define OPENDRAIN PLATFORM_GPIO_OPENDRAIN
2014-12-22 12:35:05 +01:00
# define INPUT PLATFORM_GPIO_INPUT
# define INTERRUPT PLATFORM_GPIO_INT
# define HIGH PLATFORM_GPIO_HIGH
# define LOW PLATFORM_GPIO_LOW
# ifdef GPIO_INTERRUPT_ENABLE
2016-02-26 15:07:06 +01:00
// We also know that the non-level interrupt types are < LOLEVEL, and that
// HILEVEL is > LOLEVEL. Since this is burned into the hardware it is not
// going to change.
# define INTERRUPT_TYPE_IS_LEVEL(x) ((x) >= GPIO_PIN_INTR_LOLEVEL)
2014-12-22 12:35:05 +01:00
static int gpio_cb_ref [ GPIO_PIN_NUM ] ;
2016-02-24 03:17:22 +01:00
// This task is scheduled by the ISR and is used
// to initiate the Lua-land gpio.trig() callback function
// It also re-enables the pin interrupt, so that we get another callback queued
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
static void gpio_intr_callback_task ( task_param_t param , uint8 priority )
2014-12-22 12:35:05 +01:00
{
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
unsigned pin = param > > 1 ;
unsigned level = param & 1 ;
UNUSED ( priority ) ;
2014-12-22 12:35:05 +01:00
NODE_DBG ( " pin:%d, level:%d \n " , pin , level ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
if ( gpio_cb_ref [ pin ] ! = LUA_NOREF ) {
// GPIO callbacks are run in L0 and inlcude the level as a parameter
lua_State * L = lua_getstate ( ) ;
NODE_DBG ( " Calling: %08x \n " , gpio_cb_ref [ pin ] ) ;
2016-02-24 03:17:22 +01:00
//
2016-02-26 15:07:06 +01:00
if ( ! INTERRUPT_TYPE_IS_LEVEL ( pin_int_type [ pin ] ) ) {
2016-02-24 03:17:22 +01:00
// Edge triggered -- re-enable the interrupt
platform_gpio_intr_init ( pin , pin_int_type [ pin ] ) ;
}
// Do the actual callback
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
lua_rawgeti ( L , LUA_REGISTRYINDEX , gpio_cb_ref [ pin ] ) ;
lua_pushinteger ( L , level ) ;
lua_call ( L , 1 , 0 ) ;
2016-02-24 03:17:22 +01:00
2016-02-26 15:07:06 +01:00
if ( INTERRUPT_TYPE_IS_LEVEL ( pin_int_type [ pin ] ) ) {
2016-02-24 03:17:22 +01:00
// Level triggered -- re-enable the callback
platform_gpio_intr_init ( pin , pin_int_type [ pin ] ) ;
}
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
}
2014-12-22 12:35:05 +01:00
}
// Lua: trig( pin, type, function )
2015-01-05 03:09:51 +01:00
static int lgpio_trig ( lua_State * L )
2014-12-22 12:35:05 +01:00
{
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
unsigned pin = luaL_checkinteger ( L , 1 ) ;
2016-03-08 18:38:21 +01:00
static const char * const opts [ ] = { " none " , " up " , " down " , " both " , " low " , " high " , NULL } ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
static const int opts_type [ ] = {
GPIO_PIN_INTR_DISABLE , GPIO_PIN_INTR_POSEDGE , GPIO_PIN_INTR_NEGEDGE ,
GPIO_PIN_INTR_ANYEDGE , GPIO_PIN_INTR_LOLEVEL , GPIO_PIN_INTR_HILEVEL
} ;
luaL_argcheck ( L , platform_gpio_exists ( pin ) & & pin > 0 , 1 , " Invalid interrupt pin " ) ;
2016-03-14 02:11:09 +01:00
int old_pin_ref = gpio_cb_ref [ pin ] ;
2016-03-08 18:38:21 +01:00
int type = opts_type [ luaL_checkoption ( L , 2 , " none " , opts ) ] ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
2016-03-14 02:11:09 +01:00
if ( type = = GPIO_PIN_INTR_DISABLE ) {
// "none" clears the callback
gpio_cb_ref [ pin ] = LUA_NOREF ;
} else if ( lua_gettop ( L ) = = 2 & & old_pin_ref ! = LUA_NOREF ) {
// keep the old one if no callback
old_pin_ref = LUA_NOREF ;
} else if ( lua_type ( L , 3 ) = = LUA_TFUNCTION | | lua_type ( L , 3 ) = = LUA_TLIGHTFUNCTION ) {
// set up the new callback if present
lua_pushvalue ( L , 3 ) ;
2014-12-22 12:35:05 +01:00
gpio_cb_ref [ pin ] = luaL_ref ( L , LUA_REGISTRYINDEX ) ;
2016-03-14 02:11:09 +01:00
2016-03-08 18:38:21 +01:00
} else {
2016-03-14 02:11:09 +01:00
// invalid combination, so clear down any old callback and throw an error
if ( old_pin_ref ! = LUA_NOREF ) luaL_unref ( L , LUA_REGISTRYINDEX , old_pin_ref ) ;
luaL_argcheck ( L , 0 , 3 , " invalid callback type " ) ;
2014-12-22 12:35:05 +01:00
}
2016-03-08 18:38:21 +01:00
2016-03-14 02:11:09 +01:00
// unreference any overwritten callback
2016-03-08 18:38:21 +01:00
if ( old_pin_ref ! = LUA_NOREF ) luaL_unref ( L , LUA_REGISTRYINDEX , old_pin_ref ) ;
2016-02-24 03:17:22 +01:00
NODE_DBG ( " Pin data: %d %d %08x, %d %d %d, %08x \n " ,
pin , type , pin_mux [ pin ] , pin_num [ pin ] , pin_func [ pin ] , pin_int_type [ pin ] , gpio_cb_ref [ pin ] ) ;
2014-12-22 12:35:05 +01:00
platform_gpio_intr_init ( pin , type ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
return 0 ;
2014-12-22 12:35:05 +01:00
}
# endif
// Lua: mode( pin, mode, pullup )
2015-01-05 03:09:51 +01:00
static int lgpio_mode ( lua_State * L )
2014-12-22 12:35:05 +01:00
{
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
unsigned pin = luaL_checkinteger ( L , 1 ) ;
unsigned mode = luaL_checkinteger ( L , 2 ) ;
unsigned pullup = luaL_optinteger ( L , 3 , FLOAT ) ;
luaL_argcheck ( L , platform_gpio_exists ( pin ) & & ( mode ! = INTERRUPT | | pin > 0 ) , 1 , " Invalid pin " ) ;
2016-03-10 22:55:44 +01:00
luaL_argcheck ( L , mode = = OUTPUT | | mode = = OPENDRAIN | | mode = = INPUT
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
# ifdef GPIO_INTERRUPT_ENABLE
| | mode = = INTERRUPT
# endif
, 2 , " wrong arg type " ) ;
if ( pullup ! = FLOAT ) pullup = PULLUP ;
NODE_DBG ( " pin,mode,pullup= %d %d %d \n " , pin , mode , pullup ) ;
2016-02-24 03:17:22 +01:00
NODE_DBG ( " Pin data at mode: %d %08x, %d %d %d, %08x \n " ,
pin , pin_mux [ pin ] , pin_num [ pin ] , pin_func [ pin ] , pin_int_type [ pin ] , gpio_cb_ref [ pin ] ) ;
2014-12-22 12:35:05 +01:00
# ifdef GPIO_INTERRUPT_ENABLE
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
if ( mode ! = INTERRUPT ) { // disable interrupt
2014-12-22 12:35:05 +01:00
if ( gpio_cb_ref [ pin ] ! = LUA_NOREF ) {
luaL_unref ( L , LUA_REGISTRYINDEX , gpio_cb_ref [ pin ] ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
gpio_cb_ref [ pin ] = LUA_NOREF ;
2014-12-22 12:35:05 +01:00
}
}
# endif
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
if ( platform_gpio_mode ( pin , mode , pullup ) < 0 )
2014-12-22 12:35:05 +01:00
return luaL_error ( L , " wrong pin num. " ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
return 0 ;
2014-12-22 12:35:05 +01:00
}
// Lua: read( pin )
2015-01-05 03:09:51 +01:00
static int lgpio_read ( lua_State * L )
2014-12-22 12:35:05 +01:00
{
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
unsigned pin = luaL_checkinteger ( L , 1 ) ;
2014-12-22 12:35:05 +01:00
MOD_CHECK_ID ( gpio , pin ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
lua_pushinteger ( L , platform_gpio_read ( pin ) ) ;
return 1 ;
2014-12-22 12:35:05 +01:00
}
// Lua: write( pin, level )
2015-01-05 03:09:51 +01:00
static int lgpio_write ( lua_State * L )
2014-12-22 12:35:05 +01:00
{
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
unsigned pin = luaL_checkinteger ( L , 1 ) ;
unsigned level = luaL_checkinteger ( L , 2 ) ;
2014-12-22 12:35:05 +01:00
MOD_CHECK_ID ( gpio , pin ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
luaL_argcheck ( L , level = = HIGH | | level = = LOW , 2 , " wrong level type " ) ;
2014-12-22 12:35:05 +01:00
platform_gpio_write ( pin , level ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
return 0 ;
2014-12-22 12:35:05 +01:00
}
2015-04-03 10:05:14 +02:00
# define DELAY_TABLE_MAX_LEN 256
# define delayMicroseconds os_delay_us
2016-06-16 20:33:26 +02:00
// Lua: serout( pin, firstLevel, delay_table[, repeat_num[, callback]])
2015-04-03 10:05:14 +02:00
// gpio.mode(1,gpio.OUTPUT,gpio.PULLUP)
// gpio.serout(1,1,{30,30,60,60,30,30}) -- serial one byte, b10110010
// gpio.serout(1,1,{30,70},8) -- serial 30% pwm 10k, lasts 8 cycles
// gpio.serout(1,1,{3,7},8) -- serial 30% pwm 100k, lasts 8 cycles
// gpio.serout(1,1,{0,0},8) -- serial 50% pwm as fast as possible, lasts 8 cycles
// gpio.mode(1,gpio.OUTPUT,gpio.PULLUP)
// gpio.serout(1,0,{20,10,10,20,10,10,10,100}) -- sim uart one byte 0x5A at about 100kbps
// gpio.serout(1,1,{8,18},8) -- serial 30% pwm 38k, lasts 8 cycles
2016-06-16 20:33:26 +02:00
typedef struct
{
unsigned pin ;
unsigned level ;
uint32 index ;
uint32 repeats ;
uint32 * delay_table ;
uint32 tablelen ;
task_handle_t done_taskid ;
int lua_done_ref ; // callback when transmission is done
} serout_t ;
static serout_t serout ;
static const os_param_t TIMER_OWNER = 0x6770696f ; // "gpio"
static void seroutasync_done ( task_param_t arg )
{
lua_State * L = lua_getstate ( ) ;
luaM_freearray ( L , serout . delay_table , serout . tablelen , uint32 ) ;
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
serout . delay_table = NULL ;
if ( serout . lua_done_ref ! = LUA_NOREF ) {
2016-06-16 20:33:26 +02:00
lua_rawgeti ( L , LUA_REGISTRYINDEX , serout . lua_done_ref ) ;
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
luaL_unref ( L , LUA_REGISTRYINDEX , serout . lua_done_ref ) ;
serout . lua_done_ref = LUA_NOREF ;
2016-06-16 20:33:26 +02:00
if ( lua_pcall ( L , 0 , 0 , 0 ) ) {
// Uncaught Error. Print instead of sudden reset
luaL_error ( L , " error: %s " , lua_tostring ( L , - 1 ) ) ;
}
}
}
static void ICACHE_RAM_ATTR seroutasync_cb ( os_param_t p ) {
( void ) p ;
if ( serout . index < serout . tablelen ) {
GPIO_OUTPUT_SET ( GPIO_ID_PIN ( pin_num [ serout . pin ] ) , serout . level ) ;
serout . level = serout . level = = LOW ? HIGH : LOW ;
platform_hw_timer_arm_us ( TIMER_OWNER , serout . delay_table [ serout . index ] ) ;
serout . index + + ;
if ( serout . repeats & & serout . index > = serout . tablelen ) { serout . index = 0 ; serout . repeats - - ; }
} else {
platform_hw_timer_close ( TIMER_OWNER ) ;
task_post_low ( serout . done_taskid , ( task_param_t ) 0 ) ;
}
}
2015-04-03 10:05:14 +02:00
static int lgpio_serout ( lua_State * L )
{
2016-06-16 20:33:26 +02:00
serout . pin = luaL_checkinteger ( L , 1 ) ;
serout . level = luaL_checkinteger ( L , 2 ) ;
serout . repeats = luaL_optint ( L , 4 , 1 ) - 1 ;
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
luaL_unref ( L , LUA_REGISTRYINDEX , serout . lua_done_ref ) ;
uint8_t is_async = FALSE ;
2016-06-16 20:33:26 +02:00
if ( ! lua_isnoneornil ( L , 5 ) ) {
if ( lua_isnumber ( L , 5 ) ) {
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
serout . lua_done_ref = LUA_NOREF ;
2016-06-16 20:33:26 +02:00
} else {
lua_pushvalue ( L , 5 ) ;
serout . lua_done_ref = luaL_ref ( L , LUA_REGISTRYINDEX ) ;
}
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
is_async = TRUE ;
2016-06-16 20:33:26 +02:00
} else {
serout . lua_done_ref = LUA_NOREF ;
}
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
if ( serout . delay_table ) {
luaM_freearray ( L , serout . delay_table , serout . tablelen , uint32 ) ;
serout . delay_table = NULL ;
}
2016-06-16 20:33:26 +02:00
luaL_argcheck ( L , platform_gpio_exists ( serout . pin ) , 1 , " Invalid pin " ) ;
luaL_argcheck ( L , serout . level = = HIGH | | serout . level = = LOW , 2 , " Wrong level type " ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
luaL_argcheck ( L , lua_istable ( L , 3 ) & &
2016-06-16 20:33:26 +02:00
( ( serout . tablelen = lua_objlen ( L , 3 ) ) < DELAY_TABLE_MAX_LEN ) , 3 , " Invalid delay_times " ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
2016-06-16 20:33:26 +02:00
serout . delay_table = luaM_newvector ( L , serout . tablelen , uint32 ) ;
for ( unsigned i = 0 ; i < serout . tablelen ; i + + ) {
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
lua_rawgeti ( L , 3 , i + 1 ) ;
unsigned delay = ( unsigned ) luaL_checkinteger ( L , - 1 ) ;
2016-06-16 20:33:26 +02:00
serout . delay_table [ i ] = delay ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
lua_pop ( L , 1 ) ;
}
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
if ( is_async ) { // async version for duration above 15 mSec
2016-06-16 20:33:26 +02:00
if ( ! platform_hw_timer_init ( TIMER_OWNER , FRC1_SOURCE , TRUE ) ) {
// Failed to init the timer
luaL_error ( L , " Unable to initialize timer " ) ;
2015-04-03 10:05:14 +02:00
}
2016-06-16 20:33:26 +02:00
platform_hw_timer_set_func ( TIMER_OWNER , seroutasync_cb , 0 ) ;
serout . index = 0 ;
seroutasync_cb ( 0 ) ;
} else { // sync version for sub-50 µs resolution & total duration < 15 mSec
do {
for ( serout . index = 0 ; serout . index < serout . tablelen ; serout . index + + ) {
NODE_DBG ( " %d \t %d \t %d \t %d \t %d \t %d \t %d \n " , serout . repeats , serout . index , serout . level , serout . pin , serout . tablelen , serout . delay_table [ serout . index ] , system_get_time ( ) ) ; // timings is delayed for short timings when debug output is enabled
GPIO_OUTPUT_SET ( GPIO_ID_PIN ( pin_num [ serout . pin ] ) , serout . level ) ;
serout . level = serout . level = = LOW ? HIGH : LOW ;
delayMicroseconds ( serout . delay_table [ serout . index ] ) ;
}
} while ( serout . repeats - - ) ;
luaM_freearray ( L , serout . delay_table , serout . tablelen , uint32 ) ;
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
}
return 0 ;
2015-04-03 10:05:14 +02:00
}
# undef DELAY_TABLE_MAX_LEN
2014-12-22 12:35:05 +01:00
// Module function map
2015-12-16 06:04:58 +01:00
static const LUA_REG_TYPE gpio_map [ ] = {
2015-12-13 03:29:37 +01:00
{ LSTRKEY ( " mode " ) , LFUNCVAL ( lgpio_mode ) } ,
{ LSTRKEY ( " read " ) , LFUNCVAL ( lgpio_read ) } ,
{ LSTRKEY ( " write " ) , LFUNCVAL ( lgpio_write ) } ,
2015-04-03 10:05:14 +02:00
{ LSTRKEY ( " serout " ) , LFUNCVAL ( lgpio_serout ) } ,
2014-12-22 12:35:05 +01:00
# ifdef GPIO_INTERRUPT_ENABLE
2015-12-13 03:29:37 +01:00
{ LSTRKEY ( " trig " ) , LFUNCVAL ( lgpio_trig ) } ,
{ LSTRKEY ( " INT " ) , LNUMVAL ( INTERRUPT ) } ,
2014-12-22 12:35:05 +01:00
# endif
2016-03-10 22:55:44 +01:00
{ LSTRKEY ( " OUTPUT " ) , LNUMVAL ( OUTPUT ) } ,
{ LSTRKEY ( " OPENDRAIN " ) , LNUMVAL ( OPENDRAIN ) } ,
{ LSTRKEY ( " INPUT " ) , LNUMVAL ( INPUT ) } ,
{ LSTRKEY ( " HIGH " ) , LNUMVAL ( HIGH ) } ,
{ LSTRKEY ( " LOW " ) , LNUMVAL ( LOW ) } ,
{ LSTRKEY ( " FLOAT " ) , LNUMVAL ( FLOAT ) } ,
{ LSTRKEY ( " PULLUP " ) , LNUMVAL ( PULLUP ) } ,
2014-12-22 12:35:05 +01:00
{ LNILKEY , LNILVAL }
} ;
2015-12-16 06:04:58 +01:00
int luaopen_gpio ( lua_State * L ) {
2014-12-22 12:35:05 +01:00
# ifdef GPIO_INTERRUPT_ENABLE
int i ;
for ( i = 0 ; i < GPIO_PIN_NUM ; i + + ) {
gpio_cb_ref [ i ] = LUA_NOREF ;
}
Add New Tasking I/F and rework GPIO, UART, etc to support it
As with the last commit this rolls up the follwowing, but include the various
review comments on the PR.
- **Documentation changes**. I've added the taks FAQ as a stub new Extension
developer FAQ, and split the old FAQ into a Lua Developer FAQ and a Hardware
FAQ.
- **Tasking I/F**. New `app/task/Makefile`, `app/task/task.c`,
`app/include/task/task.h` and `app/Makefile` as per previous commit. Cascade
changes to `app/driver/uart.c`, `app/include/driver/uart.h`,
`app/user/user_main.c` and `app/modules/node.c`
- **GPIO Rework** to `app/modules/gpio.c` and `pin_map.[hc]`, `platform.[hc]`
in `app/platform`
- **Other Optimisations** Move the `platform_*_exists()` from
`app/platform/common.c` to static inline declarations in `platform.h` as
this generates faster, smaller code. Move lgc.a routines out of iram0.
2016-02-17 18:13:17 +01:00
platform_gpio_init ( task_get_id ( gpio_intr_callback_task ) ) ;
2014-12-22 12:35:05 +01:00
# endif
2016-06-16 20:33:26 +02:00
serout . done_taskid = task_get_id ( ( task_callback_t ) seroutasync_done ) ;
Next 1.5.4.1 master drop (#1627)
* add u8g.fb_rle display
* move comm drivers to u8g_glue.c
* disable fb_rle per default
* implement file.size for spiffs (#1516)
Another bug squashed!
* Fix start-up race between UART & start_lua. (#1522)
Input during startup (especially while doing initial filesystem format)
ran the risk of filling up the task queue, preventing the start_lua task
from being queued, and hence NodeMCU would not start up that time.
* Reimplemented esp_init_data_default.
To work around the pesky "rf_cal[0] !=0x05" hang when booting on a chip
which doesn't have esp_init_data written to it.
It is no longer possible to do the writing of the esp_init_data_default
from within nodemcu_init(), as the SDK now hangs long before it gets
there. As such, I've had to reimplement this in our user_start_trampoline
and get it all done before the SDK has a chance to look for the init data.
It's unfortunate that we have to spend IRAM on this, but I see no better
alternative at this point.
* Replace hardcoded init data with generated data from SDK
The esp_init_data_default.bin is now extracted from the SDK (and its
patch file, if present), and the contents are automatically embedded
into user_main.o.
* Rework flashing instructions
Clarifies issues around SDK init data and hopefully clears up some
confusion, when paired with the esp_init_data_default changes in
NodeMCU.
* Fix typo
* Fixes the gpio.serout problem from #1534 (#1535)
* Fix some issues in gpio.serout
* Minor cleanup
* fix dereferencing NULL pointer in vfs_errno() (#1539)
* add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_set() (#1529)
* Somfy/TELIS driver (#1521)
* Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
* avoid task queue overrun for serial input (#1540)
Thank you.
* Increase irom0_0_seg size for PR build
* Improve reliability of FS detection. (#1528)
* Version to make filesystem detection more reliable
* Improve bad fs detection
* Version of printf that doesn't suffer from buffer overflows (#1564)
* Small improvement to http client (#1558)
* Remove luaL_buffer from file_g_read() (#1541)
* remove luaL_buffer from file_g_read()
- avoid memory leak when function gets terminated by lua_error
- skip scanning for end_char when reading until EOF
* attempt to free memory in any case
* Change HTTP failures from debug to error messages (#1568)
* Change HTTP failures from debug to error messages
* Add tag to HTTP error messages
* Create macro for error msg and improve dbg msg
* Add ssd1306_128x32 for U8G (#1571)
* Update CONTRIBUTING.md
* Add support to mix ws2812.buffer objects. (#1575)
* Add load/dump/mix/power operations on the buffer object
* Calculate the pixel value in mix and then clip to the range.
* Fixed the two wrong userdata types
* Added a couple more useful methods
* Add support for shifting a piece of the buffer.
* Fix a minor bug with offset shifts
* Update to the wifi module (#1497)
* Removed inline documentation for several functions and update comments
Since documentation is now part of the repository, the inline
documentation just adds to the already huge wifi.c
* Wifi module: add new functionality, update documentation
Functions Added:
wifi.getdefaultmode(): returns default wifi opmode
wifi.sta.apchange(): select alternate cached AP
wifi.sta.apinfo(): get cached AP list
wifi.sta.aplimit(): set cached AP limit
wifi.sta.getapindex(): get index of currently configured AP
wifi.sta.getdefaultconfig(): get default station configuration
wifi.ap.getdefaultconfig(): get default AP configuration
functions modified:
wifi.setmode: saving mode to flash is now optional
wifi.sta.config: now accepts table as an argument and save config to
flash is now optional
wifi.sta.getconfig: added option to return table
wifi.ap.config: save config to flash is now optional
wifi.ap.getconfig: added option to return table
Documentation changes:
- Modified documentation to reflect above changes
- Removed unnecessary inline documentation from `wifi.c`
- Updated documentation for `wifi.sta.disconnect`to address issue #1480
- Fixed inaccurate documentation for function `wifi.sleeptype`
- Added more details to `wifi.nullmodesleep()`
* Move function `wifi.sleeptype()` to `wifi.sta.sleeptype()`
* Fixed problem where wifi.x.getconfig() returned invalid strings when
ssid or password were set to maximum length.
* fix error in documentation for `wifi.sta.getapindex`
* Renamed some wifi functions
wifi.sta.apinfo -> getapinfo
wifi.sta.aplimit -> setaplimit
wifi.sta.apchange -> changeap
also organized the wifi_station_map array
* Make the MQTT PING functionality work better. (#1557)
Deal with flow control stopped case
* Implement object model for files (#1532)
* Eus channelfix (#1583)
Squashed commits included:
Bug fixes and final implementation
- Added Content-Length: 0 to all headers
- Endpoint name checks not using trailing space so cache-busting techniques can be used (i.e., append a nonce to the URL)
- Track when connecting so APList scan doesn't take place during (which changes the channel)
- More debugging output added to assist in tracking down some issues
Added /status.json endpoint for phone apps/XHR to get JSON response
Station Status caching for wifi channel workaround + AJAX/CORS
- During checkstation poll, cache the last station status
- Shut down the station if status = 2,3,4 and channel is different than SoftAP
- Add Access-Control-Allow-Origin: * to endpoint responses used by a service
- Add a /setwifi GET endpoint for phone apps/XHR to use (same parameters as /update endpoint). Returns a JSON response containing chip id and status code.
- Add handler for OPTIONS verb (needed for CORS support)
Wi-Fi Channel Issue Workaround
- Do a site survey upon startup, set SoftAP channel to the strongest rssi's channel
- Compare successful station connect channel to SoftAP's. If different, then defer the Lua success callback to the end. Shut down Station and start the SoftAP back up with original channel.
- After the 10 second shutdown timer fires, check to see if success callback was already called. If not, then call it while starting the Station back up.
HTTP Response and DNS enhancements
- If DNS's UDP buffer fills up, keep going as non-fatal. It's UDP and not guaranteed anyways. I've seen this occur when connecting a PC to the SoftAP and every open program tries to phone home at the same time, overwhelming the EUS DNS server.
- Support for detecting/handling pre-gzipped `enduser_setup.html` (and `http_html_backup`) payload. Nice for keeping the size of the `state->http_payload_data` as small as possible (also makes minimization not as critical)
- Corrected misuse of HTTP 401 response status (changed one occurrence to 400/Bad Request, and changed another to 405/Method Not Allowed)
* Normalized formatting (tabs-to-spaces)
* Added documentation
* Corrected misuse of strlen for binary (gzip) data.
* Added NULL check after malloc
* fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_lseek() return value (#1570)
* Fix link
* Overhaul flashing docs once again (#1587)
* Add chapter about determine flash size plus small fixes
* Rewrite esptool.py chapter, move flash size chapter to end
* i2c - allow slave stretching SCL (just loop and check) (#1589)
* Add note on dev board usage of SPI bus 0 (#1591)
* Turn SPI busses note to admonition note
* support for custom websocket headers (#1573)
Looks good to me. Thank you.
Also:
- allow for '\0's in received messages
* add client:config for setting websocket headers
Also:
- headers are case-insensitive now
* fix docs
* fix typo
* remove unnecessary luaL_argcheck calls
* replace os_sprintf with simple string copy
* Handle error condition in file.read() (#1599)
* handle error condition in file.read()
* simplify loop initialization
* Fix macro as suggested in #1548
* Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
* Fix typo at rtctime.md
rtctime.dsleep -> rtctime.dsleep_aligned
2016-12-01 21:37:24 +01:00
serout . lua_done_ref = LUA_NOREF ;
2014-12-22 12:35:05 +01:00
return 0 ;
}
2015-12-16 06:04:58 +01:00
NODEMCU_MODULE ( GPIO , " gpio " , gpio_map , luaopen_gpio ) ;