diff --git a/README.md b/README.md
index 75a21312..81dd600b 100644
--- a/README.md
+++ b/README.md
@@ -27,8 +27,8 @@ Tencent QQ group: 309957875
- fix wifi smart connect
- add spi module (done)
- add mqtt module (done)
-- add coap module
-- cross compiler
+- add coap module (in coap branch)
+- cross compiler (done)
# Change log
2015-02-13
diff --git a/app/include/user_config.h b/app/include/user_config.h
index c6ec1e0e..cbcebe6b 100644
--- a/app/include/user_config.h
+++ b/app/include/user_config.h
@@ -3,11 +3,11 @@
#define NODE_VERSION_MAJOR 0U
#define NODE_VERSION_MINOR 9U
-#define NODE_VERSION_REVISION 5U
+#define NODE_VERSION_REVISION 6U
#define NODE_VERSION_INTERNAL 0U
-#define NODE_VERSION "NodeMCU 0.9.5"
-#define BUILD_DATE "build 20150213"
+#define NODE_VERSION "NodeMCU 0.9.6"
+#define BUILD_DATE "build 20150216"
// #define DEVKIT_VERSION_0_9 1 // define this only if you use NodeMCU devkit v0.9
@@ -77,8 +77,6 @@
#endif /* LUA_USE_DEVICE_DRIVER */
-// #define LUA_NUMBER_INTEGRAL
-
#define LUA_OPTRAM
#ifdef LUA_OPTRAM
#define LUA_OPTIMIZE_MEMORY 2
diff --git a/app/lua/lauxlib.c b/app/lua/lauxlib.c
index fedd7c56..00e740be 100644
--- a/app/lua/lauxlib.c
+++ b/app/lua/lauxlib.c
@@ -692,6 +692,8 @@ LUALIB_API int luaL_loadfsfile (lua_State *L, const char *filename) {
lf.f = fs_open(filename, FS_RDONLY);
if (lf.f < FS_OPEN_OK) return errfsfile(L, "open", fnameindex);
}
+ // if(fs_size(lf.f)>LUAL_BUFFERSIZE)
+ // return luaL_error(L, "file is too big");
c = fs_getc(lf.f);
if (c == '#') { /* Unix exec. file? */
lf.extraline = 1;
diff --git a/app/lua/luaconf.h b/app/lua/luaconf.h
index 3a57e1e7..1a1760c7 100644
--- a/app/lua/luaconf.h
+++ b/app/lua/luaconf.h
@@ -542,7 +542,7 @@ extern int readline4lua(const char *prompt, char *buffer, int length);
/*
@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
*/
-#define LUAL_BUFFERSIZE (BUFSIZ*4)
+#define LUAL_BUFFERSIZE ((BUFSIZ)*4)
/* }================================================================== */
diff --git a/app/lwip/app/dummy.c b/app/lwip/app/dummy.c
new file mode 100644
index 00000000..a7a74ed9
--- /dev/null
+++ b/app/lwip/app/dummy.c
@@ -0,0 +1,10 @@
+/******************************************************************************
+ * FunctionName : espconn_init
+ * Description : dummy the espconn_init
+ * Parameters : none
+ * Returns : none
+*******************************************************************************/
+void espconn_init()
+{
+ // dummy function, do nothing.
+}
diff --git a/app/modules/net.c b/app/modules/net.c
index 51639b54..5b9dba9d 100644
--- a/app/modules/net.c
+++ b/app/modules/net.c
@@ -1241,6 +1241,31 @@ static int net_socket_unhold( lua_State* L )
return 0;
}
+// Lua: ip,port = sk:getpeer()
+static int net_socket_getpeer( lua_State* L )
+{
+ lnet_userdata *nud;
+ const char *mt = "net.socket";
+ nud = (lnet_userdata *)luaL_checkudata(L, 1, mt);
+ luaL_argcheck(L, nud, 1, "Server/Socket expected");
+
+ if(nud!=NULL && nud->pesp_conn!=NULL ){
+ char temp[20] = {0};
+ c_sprintf(temp, IPSTR, IP2STR( &(nud->pesp_conn->proto.tcp->remote_ip) ) );
+ if ( nud->pesp_conn->proto.tcp->remote_port != 0 ) {
+ lua_pushstring( L, temp );
+ lua_pushinteger( L, nud->pesp_conn->proto.tcp->remote_port );
+ } else {
+ lua_pushnil( L );
+ lua_pushnil( L );
+ }
+ } else {
+ lua_pushnil( L );
+ lua_pushnil( L );
+ }
+ return 2;
+}
+
// Lua: socket:dns( string, function(ip) )
static int net_socket_dns( lua_State* L )
{
@@ -1302,6 +1327,7 @@ static const LUA_REG_TYPE net_socket_map[] =
{ LSTRKEY( "hold" ), LFUNCVAL ( net_socket_hold ) },
{ LSTRKEY( "unhold" ), LFUNCVAL ( net_socket_unhold ) },
{ LSTRKEY( "dns" ), LFUNCVAL ( net_socket_dns ) },
+ { LSTRKEY( "getpeer" ), LFUNCVAL ( net_socket_getpeer ) },
// { LSTRKEY( "delete" ), LFUNCVAL ( net_socket_delete ) },
{ LSTRKEY( "__gc" ), LFUNCVAL ( net_socket_delete ) },
#if LUA_OPTIMIZE_MEMORY > 0
diff --git a/app/modules/node.c b/app/modules/node.c
index 90dd0d96..62f31e80 100644
--- a/app/modules/node.c
+++ b/app/modules/node.c
@@ -95,6 +95,7 @@ static int node_chipid( lua_State* L )
// Lua: readvdd33()
static int node_readvdd33( lua_State* L )
{
+ // uint32_t vdd33 = system_get_vdd33();
uint32_t vdd33 = readvdd33();
lua_pushinteger(L, vdd33);
return 1;
diff --git a/app/platform/flash_api.c b/app/platform/flash_api.c
index 3fde416b..c4ce6f57 100644
--- a/app/platform/flash_api.c
+++ b/app/platform/flash_api.c
@@ -24,6 +24,7 @@ SPIFlashInfo flash_get_info(void)
{
volatile SPIFlashInfo spi_flash_info ICACHE_STORE_ATTR;
spi_flash_info = *((SPIFlashInfo *)(FLASH_MAP_START_ADDRESS));
+ // spi_flash_read(0, (uint32 *)(& spi_flash_info), sizeof(spi_flash_info));
return spi_flash_info;
}
@@ -56,9 +57,11 @@ uint32_t flash_get_size_byte(void)
case SIZE_32MBIT:
// 32Mbit, 4MByte
flash_size = 4 * 1024 * 1024;
+ break;
case SIZE_64MBIT:
// 64Mbit, 8MByte
flash_size = 8 * 1024 * 1024;
+ break;
case SIZE_128MBIT:
// 128Mbit, 16MByte
flash_size = 16 * 1024 * 1024;
@@ -131,7 +134,15 @@ bool flash_set_size_byte(uint32_t size)
uint16_t flash_get_sec_num(void)
{
- return flash_get_size_byte() / SPI_FLASH_SEC_SIZE;
+ //static uint16_t sec_num = 0;
+ // return flash_get_size_byte() / (SPI_FLASH_SEC_SIZE);
+ // c_printf("\nflash_get_size_byte()=%d\n", ( flash_get_size_byte() / (SPI_FLASH_SEC_SIZE) ));
+ // if( sec_num == 0 )
+ //{
+ // sec_num = 4 * 1024 * 1024 / (SPI_FLASH_SEC_SIZE);
+ //}
+ //return sec_num;
+ return ( flash_get_size_byte() / (SPI_FLASH_SEC_SIZE) );
}
uint8_t flash_get_mode(void)
@@ -232,13 +243,14 @@ bool flash_self_destruct(void)
return true;
}
-uint8_t byte_of_aligned_array(const uint8_t* aligned_array, uint32_t index)
+uint8_t byte_of_aligned_array(const uint8_t *aligned_array, uint32_t index)
{
- if( (((uint32_t)aligned_array)%4) != 0 ){
+ if ( (((uint32_t)aligned_array) % 4) != 0 )
+ {
NODE_DBG("aligned_array is not 4-byte aligned.\n");
return 0;
}
- uint32_t v = ((uint32_t *)aligned_array)[ index/4 ];
+ uint32_t v = ((uint32_t *)aligned_array)[ index / 4 ];
uint8_t *p = (uint8_t *) (&v);
- return p[ (index%4) ];
+ return p[ (index % 4) ];
}
diff --git a/app/platform/flash_api.h b/app/platform/flash_api.h
index 82d681e3..47c0d4fb 100644
--- a/app/platform/flash_api.h
+++ b/app/platform/flash_api.h
@@ -3,6 +3,7 @@
#include "ets_sys.h"
#include "user_config.h"
#include "cpu_esp8266.h"
+
#define FLASH_MAP_START_ADDRESS (INTERNAL_FLASH_START_ADDRESS)
/******************************************************************************
@@ -29,8 +30,8 @@
typedef struct
{
- uint8_t unknown0;
- uint8_t unknown1;
+ uint8_t e9;
+ uint8_t segments;
enum
{
MODE_QIO = 0,
diff --git a/app/platform/flash_fs.h b/app/platform/flash_fs.h
index 3f7d4710..9d9da7c7 100644
--- a/app/platform/flash_fs.h
+++ b/app/platform/flash_fs.h
@@ -69,6 +69,7 @@
#define fs_format myspiffs_format
#define fs_check myspiffs_check
#define fs_rename myspiffs_rename
+#define fs_size myspiffs_size
#define FS_NAME_MAX_LENGTH SPIFFS_OBJ_NAME_LEN
diff --git a/app/spiffs/spiffs.c b/app/spiffs/spiffs.c
index 5434e68d..df749e09 100644
--- a/app/spiffs/spiffs.c
+++ b/app/spiffs/spiffs.c
@@ -165,6 +165,9 @@ void myspiffs_clearerr( int fd ){
int myspiffs_rename( const char *old, const char *newname ){
return SPIFFS_rename(&fs, (char *)old, (char *)newname);
}
+size_t myspiffs_size( int fd ){
+ return SPIFFS_size(&fs, (spiffs_file)fd);
+}
#if 0
void test_spiffs() {
char buf[12];
diff --git a/app/spiffs/spiffs.h b/app/spiffs/spiffs.h
index ca5200fd..23228446 100644
--- a/app/spiffs/spiffs.h
+++ b/app/spiffs/spiffs.h
@@ -423,6 +423,7 @@ s32_t SPIFFS_check(spiffs *fs);
*/
s32_t SPIFFS_eof(spiffs *fs, spiffs_file fh);
s32_t SPIFFS_tell(spiffs *fs, spiffs_file fh);
+s32_t SPIFFS_size(spiffs *fs, spiffs_file fh);
#if SPIFFS_TEST_VISUALISATION
/**
@@ -465,5 +466,6 @@ int myspiffs_error( int fd );
void myspiffs_clearerr( int fd );
int myspiffs_check( void );
int myspiffs_rename( const char *old, const char *newname );
+size_t myspiffs_size( int fd );
#endif /* SPIFFS_H_ */
diff --git a/app/spiffs/spiffs_hydrogen.c b/app/spiffs/spiffs_hydrogen.c
index 50777b73..20e45ecf 100644
--- a/app/spiffs/spiffs_hydrogen.c
+++ b/app/spiffs/spiffs_hydrogen.c
@@ -798,6 +798,25 @@ s32_t SPIFFS_tell(spiffs *fs, spiffs_file fh) {
return res;
}
+s32_t SPIFFS_size(spiffs *fs, spiffs_file fh) {
+ SPIFFS_API_CHECK_MOUNT(fs);
+ SPIFFS_LOCK(fs);
+
+ spiffs_fd *fd;
+ s32_t res;
+ res = spiffs_fd_get(fs, fh, &fd);
+ SPIFFS_API_CHECK_RES(fs, res);
+
+#if SPIFFS_CACHE_WR
+ spiffs_fflush_cache(fs, fh);
+#endif
+
+ res = fd->size;
+
+ SPIFFS_UNLOCK(fs);
+ return res;
+}
+
#if SPIFFS_TEST_VISUALISATION
s32_t SPIFFS_vis(spiffs *fs) {
s32_t res = SPIFFS_OK;
diff --git a/include/espconn.h b/include/espconn.h
index 2af5cf77..690d8dc9 100644
--- a/include/espconn.h
+++ b/include/espconn.h
@@ -1,392 +1,407 @@
-#ifndef __ESPCONN_H__
-#define __ESPCONN_H__
-
-#include "lwip/ip_addr.h"
-
-typedef sint8 err_t;
-
-typedef void *espconn_handle;
-typedef void (* espconn_connect_callback)(void *arg);
-typedef void (* espconn_reconnect_callback)(void *arg, sint8 err);
-
-/* Definitions for error constants. */
-
-#define ESPCONN_OK 0 /* No error, everything OK. */
-#define ESPCONN_MEM -1 /* Out of memory error. */
-#define ESPCONN_TIMEOUT -3 /* Timeout. */
-#define ESPCONN_RTE -4 /* Routing problem. */
-#define ESPCONN_INPROGRESS -5 /* Operation in progress */
-
-#define ESPCONN_ABRT -8 /* Connection aborted. */
-#define ESPCONN_RST -9 /* Connection reset. */
-#define ESPCONN_CLSD -10 /* Connection closed. */
-#define ESPCONN_CONN -11 /* Not connected. */
-
-#define ESPCONN_ARG -12 /* Illegal argument. */
-#define ESPCONN_ISCONN -15 /* Already connected. */
-
-/** Protocol family and type of the espconn */
-enum espconn_type {
- ESPCONN_INVALID = 0,
- /* ESPCONN_TCP Group */
- ESPCONN_TCP = 0x10,
- /* ESPCONN_UDP Group */
- ESPCONN_UDP = 0x20,
-};
-
-/** Current state of the espconn. Non-TCP espconn are always in state ESPCONN_NONE! */
-enum espconn_state {
- ESPCONN_NONE,
- ESPCONN_WAIT,
- ESPCONN_LISTEN,
- ESPCONN_CONNECT,
- ESPCONN_WRITE,
- ESPCONN_READ,
- ESPCONN_CLOSE
-};
-
-typedef struct _esp_tcp {
- int remote_port;
- int local_port;
- uint8 local_ip[4];
- uint8 remote_ip[4];
- espconn_connect_callback connect_callback;
- espconn_reconnect_callback reconnect_callback;
- espconn_connect_callback disconnect_callback;
-} esp_tcp;
-
-typedef struct _esp_udp {
- int remote_port;
- int local_port;
- uint8 local_ip[4];
- uint8 remote_ip[4];
-} esp_udp;
-
-typedef struct _remot_info{
- enum espconn_state state;
- int remote_port;
- uint8 remote_ip[4];
-}remot_info;
-
-/** A callback prototype to inform about events for a espconn */
-typedef void (* espconn_recv_callback)(void *arg, char *pdata, unsigned short len);
-typedef void (* espconn_sent_callback)(void *arg);
-
-/** A espconn descriptor */
-struct espconn {
- /** type of the espconn (TCP, UDP) */
- enum espconn_type type;
- /** current state of the espconn */
- enum espconn_state state;
- union {
- esp_tcp *tcp;
- esp_udp *udp;
- } proto;
- /** A callback function that is informed about events for this espconn */
- espconn_recv_callback recv_callback;
- espconn_sent_callback sent_callback;
- uint8 link_cnt;
- void *reverse;
-};
-
-enum espconn_option{
- ESPCONN_REUSEADDR = 1,
- ESPCONN_NODELAY,
- ESPCONN_END
-};
-
-/******************************************************************************
- * FunctionName : espconn_connect
- * Description : The function given as the connect
- * Parameters : espconn -- the espconn used to listen the connection
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_connect(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_disconnect
- * Description : disconnect with host
- * Parameters : espconn -- the espconn used to disconnect the connection
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_disconnect(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_delete
- * Description : disconnect with host
- * Parameters : espconn -- the espconn used to disconnect the connection
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_delete(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_accept
- * Description : The function given as the listen
- * Parameters : espconn -- the espconn used to listen the connection
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_accept(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_create
- * Description : sent data for client or server
- * Parameters : espconn -- espconn to the data transmission
- * Returns : result
-*******************************************************************************/
-
-sint8 espconn_create(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_tcp_get_max_con
- * Description : get the number of simulatenously active TCP connections
- * Parameters : none
- * Returns : none
-*******************************************************************************/
-
-uint8 espconn_tcp_get_max_con(void);
-
-/******************************************************************************
- * FunctionName : espconn_tcp_set_max_con
- * Description : set the number of simulatenously active TCP connections
- * Parameters : num -- total number
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_tcp_set_max_con(uint8 num);
-
-/******************************************************************************
- * FunctionName : espconn_tcp_get_max_con_allow
- * Description : get the count of simulatenously active connections on the server
- * Parameters : espconn -- espconn to get the count
- * Returns : result
-*******************************************************************************/
-
-sint8 espconn_tcp_get_max_con_allow(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_tcp_set_max_con_allow
- * Description : set the count of simulatenously active connections on the server
- * Parameters : espconn -- espconn to set the count
- * num -- support the connection number
- * Returns : result
-*******************************************************************************/
-
-sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8 num);
-
-/******************************************************************************
- * FunctionName : espconn_regist_time
- * Description : used to specify the time that should be called when don't recv data
- * Parameters : espconn -- the espconn used to the connection
- * interval -- the timer when don't recv data
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_time(struct espconn *espconn, uint32 interval, uint8 type_flag);
-
-/******************************************************************************
- * FunctionName : espconn_get_connection_info
- * Description : used to specify the function that should be called when disconnect
- * Parameters : espconn -- espconn to set the err callback
- * discon_cb -- err callback function to call when err
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_get_connection_info(struct espconn *pespconn, remot_info **pcon_info, uint8 typeflags);
-
-/******************************************************************************
- * FunctionName : espconn_regist_sentcb
- * Description : Used to specify the function that should be called when data
- * has been successfully delivered to the remote host.
- * Parameters : struct espconn *espconn -- espconn to set the sent callback
- * espconn_sent_callback sent_cb -- sent callback function to
- * call for this espconn when data is successfully sent
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_sentcb(struct espconn *espconn, espconn_sent_callback sent_cb);
-
-/******************************************************************************
- * FunctionName : espconn_sent
- * Description : sent data for client or server
- * Parameters : espconn -- espconn to set for client or server
- * psent -- data to send
- * length -- length of data to send
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_sent(struct espconn *espconn, uint8 *psent, uint16 length);
-
-/******************************************************************************
- * FunctionName : espconn_regist_connectcb
- * Description : used to specify the function that should be called when
- * connects to host.
- * Parameters : espconn -- espconn to set the connect callback
- * connect_cb -- connected callback function to call when connected
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_connectcb(struct espconn *espconn, espconn_connect_callback connect_cb);
-
-/******************************************************************************
- * FunctionName : espconn_regist_recvcb
- * Description : used to specify the function that should be called when recv
- * data from host.
- * Parameters : espconn -- espconn to set the recv callback
- * recv_cb -- recv callback function to call when recv data
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_recvcb(struct espconn *espconn, espconn_recv_callback recv_cb);
-
-/******************************************************************************
- * FunctionName : espconn_regist_reconcb
- * Description : used to specify the function that should be called when connection
- * because of err disconnect.
- * Parameters : espconn -- espconn to set the err callback
- * recon_cb -- err callback function to call when err
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_reconcb(struct espconn *espconn, espconn_reconnect_callback recon_cb);
-
-/******************************************************************************
- * FunctionName : espconn_regist_disconcb
- * Description : used to specify the function that should be called when disconnect
- * Parameters : espconn -- espconn to set the err callback
- * discon_cb -- err callback function to call when err
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_regist_disconcb(struct espconn *espconn, espconn_connect_callback discon_cb);
-
-/******************************************************************************
- * FunctionName : espconn_port
- * Description : access port value for client so that we don't end up bouncing
- * all connections at the same time .
- * Parameters : none
- * Returns : access port value
-*******************************************************************************/
-
-uint32 espconn_port(void);
-
-/******************************************************************************
- * FunctionName : espconn_set_opt
- * Description : access port value for client so that we don't end up bouncing
- * all connections at the same time .
- * Parameters : none
- * Returns : access port value
-*******************************************************************************/
-
-sint8 espconn_set_opt(struct espconn *espconn, uint8 opt);
-
-/******************************************************************************
- * TypedefName : dns_found_callback
- * Description : Callback which is invoked when a hostname is found.
- * Parameters : name -- pointer to the name that was looked up.
- * ipaddr -- pointer to an ip_addr_t containing the IP address of
- * the hostname, or NULL if the name could not be found (or on any
- * other error).
- * callback_arg -- a user-specified callback argument passed to
- * dns_gethostbyname
-*******************************************************************************/
-
-typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);
-
-/******************************************************************************
- * FunctionName : espconn_gethostbyname
- * Description : Resolve a hostname (string) into an IP address.
- * Parameters : pespconn -- espconn to resolve a hostname
- * hostname -- the hostname that is to be queried
- * addr -- pointer to a ip_addr_t where to store the address if
- * it is already cached in the dns_table (only valid if ESPCONN_OK
- * is returned!)
- * found -- a callback function to be called on success, failure
- * or timeout (only if ERR_INPROGRESS is returned!)
- * Returns : err_t return code
- * - ESPCONN_OK if hostname is a valid IP address string or the host
- * name is already in the local names table.
- * - ESPCONN_INPROGRESS enqueue a request to be sent to the DNS server
- * for resolution if no errors are present.
- * - ESPCONN_ARG: dns client not initialized or invalid hostname
-*******************************************************************************/
-
-err_t espconn_gethostbyname(struct espconn *pespconn, const char *hostname, ip_addr_t *addr, dns_found_callback found);
-
-/******************************************************************************
- * FunctionName : espconn_encry_connect
- * Description : The function given as connection
- * Parameters : espconn -- the espconn used to connect with the host
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_secure_connect(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_encry_disconnect
- * Description : The function given as the disconnection
- * Parameters : espconn -- the espconn used to disconnect with the host
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_secure_disconnect(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_encry_sent
- * Description : sent data for client or server
- * Parameters : espconn -- espconn to set for client or server
- * psent -- data to send
- * length -- length of data to send
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_secure_sent(struct espconn *espconn, uint8 *psent, uint16 length);
-
-/******************************************************************************
- * FunctionName : espconn_secure_accept
- * Description : The function given as the listen
- * Parameters : espconn -- the espconn used to listen the connection
- * Returns : none
-*******************************************************************************/
-
-sint8 espconn_secure_accept(struct espconn *espconn);
-
-/******************************************************************************
- * FunctionName : espconn_igmp_join
- * Description : join a multicast group
- * Parameters : host_ip -- the ip address of udp server
- * multicast_ip -- multicast ip given by user
- * Returns : none
-*******************************************************************************/
-sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
-
-/******************************************************************************
- * FunctionName : espconn_igmp_leave
- * Description : leave a multicast group
- * Parameters : host_ip -- the ip address of udp server
- * multicast_ip -- multicast ip given by user
- * Returns : none
-*******************************************************************************/
-sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
-
-/******************************************************************************
- * FunctionName : espconn_recv_hold
- * Description : hold tcp receive
- * Parameters : espconn -- espconn to hold
- * Returns : none
-*******************************************************************************/
-sint8 espconn_recv_hold(struct espconn *pespconn);
-
-/******************************************************************************
- * FunctionName : espconn_recv_unhold
- * Description : unhold tcp receive
- * Parameters : espconn -- espconn to unhold
- * Returns : none
-*******************************************************************************/
-sint8 espconn_recv_unhold(struct espconn *pespconn);
-
-#endif
-
+#ifndef __ESPCONN_H__
+#define __ESPCONN_H__
+
+#include "lwip/ip_addr.h"
+
+typedef sint8 err_t;
+
+typedef void *espconn_handle;
+typedef void (* espconn_connect_callback)(void *arg);
+typedef void (* espconn_reconnect_callback)(void *arg, sint8 err);
+
+/* Definitions for error constants. */
+
+#define ESPCONN_OK 0 /* No error, everything OK. */
+#define ESPCONN_MEM -1 /* Out of memory error. */
+#define ESPCONN_TIMEOUT -3 /* Timeout. */
+#define ESPCONN_RTE -4 /* Routing problem. */
+#define ESPCONN_INPROGRESS -5 /* Operation in progress */
+
+#define ESPCONN_ABRT -8 /* Connection aborted. */
+#define ESPCONN_RST -9 /* Connection reset. */
+#define ESPCONN_CLSD -10 /* Connection closed. */
+#define ESPCONN_CONN -11 /* Not connected. */
+
+#define ESPCONN_ARG -12 /* Illegal argument. */
+#define ESPCONN_ISCONN -15 /* Already connected. */
+
+/** Protocol family and type of the espconn */
+enum espconn_type {
+ ESPCONN_INVALID = 0,
+ /* ESPCONN_TCP Group */
+ ESPCONN_TCP = 0x10,
+ /* ESPCONN_UDP Group */
+ ESPCONN_UDP = 0x20,
+};
+
+/** Current state of the espconn. Non-TCP espconn are always in state ESPCONN_NONE! */
+enum espconn_state {
+ ESPCONN_NONE,
+ ESPCONN_WAIT,
+ ESPCONN_LISTEN,
+ ESPCONN_CONNECT,
+ ESPCONN_WRITE,
+ ESPCONN_READ,
+ ESPCONN_CLOSE
+};
+
+typedef struct _esp_tcp {
+ int remote_port;
+ int local_port;
+ uint8 local_ip[4];
+ uint8 remote_ip[4];
+ espconn_connect_callback connect_callback;
+ espconn_reconnect_callback reconnect_callback;
+ espconn_connect_callback disconnect_callback;
+ espconn_connect_callback write_finish_fn;
+} esp_tcp;
+
+typedef struct _esp_udp {
+ int remote_port;
+ int local_port;
+ uint8 local_ip[4];
+ uint8 remote_ip[4];
+} esp_udp;
+
+typedef struct _remot_info{
+ enum espconn_state state;
+ int remote_port;
+ uint8 remote_ip[4];
+}remot_info;
+
+/** A callback prototype to inform about events for a espconn */
+typedef void (* espconn_recv_callback)(void *arg, char *pdata, unsigned short len);
+typedef void (* espconn_sent_callback)(void *arg);
+
+/** A espconn descriptor */
+struct espconn {
+ /** type of the espconn (TCP, UDP) */
+ enum espconn_type type;
+ /** current state of the espconn */
+ enum espconn_state state;
+ union {
+ esp_tcp *tcp;
+ esp_udp *udp;
+ } proto;
+ /** A callback function that is informed about events for this espconn */
+ espconn_recv_callback recv_callback;
+ espconn_sent_callback sent_callback;
+ uint8 link_cnt;
+ void *reverse;
+};
+
+enum espconn_option{
+ ESPCONN_START = 0x00,
+ ESPCONN_REUSEADDR = 0x01,
+ ESPCONN_NODELAY = 0x02,
+ ESPCONN_COPY = 0x04,
+ ESPCONN_END
+};
+
+/******************************************************************************
+ * FunctionName : espconn_connect
+ * Description : The function given as the connect
+ * Parameters : espconn -- the espconn used to listen the connection
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_connect(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_disconnect
+ * Description : disconnect with host
+ * Parameters : espconn -- the espconn used to disconnect the connection
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_disconnect(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_delete
+ * Description : disconnect with host
+ * Parameters : espconn -- the espconn used to disconnect the connection
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_delete(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_accept
+ * Description : The function given as the listen
+ * Parameters : espconn -- the espconn used to listen the connection
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_accept(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_create
+ * Description : sent data for client or server
+ * Parameters : espconn -- espconn to the data transmission
+ * Returns : result
+*******************************************************************************/
+
+sint8 espconn_create(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_tcp_get_max_con
+ * Description : get the number of simulatenously active TCP connections
+ * Parameters : none
+ * Returns : none
+*******************************************************************************/
+
+uint8 espconn_tcp_get_max_con(void);
+
+/******************************************************************************
+ * FunctionName : espconn_tcp_set_max_con
+ * Description : set the number of simulatenously active TCP connections
+ * Parameters : num -- total number
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_tcp_set_max_con(uint8 num);
+
+/******************************************************************************
+ * FunctionName : espconn_tcp_get_max_con_allow
+ * Description : get the count of simulatenously active connections on the server
+ * Parameters : espconn -- espconn to get the count
+ * Returns : result
+*******************************************************************************/
+
+sint8 espconn_tcp_get_max_con_allow(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_tcp_set_max_con_allow
+ * Description : set the count of simulatenously active connections on the server
+ * Parameters : espconn -- espconn to set the count
+ * num -- support the connection number
+ * Returns : result
+*******************************************************************************/
+
+sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8 num);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_time
+ * Description : used to specify the time that should be called when don't recv data
+ * Parameters : espconn -- the espconn used to the connection
+ * interval -- the timer when don't recv data
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_time(struct espconn *espconn, uint32 interval, uint8 type_flag);
+
+/******************************************************************************
+ * FunctionName : espconn_get_connection_info
+ * Description : used to specify the function that should be called when disconnect
+ * Parameters : espconn -- espconn to set the err callback
+ * discon_cb -- err callback function to call when err
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_get_connection_info(struct espconn *pespconn, remot_info **pcon_info, uint8 typeflags);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_sentcb
+ * Description : Used to specify the function that should be called when data
+ * has been successfully delivered to the remote host.
+ * Parameters : struct espconn *espconn -- espconn to set the sent callback
+ * espconn_sent_callback sent_cb -- sent callback function to
+ * call for this espconn when data is successfully sent
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_sentcb(struct espconn *espconn, espconn_sent_callback sent_cb);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_sentcb
+ * Description : Used to specify the function that should be called when data
+ * has been successfully delivered to the remote host.
+ * Parameters : espconn -- espconn to set the sent callback
+ * sent_cb -- sent callback function to call for this espconn
+ * when data is successfully sent
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_write_finish(struct espconn *espconn, espconn_connect_callback write_finish_fn);
+
+/******************************************************************************
+ * FunctionName : espconn_sent
+ * Description : sent data for client or server
+ * Parameters : espconn -- espconn to set for client or server
+ * psent -- data to send
+ * length -- length of data to send
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_sent(struct espconn *espconn, uint8 *psent, uint16 length);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_connectcb
+ * Description : used to specify the function that should be called when
+ * connects to host.
+ * Parameters : espconn -- espconn to set the connect callback
+ * connect_cb -- connected callback function to call when connected
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_connectcb(struct espconn *espconn, espconn_connect_callback connect_cb);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_recvcb
+ * Description : used to specify the function that should be called when recv
+ * data from host.
+ * Parameters : espconn -- espconn to set the recv callback
+ * recv_cb -- recv callback function to call when recv data
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_recvcb(struct espconn *espconn, espconn_recv_callback recv_cb);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_reconcb
+ * Description : used to specify the function that should be called when connection
+ * because of err disconnect.
+ * Parameters : espconn -- espconn to set the err callback
+ * recon_cb -- err callback function to call when err
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_reconcb(struct espconn *espconn, espconn_reconnect_callback recon_cb);
+
+/******************************************************************************
+ * FunctionName : espconn_regist_disconcb
+ * Description : used to specify the function that should be called when disconnect
+ * Parameters : espconn -- espconn to set the err callback
+ * discon_cb -- err callback function to call when err
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_regist_disconcb(struct espconn *espconn, espconn_connect_callback discon_cb);
+
+/******************************************************************************
+ * FunctionName : espconn_port
+ * Description : access port value for client so that we don't end up bouncing
+ * all connections at the same time .
+ * Parameters : none
+ * Returns : access port value
+*******************************************************************************/
+
+uint32 espconn_port(void);
+
+/******************************************************************************
+ * FunctionName : espconn_set_opt
+ * Description : access port value for client so that we don't end up bouncing
+ * all connections at the same time .
+ * Parameters : none
+ * Returns : access port value
+*******************************************************************************/
+
+sint8 espconn_set_opt(struct espconn *espconn, uint8 opt);
+
+/******************************************************************************
+ * TypedefName : dns_found_callback
+ * Description : Callback which is invoked when a hostname is found.
+ * Parameters : name -- pointer to the name that was looked up.
+ * ipaddr -- pointer to an ip_addr_t containing the IP address of
+ * the hostname, or NULL if the name could not be found (or on any
+ * other error).
+ * callback_arg -- a user-specified callback argument passed to
+ * dns_gethostbyname
+*******************************************************************************/
+
+typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);
+
+/******************************************************************************
+ * FunctionName : espconn_gethostbyname
+ * Description : Resolve a hostname (string) into an IP address.
+ * Parameters : pespconn -- espconn to resolve a hostname
+ * hostname -- the hostname that is to be queried
+ * addr -- pointer to a ip_addr_t where to store the address if
+ * it is already cached in the dns_table (only valid if ESPCONN_OK
+ * is returned!)
+ * found -- a callback function to be called on success, failure
+ * or timeout (only if ERR_INPROGRESS is returned!)
+ * Returns : err_t return code
+ * - ESPCONN_OK if hostname is a valid IP address string or the host
+ * name is already in the local names table.
+ * - ESPCONN_INPROGRESS enqueue a request to be sent to the DNS server
+ * for resolution if no errors are present.
+ * - ESPCONN_ARG: dns client not initialized or invalid hostname
+*******************************************************************************/
+
+err_t espconn_gethostbyname(struct espconn *pespconn, const char *hostname, ip_addr_t *addr, dns_found_callback found);
+
+/******************************************************************************
+ * FunctionName : espconn_encry_connect
+ * Description : The function given as connection
+ * Parameters : espconn -- the espconn used to connect with the host
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_secure_connect(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_encry_disconnect
+ * Description : The function given as the disconnection
+ * Parameters : espconn -- the espconn used to disconnect with the host
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_secure_disconnect(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_encry_sent
+ * Description : sent data for client or server
+ * Parameters : espconn -- espconn to set for client or server
+ * psent -- data to send
+ * length -- length of data to send
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_secure_sent(struct espconn *espconn, uint8 *psent, uint16 length);
+
+/******************************************************************************
+ * FunctionName : espconn_secure_accept
+ * Description : The function given as the listen
+ * Parameters : espconn -- the espconn used to listen the connection
+ * Returns : none
+*******************************************************************************/
+
+sint8 espconn_secure_accept(struct espconn *espconn);
+
+/******************************************************************************
+ * FunctionName : espconn_igmp_join
+ * Description : join a multicast group
+ * Parameters : host_ip -- the ip address of udp server
+ * multicast_ip -- multicast ip given by user
+ * Returns : none
+*******************************************************************************/
+sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
+
+/******************************************************************************
+ * FunctionName : espconn_igmp_leave
+ * Description : leave a multicast group
+ * Parameters : host_ip -- the ip address of udp server
+ * multicast_ip -- multicast ip given by user
+ * Returns : none
+*******************************************************************************/
+sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
+
+/******************************************************************************
+ * FunctionName : espconn_recv_hold
+ * Description : hold tcp receive
+ * Parameters : espconn -- espconn to hold
+ * Returns : none
+*******************************************************************************/
+sint8 espconn_recv_hold(struct espconn *pespconn);
+
+/******************************************************************************
+ * FunctionName : espconn_recv_unhold
+ * Description : unhold tcp receive
+ * Parameters : espconn -- espconn to unhold
+ * Returns : none
+*******************************************************************************/
+sint8 espconn_recv_unhold(struct espconn *pespconn);
+
+#endif
+
diff --git a/include/user_interface.h b/include/user_interface.h
index 1f5a9352..5cce16a4 100644
--- a/include/user_interface.h
+++ b/include/user_interface.h
@@ -89,6 +89,7 @@ bool system_rtc_mem_write(uint8 des_addr, const void *src_addr, uint16 save_size
void system_uart_swap(void);
uint16 system_adc_read(void);
+uint16 system_get_vdd33(void);
const char *system_get_sdk_version(void);
diff --git a/ld/eagle.app.v6.ld b/ld/eagle.app.v6.ld
index 48928643..068cff51 100644
--- a/ld/eagle.app.v6.ld
+++ b/ld/eagle.app.v6.ld
@@ -71,7 +71,6 @@ SECTIONS
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
- *(.rodata2.text)
_irom0_text_end = ABSOLUTE(.);
_flash_used_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
diff --git a/lib/libat.a b/lib/libat.a
index e1db9fa8..81d93ea8 100644
Binary files a/lib/libat.a and b/lib/libat.a differ
diff --git a/lib/libjson.a b/lib/libjson.a
index f32c329d..efb36fe4 100644
Binary files a/lib/libjson.a and b/lib/libjson.a differ
diff --git a/lib/liblwip.a b/lib/liblwip.a
index 6ef795bb..0f90932b 100644
Binary files a/lib/liblwip.a and b/lib/liblwip.a differ
diff --git a/lib/libmain.a b/lib/libmain.a
index 5d417167..aa5009af 100644
Binary files a/lib/libmain.a and b/lib/libmain.a differ
diff --git a/lib/libnet80211.a b/lib/libnet80211.a
index 5ae2da5c..94e738cf 100644
Binary files a/lib/libnet80211.a and b/lib/libnet80211.a differ
diff --git a/lib/libphy.a b/lib/libphy.a
index 1598f206..5702e4ef 100644
Binary files a/lib/libphy.a and b/lib/libphy.a differ
diff --git a/lib/libpp.a b/lib/libpp.a
index 17466205..daa4054e 100644
Binary files a/lib/libpp.a and b/lib/libpp.a differ
diff --git a/lib/libsmartconfig.a b/lib/libsmartconfig.a
index f402b5f3..9a8db685 100644
Binary files a/lib/libsmartconfig.a and b/lib/libsmartconfig.a differ
diff --git a/lib/libssl.a b/lib/libssl.a
index 36b78fe2..d360d36b 100644
Binary files a/lib/libssl.a and b/lib/libssl.a differ
diff --git a/lib/libupgrade.a b/lib/libupgrade.a
index 051d683b..fd9dbb78 100644
Binary files a/lib/libupgrade.a and b/lib/libupgrade.a differ
diff --git a/lib/libwpa.a b/lib/libwpa.a
index abd611b4..98ceb381 100644
Binary files a/lib/libwpa.a and b/lib/libwpa.a differ
diff --git a/pre_build/0.9.5/nodemcu_20150213.bin b/pre_build/0.9.5/nodemcu_20150213.bin
new file mode 100644
index 00000000..cb4fa0b1
Binary files /dev/null and b/pre_build/0.9.5/nodemcu_20150213.bin differ
diff --git a/pre_build/0.9.6/nodemcu_20150216.bin b/pre_build/0.9.6/nodemcu_20150216.bin
new file mode 100644
index 00000000..a1a89593
Binary files /dev/null and b/pre_build/0.9.6/nodemcu_20150216.bin differ
diff --git a/pre_build/latest/nodemcu_latest.bin b/pre_build/latest/nodemcu_latest.bin
index cb4fa0b1..a1a89593 100644
Binary files a/pre_build/latest/nodemcu_latest.bin and b/pre_build/latest/nodemcu_latest.bin differ