Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
38efa482
Commit
38efa482
authored
Nov 11, 2015
by
Robert Foss
Browse files
Merge remote-tracking branch 'upstream/dev' into dev
parents
d2fc8782
340edbbe
Changes
299
Hide whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
299 of 299+
files are displayed.
Plain diff
Email patch
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/gen_misc.sh
0 → 100644
View file @
38efa482
#!/bin/bash
echo
"gen_misc.sh version 20150511"
echo
""
echo
"Please follow below steps(1-5) to generate specific bin(s):"
echo
"STEP 1: choose boot version(0=boot_v1.1, 1=boot_v1.2+, 2=none)"
echo
"enter(0/1/2, default 2):"
read
input
if
[
-z
"
$input
"
]
;
then
boot
=
none
elif
[
$input
==
0
]
;
then
boot
=
old
elif
[
$input
==
1
]
;
then
boot
=
new
else
boot
=
none
fi
echo
"boot mode:
$boot
"
echo
""
echo
"STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)"
echo
"enter (0/1/2, default 0):"
read
input
if
[
-z
"
$input
"
]
;
then
if
[
$boot
!=
none
]
;
then
boot
=
none
echo
"ignore boot"
fi
app
=
0
echo
"generate bin: eagle.flash.bin+eagle.irom0text.bin"
elif
[
$input
==
1
]
;
then
if
[
$boot
==
none
]
;
then
app
=
0
echo
"choose no boot before"
echo
"generate bin: eagle.flash.bin+eagle.irom0text.bin"
else
app
=
1
echo
"generate bin: user1.bin"
fi
elif
[
$input
==
2
]
;
then
if
[
$boot
==
none
]
;
then
app
=
0
echo
"choose no boot before"
echo
"generate bin: eagle.flash.bin+eagle.irom0text.bin"
else
app
=
2
echo
"generate bin: user2.bin"
fi
else
if
[
$boot
!=
none
]
;
then
boot
=
none
echo
"ignore boot"
fi
app
=
0
echo
"generate bin: eagle.flash.bin+eagle.irom0text.bin"
fi
echo
""
echo
"STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)"
echo
"enter (0/1/2/3, default 2):"
read
input
if
[
-z
"
$input
"
]
;
then
spi_speed
=
40
elif
[
$input
==
0
]
;
then
spi_speed
=
20
elif
[
$input
==
1
]
;
then
spi_speed
=
26.7
elif
[
$input
==
3
]
;
then
spi_speed
=
80
else
spi_speed
=
40
fi
echo
"spi speed:
$spi_speed
MHz"
echo
""
echo
"STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)"
echo
"enter (0/1/2/3, default 0):"
read
input
if
[
-z
"
$input
"
]
;
then
spi_mode
=
QIO
elif
[
$input
==
1
]
;
then
spi_mode
=
QOUT
elif
[
$input
==
2
]
;
then
spi_mode
=
DIO
elif
[
$input
==
3
]
;
then
spi_mode
=
DOUT
else
spi_mode
=
QIO
fi
echo
"spi mode:
$spi_mode
"
echo
""
echo
"STEP 5: choose spi size and map"
echo
" 0= 512KB( 256KB+ 256KB)"
echo
" 2=1024KB( 512KB+ 512KB)"
echo
" 3=2048KB( 512KB+ 512KB)"
echo
" 4=4096KB( 512KB+ 512KB)"
echo
" 5=2048KB(1024KB+1024KB)"
echo
" 6=4096KB(1024KB+1024KB)"
echo
"enter (0/2/3/4/5/6, default 0):"
read
input
if
[
-z
"
$input
"
]
;
then
spi_size_map
=
0
echo
"spi size: 512KB"
echo
"spi ota map: 256KB + 256KB"
elif
[
$input
==
2
]
;
then
spi_size_map
=
2
echo
"spi size: 1024KB"
echo
"spi ota map: 512KB + 512KB"
elif
[
$input
==
3
]
;
then
spi_size_map
=
3
echo
"spi size: 2048KB"
echo
"spi ota map: 512KB + 512KB"
elif
[
$input
==
4
]
;
then
spi_size_map
=
4
echo
"spi size: 4096KB"
echo
"spi ota map: 512KB + 512KB"
elif
[
$input
==
5
]
;
then
spi_size_map
=
5
echo
"spi size: 2048KB"
echo
"spi ota map: 1024KB + 1024KB"
elif
[
$input
==
6
]
;
then
spi_size_map
=
6
echo
"spi size: 4096KB"
echo
"spi ota map: 1024KB + 1024KB"
else
spi_size_map
=
0
echo
"spi size: 512KB"
echo
"spi ota map: 256KB + 256KB"
fi
echo
""
touch
user/user_main.c
echo
""
echo
"start..."
echo
""
make
COMPILE
=
gcc
BOOT
=
$boot
APP
=
$app
SPI_SPEED
=
$spi_speed
SPI_MODE
=
$spi_mode
SPI_SIZE_MAP
=
$spi_size_map
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/driver/i2c_master.h
0 → 100644
View file @
38efa482
#ifndef __I2C_MASTER_H__
#define __I2C_MASTER_H__
#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U
#define I2C_MASTER_SDA_GPIO 2
#define I2C_MASTER_SCL_GPIO 14
#define I2C_MASTER_SDA_FUNC FUNC_GPIO2
#define I2C_MASTER_SCL_FUNC FUNC_GPIO14
//#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
//#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO0_U
//#define I2C_MASTER_SDA_GPIO 2
//#define I2C_MASTER_SCL_GPIO 0
//#define I2C_MASTER_SDA_FUNC FUNC_GPIO2
//#define I2C_MASTER_SCL_FUNC FUNC_GPIO0
#if 0
#define I2C_MASTER_GPIO_SET(pin) \
gpio_output_set(1<<pin,0,1<<pin,0)
#define I2C_MASTER_GPIO_CLR(pin) \
gpio_output_set(0,1<<pin,1<<pin,0)
#define I2C_MASTER_GPIO_OUT(pin,val) \
if(val) I2C_MASTER_GPIO_SET(pin);\
else I2C_MASTER_GPIO_CLR(pin)
#endif
#define I2C_MASTER_SDA_HIGH_SCL_HIGH() \
gpio_output_set
(
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
0
,
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
0
)
#define I2C_MASTER_SDA_HIGH_SCL_LOW() \
gpio_output_set
(
1
<<
I2C_MASTER_SDA_GPIO
,
1
<<
I2C_MASTER_SCL_GPIO
,
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
0
)
#define I2C_MASTER_SDA_LOW_SCL_HIGH() \
gpio_output_set
(
1
<<
I2C_MASTER_SCL_GPIO
,
1
<<
I2C_MASTER_SDA_GPIO
,
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
0
)
#define I2C_MASTER_SDA_LOW_SCL_LOW() \
gpio_output_set
(
0
,
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
1
<<
I2C_MASTER_SDA_GPIO
|
1
<<
I2C_MASTER_SCL_GPIO
,
0
)
void
i2c_master_gpio_init
(
void
);
void
i2c_master_init
(
void
);
#define i2c_master_wait os_delay_us
void
i2c_master_stop
(
void
);
void
i2c_master_start
(
void
);
void
i2c_master_setAck
(
uint8
level
);
uint8
i2c_master_getAck
(
void
);
uint8
i2c_master_readByte
(
void
);
void
i2c_master_writeByte
(
uint8
wrdata
);
bool
i2c_master_checkAck
(
void
);
void
i2c_master_send_ack
(
void
);
void
i2c_master_send_nack
(
void
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/driver/key.h
0 → 100644
View file @
38efa482
#ifndef __KEY_H__
#define __KEY_H__
#include "gpio.h"
typedef
void
(
*
key_function
)(
void
);
struct
single_key_param
{
uint8
key_level
;
uint8
gpio_id
;
uint8
gpio_func
;
uint32
gpio_name
;
os_timer_t
key_5s
;
os_timer_t
key_50ms
;
key_function
short_press
;
key_function
long_press
;
};
struct
keys_param
{
uint8
key_num
;
struct
single_key_param
**
single_key
;
};
struct
single_key_param
*
key_init_single
(
uint8
gpio_id
,
uint32
gpio_name
,
uint8
gpio_func
,
key_function
long_press
,
key_function
short_press
);
void
key_init
(
struct
keys_param
*
key
);
#endif
app
/include/ssl/cert.h
→
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo
/include/ssl/cert.h
View file @
38efa482
File moved
app
/include/ssl/private_key.h
→
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo
/include/ssl/private_key.h
View file @
38efa482
File moved
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_config.h
0 → 100644
View file @
38efa482
#ifndef __USER_CONFIG_H__
#define __USER_CONFIG_H__
#define ESP_PLATFORM 1
#define LEWEI_PLATFORM 0
#define USE_OPTIMIZE_PRINTF
#if ESP_PLATFORM
#define PLUG_DEVICE 0
#define LIGHT_DEVICE 1
#define SENSOR_DEVICE 0
#if SENSOR_DEVICE
#define HUMITURE_SUB_DEVICE 1
#define FLAMMABLE_GAS_SUB_DEVICE 0
#endif
//#define SERVER_SSL_ENABLE
//#define CLIENT_SSL_ENABLE
//#define UPGRADE_SSL_ENABLE
#define USE_DNS
#ifdef USE_DNS
#define ESP_DOMAIN "iot.espressif.cn"
#endif
//#define SOFTAP_ENCRYPT
#ifdef SOFTAP_ENCRYPT
#define PASSWORD "v*%W>L<@i&Nxe!"
#endif
#if SENSOR_DEVICE
#define SENSOR_DEEP_SLEEP
#if HUMITURE_SUB_DEVICE
#define SENSOR_DEEP_SLEEP_TIME 30000000
#elif FLAMMABLE_GAS_SUB_DEVICE
#define SENSOR_DEEP_SLEEP_TIME 60000000
#endif
#endif
#if LIGHT_DEVICE
#define USE_US_TIMER
#endif
#if PLUG_DEVICE || LIGHT_DEVICE
#define BEACON_TIMEOUT 150000000
#define BEACON_TIME 50000
#endif
#define AP_CACHE 1
#if AP_CACHE
#define AP_CACHE_NUMBER 5
#endif
#elif LEWEI_PLATFORM
#endif
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_devicefind.h
0 → 100644
View file @
38efa482
#ifndef __USER_DEVICEFIND_H__
#define __USER_DEVICEFIND_H__
void
user_devicefind_init
(
void
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_esp_platform.h
0 → 100644
View file @
38efa482
#ifndef __USER_DEVICE_H__
#define __USER_DEVICE_H__
/* NOTICE---this is for 512KB spi flash.
* you can change to other sector if you use other size spi flash. */
#define ESP_PARAM_START_SEC 0x3D
#define packet_size (2 * 1024)
#define token_size 41
struct
esp_platform_saved_param
{
uint8
devkey
[
40
];
uint8
token
[
40
];
uint8
activeflag
;
uint8
pad
[
3
];
};
enum
{
DEVICE_CONNECTING
=
40
,
DEVICE_ACTIVE_DONE
,
DEVICE_ACTIVE_FAIL
,
DEVICE_CONNECT_SERVER_FAIL
};
struct
dhcp_client_info
{
ip_addr_t
ip_addr
;
ip_addr_t
netmask
;
ip_addr_t
gw
;
uint8
flag
;
uint8
pad
[
3
];
};
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_esp_platform_timer.h
0 → 100644
View file @
38efa482
#ifndef __USER_DEVICEFIND_H__
#define __USER_DEVICEFIND_H__
void
user_platform_timer_start
(
char
*
pbuffer
,
struct
espconn
*
pespconn
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_iot_version.h
0 → 100644
View file @
38efa482
#ifndef __USER_IOT_VERSION_H__
#define __USER_IOT_VERSION_H__
#include "user_config.h"
#define IOT_VERSION_MAJOR 1U
#define IOT_VERSION_MINOR 0U
#define IOT_VERSION_REVISION 5U
#define VERSION_NUM (IOT_VERSION_MAJOR * 1000 + IOT_VERSION_MINOR * 100 + IOT_VERSION_REVISION)
//#define VERSION_TYPE "b"
#define VERSION_TYPE "v"
#if LIGHT_DEVICE
#define device_type 45772
#elif PLUG_DEVICE
#define device_type 23701
#elif SENSOR_DEVICE
#define device_type 12335
#endif
#define ONLINE_UPGRADE 0
#define LOCAL_UPGRADE 0
#define ALL_UPGRADE 1
#define NONE_UPGRADE 0
#if ONLINE_UPGRADE
#define UPGRADE_FALG "O"
#elif LOCAL_UPGRADE
#define UPGRADE_FALG "l"
#elif ALL_UPGRADE
#define UPGRADE_FALG "a"
#elif NONE_UPGRADE
#define UPGRADE_FALG "n"
#endif
#define IOT_VERSION
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_json.h
0 → 100644
View file @
38efa482
#ifndef __USER_JSON_H__
#define __USER_JSON_H__
#include "json/jsonparse.h"
#include "json/jsontree.h"
#define jsonSize 2*1024
void
json_parse
(
struct
jsontree_context
*
json
,
char
*
ptrJSONMessage
);
void
json_ws_send
(
struct
jsontree_value
*
tree
,
const
char
*
path
,
char
*
pbuf
);
int
json_putchar
(
int
c
);
struct
jsontree_value
*
find_json_path
(
struct
jsontree_context
*
json
,
const
char
*
path
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_light.h
0 → 100644
View file @
38efa482
#ifndef __USER_LIGHT_H__
#define __USER_LIGHT_H__
/*pwm.h: function and macro definition of PWM API , driver level */
/*user_light.h: user interface for light API, user level*/
/*user_light_adj: API for color changing and lighting effects, user level*/
#include "pwm.h"
/* NOTICE !!! ---this is for 512KB spi flash.*/
/* You can change to other sector if you use other size spi flash. */
/* Refer to the documentation about OTA support and flash mapping*/
#define PRIV_PARAM_START_SEC 0x3C
#define PRIV_PARAM_SAVE 0
/*Define the channel number of PWM*/
/*In this demo, we can set 3 for 3 PWM channels: RED, GREEN, BLUE*/
/*Or , we can choose 5 channels : RED,GREEN,BLUE,COLD-WHITE,WARM-WHITE*/
#define PWM_CHANNEL 5 // 5:5channel ; 3:3channel
#define LIGHT_RED 0
#define LIGHT_GREEN 1
#define LIGHT_BLUE 2
#define LIGHT_COLD_WHITE 3
#define LIGHT_WARM_WHITE 4
/*Definition of GPIO PIN params, for GPIO initialization*/
#define PWM_0_OUT_IO_MUX PERIPHS_IO_MUX_MTDI_U
#define PWM_0_OUT_IO_NUM 12
#define PWM_0_OUT_IO_FUNC FUNC_GPIO12
#define PWM_1_OUT_IO_MUX PERIPHS_IO_MUX_MTDO_U
#define PWM_1_OUT_IO_NUM 15
#define PWM_1_OUT_IO_FUNC FUNC_GPIO15
#define PWM_2_OUT_IO_MUX PERIPHS_IO_MUX_MTCK_U
#define PWM_2_OUT_IO_NUM 13
#define PWM_2_OUT_IO_FUNC FUNC_GPIO13
#define PWM_3_OUT_IO_MUX PERIPHS_IO_MUX_MTMS_U
#define PWM_3_OUT_IO_NUM 14
#define PWM_3_OUT_IO_FUNC FUNC_GPIO14
#define PWM_4_OUT_IO_MUX PERIPHS_IO_MUX_GPIO5_U
#define PWM_4_OUT_IO_NUM 5
#define PWM_4_OUT_IO_FUNC FUNC_GPIO5
struct
light_saved_param
{
uint32
pwm_period
;
uint32
pwm_duty
[
PWM_CHANNEL
];
};
void
user_light_init
(
void
);
uint32
user_light_get_duty
(
uint8
channel
);
void
user_light_set_duty
(
uint32
duty
,
uint8
channel
);
uint32
user_light_get_period
(
void
);
void
user_light_set_period
(
uint32
period
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_light_adj.h
0 → 100644
View file @
38efa482
#ifndef __USER_LIGHT_ADJ_H__
#define __USER_LIGHT_ADJ_H__
/*pwm.h: function and macro definition of PWM API , driver level */
/*user_light.h: user interface for light setting, user level*/
/*user_light_adj: API for color changing and lighting effects, user level*/
/*save RGB params to flash when calling light_set_aim*/
#define SAVE_LIGHT_PARAM 0 //set to 0: do not save color params
/*check current consumption and limit the total current for LED driver IC*/
/*NOTE: YOU SHOULD REPLACE WIHT THE LIMIT CURRENT OF YOUR OWN APPLICATION*/
#define LIGHT_CURRENT_LIMIT 0 //set to 0: do not limit total current
#if LIGHT_CURRENT_LIMIT
#define LIGHT_TOTAL_CURRENT_MAX (450*1000) //450000/1000 MA AT MOST
#define LIGHT_CURRENT_MARGIN (80*1000) //80000/1000 MA CURRENT RAISES WHILE TEMPERATURE INCREASING
#define LIGHT_CURRENT_MARGIN_L2 (110*1000) //110000/1000 MA
#define LIGHT_CURRENT_MARGIN_L3 (140*1000) //140000/1000 MA
#endif
/*set target duty for PWM channels, change each channel duty gradually */
void
light_set_aim
(
uint32
r
,
uint32
g
,
uint32
b
,
uint32
cw
,
uint32
ww
,
uint32
period
);
//'white' channel is not used in default demo
void
light_set_aim_r
(
uint32
r
);
void
light_set_aim_g
(
uint32
g
);
void
light_set_aim_b
(
uint32
b
);
void
light_set_aim_cw
(
uint32
cw
);
void
light_set_aim_ww
(
uint32
ww
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_plug.h
0 → 100644
View file @
38efa482
#ifndef __USER_ESPSWITCH_H__
#define __USER_ESPSWITCH_H__
#include "driver/key.h"
/* NOTICE---this is for 512KB spi flash.
* you can change to other sector if you use other size spi flash. */
#define PRIV_PARAM_START_SEC 0x3C
#define PRIV_PARAM_SAVE 0
#define PLUG_KEY_NUM 1
#define PLUG_KEY_0_IO_MUX PERIPHS_IO_MUX_MTCK_U
#define PLUG_KEY_0_IO_NUM 13
#define PLUG_KEY_0_IO_FUNC FUNC_GPIO13
#define PLUG_WIFI_LED_IO_MUX PERIPHS_IO_MUX_GPIO0_U
#define PLUG_WIFI_LED_IO_NUM 0
#define PLUG_WIFI_LED_IO_FUNC FUNC_GPIO0
#define PLUG_LINK_LED_IO_MUX PERIPHS_IO_MUX_MTDI_U
#define PLUG_LINK_LED_IO_NUM 12
#define PLUG_LINK_LED_IO_FUNC FUNC_GPIO12
#define PLUG_RELAY_LED_IO_MUX PERIPHS_IO_MUX_MTDO_U
#define PLUG_RELAY_LED_IO_NUM 15
#define PLUG_RELAY_LED_IO_FUNC FUNC_GPIO15
#define PLUG_STATUS_OUTPUT(pin, on) GPIO_OUTPUT_SET(pin, on)
struct
plug_saved_param
{
uint8_t
status
;
uint8_t
pad
[
3
];
};
void
user_plug_init
(
void
);
uint8
user_plug_get_status
(
void
);
void
user_plug_set_status
(
bool
status
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_sensor.h
0 → 100644
View file @
38efa482
#ifndef __USER_SENSOR_H__
#define __USER_SENSOR_H__
#include "user_config.h"
#include "driver/key.h"
#define SENSOR_KEY_NUM 1
#define SENSOR_KEY_IO_MUX PERIPHS_IO_MUX_MTCK_U
#define SENSOR_KEY_IO_NUM 13
#define SENSOR_KEY_IO_FUNC FUNC_GPIO13
#define SENSOR_WIFI_LED_IO_MUX PERIPHS_IO_MUX_GPIO0_U
#define SENSOR_WIFI_LED_IO_NUM 0
#define SENSOR_WIFI_LED_IO_FUNC FUNC_GPIO0
#define SENSOR_LINK_LED_IO_MUX PERIPHS_IO_MUX_MTDI_U
#define SENSOR_LINK_LED_IO_NUM 12
#define SENSOR_LINK_LED_IO_FUNC FUNC_GPIO12
#define SENSOR_UNUSED_LED_IO_MUX PERIPHS_IO_MUX_MTDO_U
#define SENSOR_UNUSED_LED_IO_NUM 15
#define SENSOR_UNUSED_LED_IO_FUNC FUNC_GPIO15
#if HUMITURE_SUB_DEVICE
bool
user_mvh3004_read_th
(
uint8
*
data
);
void
user_mvh3004_init
(
void
);
#endif
void
user_sensor_init
(
uint8
active
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/include/user_webserver.h
0 → 100644
View file @
38efa482
#ifndef __USER_WEBSERVER_H__
#define __USER_WEBSERVER_H__
#define SERVER_PORT 80
#define SERVER_SSL_PORT 443
#define URLSize 10
typedef
enum
Result_Resp
{
RespFail
=
0
,
RespSuc
,
}
Result_Resp
;
typedef
enum
ProtocolType
{
GET
=
0
,
POST
,
}
ProtocolType
;
typedef
enum
_ParmType
{
SWITCH_STATUS
=
0
,
INFOMATION
,
WIFI
,
SCAN
,
REBOOT
,
DEEP_SLEEP
,
LIGHT_STATUS
,
CONNECT_STATUS
,
USER_BIN
}
ParmType
;
typedef
struct
URL_Frame
{
enum
ProtocolType
Type
;
char
pSelect
[
URLSize
];
char
pCommand
[
URLSize
];
char
pFilename
[
URLSize
];
}
URL_Frame
;
typedef
struct
_rst_parm
{
ParmType
parmtype
;
struct
espconn
*
pespconn
;
}
rst_parm
;
void
user_webserver_init
(
uint32
port
);
#endif
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/user/Makefile
0 → 100644
View file @
38efa482
#############################################################
# Required variables for each makefile
# Discard this section from all parent makefiles
# Expected variables (with automatic defaults):
# CSRCS (all "C" files in the dir)
# SUBDIRS (all subdirs with a Makefile)
# GEN_LIBS - list of libs to be generated ()
# GEN_IMAGES - list of images to be generated ()
# COMPONENTS_xxx - a list of libs/objs in the form
# subdir/lib to be extracted and rolled up into
# a generated lib/image xxx.a ()
#
ifndef
PDIR
GEN_LIBS
=
libuser.a
endif
#############################################################
# Configuration i.e. compile options etc.
# Target specific stuff (defines etc.) goes in here!
# Generally values applying to a tree are captured in the
# makefile at its root level - these are then overridden
# for a subtree within the makefile rooted therein
#
#DEFINES +=
#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
# corresponding to the common APIs applicable to modules
# rooted at that subtree. Accordingly, the INCLUDE PATH
# of a module can only contain the include directories up
# its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#
INCLUDES
:=
$(INCLUDES)
-I
$(PDIR)
include
INCLUDES
+=
-I
./
INCLUDES
+=
-I
../../include/ets
PDIR
:=
../
$(PDIR)
sinclude
$(PDIR)Makefile
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/user/user_devicefind.c
0 → 100644
View file @
38efa482
/******************************************************************************
* Copyright 2013-2014 Espressif Systems (Wuxi)
*
* FileName: user_devicefind.c
*
* Description: Find your hardware's information while working any mode.
*
* Modification history:
* 2014/3/12, v1.0 create this file.
*******************************************************************************/
#include "ets_sys.h"
#include "os_type.h"
#include "osapi.h"
#include "mem.h"
#include "user_interface.h"
#include "espconn.h"
#include "user_json.h"
#include "user_devicefind.h"
const
char
*
device_find_request
=
"Are You Espressif IOT Smart Device?"
;
#if PLUG_DEVICE
const
char
*
device_find_response_ok
=
"I'm Plug."
;
#elif LIGHT_DEVICE
const
char
*
device_find_response_ok
=
"I'm Light."
;
#elif SENSOR_DEVICE
#if HUMITURE_SUB_DEVICE
const
char
*
device_find_response_ok
=
"I'm Humiture."
;
#elif FLAMMABLE_GAS_SUB_DEVICE
const
char
*
device_find_response_ok
=
"I'm Flammable Gas."
;
#endif
#endif
/*---------------------------------------------------------------------------*/
LOCAL
struct
espconn
ptrespconn
;
/******************************************************************************
* FunctionName : user_devicefind_recv
* Description : Processing the received data from the host
* Parameters : arg -- Additional argument to pass to the callback function
* pusrdata -- The received data (or NULL when the connection has been closed!)
* length -- The length of received data
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_devicefind_recv
(
void
*
arg
,
char
*
pusrdata
,
unsigned
short
length
)
{
char
DeviceBuffer
[
40
]
=
{
0
};
char
Device_mac_buffer
[
60
]
=
{
0
};
char
hwaddr
[
6
];
remot_info
*
premot
=
NULL
;
struct
ip_info
ipconfig
;
if
(
wifi_get_opmode
()
!=
STATION_MODE
)
{
wifi_get_ip_info
(
SOFTAP_IF
,
&
ipconfig
);
wifi_get_macaddr
(
SOFTAP_IF
,
hwaddr
);
if
(
!
ip_addr_netcmp
((
struct
ip_addr
*
)
ptrespconn
.
proto
.
udp
->
remote_ip
,
&
ipconfig
.
ip
,
&
ipconfig
.
netmask
))
{
wifi_get_ip_info
(
STATION_IF
,
&
ipconfig
);
wifi_get_macaddr
(
STATION_IF
,
hwaddr
);
}
}
else
{
wifi_get_ip_info
(
STATION_IF
,
&
ipconfig
);
wifi_get_macaddr
(
STATION_IF
,
hwaddr
);
}
if
(
pusrdata
==
NULL
)
{
return
;
}
if
(
length
==
os_strlen
(
device_find_request
)
&&
os_strncmp
(
pusrdata
,
device_find_request
,
os_strlen
(
device_find_request
))
==
0
)
{
os_sprintf
(
DeviceBuffer
,
"%s"
MACSTR
" "
IPSTR
,
device_find_response_ok
,
MAC2STR
(
hwaddr
),
IP2STR
(
&
ipconfig
.
ip
));
os_printf
(
"%s
\n
"
,
DeviceBuffer
);
length
=
os_strlen
(
DeviceBuffer
);
if
(
espconn_get_connection_info
(
&
ptrespconn
,
&
premot
,
0
)
!=
ESPCONN_OK
)
return
;
os_memcpy
(
ptrespconn
.
proto
.
udp
->
remote_ip
,
premot
->
remote_ip
,
4
);
ptrespconn
.
proto
.
udp
->
remote_port
=
premot
->
remote_port
;
espconn_sent
(
&
ptrespconn
,
DeviceBuffer
,
length
);
}
else
if
(
length
==
(
os_strlen
(
device_find_request
)
+
18
))
{
os_sprintf
(
Device_mac_buffer
,
"%s "
MACSTR
,
device_find_request
,
MAC2STR
(
hwaddr
));
os_printf
(
"%s"
,
Device_mac_buffer
);
if
(
os_strncmp
(
Device_mac_buffer
,
pusrdata
,
os_strlen
(
device_find_request
)
+
18
)
==
0
)
{
//os_printf("%s\n", Device_mac_buffer);
length
=
os_strlen
(
DeviceBuffer
);
os_sprintf
(
DeviceBuffer
,
"%s"
MACSTR
" "
IPSTR
,
device_find_response_ok
,
MAC2STR
(
hwaddr
),
IP2STR
(
&
ipconfig
.
ip
));
os_printf
(
"%s
\n
"
,
DeviceBuffer
);
length
=
os_strlen
(
DeviceBuffer
);
if
(
espconn_get_connection_info
(
&
ptrespconn
,
&
premot
,
0
)
!=
ESPCONN_OK
)
return
;
os_memcpy
(
ptrespconn
.
proto
.
udp
->
remote_ip
,
premot
->
remote_ip
,
4
);
ptrespconn
.
proto
.
udp
->
remote_port
=
premot
->
remote_port
;
espconn_sent
(
&
ptrespconn
,
DeviceBuffer
,
length
);
}
else
{
return
;
}
}
}
/******************************************************************************
* FunctionName : user_devicefind_init
* Description : the espconn struct parame init
* Parameters : none
* Returns : none
*******************************************************************************/
void
ICACHE_FLASH_ATTR
user_devicefind_init
(
void
)
{
ptrespconn
.
type
=
ESPCONN_UDP
;
ptrespconn
.
proto
.
udp
=
(
esp_udp
*
)
os_zalloc
(
sizeof
(
esp_udp
));
ptrespconn
.
proto
.
udp
->
local_port
=
1025
;
espconn_regist_recvcb
(
&
ptrespconn
,
user_devicefind_recv
);
espconn_create
(
&
ptrespconn
);
}
sdk/esp_iot_sdk_v1.4.0/examples/IoT_Demo/user/user_esp_platform.c
0 → 100644
View file @
38efa482
/******************************************************************************
* Copyright 2013-2014 Espressif Systems (Wuxi)
*
* FileName: user_esp_platform.c
*
* Description: The client mode configration.
* Check your hardware connection with the host while use this mode.
*
* Modification history:
* 2014/5/09, v1.0 create this file.
*******************************************************************************/
#include "ets_sys.h"
#include "os_type.h"
#include "mem.h"
#include "osapi.h"
#include "user_interface.h"
#include "espconn.h"
#include "user_esp_platform.h"
#include "user_iot_version.h"
#include "upgrade.h"
#if ESP_PLATFORM
#define ESP_DEBUG
#ifdef ESP_DEBUG
#define ESP_DBG os_printf
#else
#define ESP_DBG
#endif
#define ACTIVE_FRAME "{\"nonce\": %d,\"path\": \"/v1/device/activate/\", \"method\": \"POST\", \"body\": {\"encrypt_method\": \"PLAIN\", \"token\": \"%s\", \"bssid\": \""MACSTR"\",\"rom_version\":\"%s\"}, \"meta\": {\"Authorization\": \"token %s\"}}\n"
#if PLUG_DEVICE
#include "user_plug.h"
#define RESPONSE_FRAME "{\"status\": 200, \"datapoint\": {\"x\": %d}, \"nonce\": %d, \"deliver_to_device\": true}\n"
#define FIRST_FRAME "{\"nonce\": %d, \"path\": \"/v1/device/identify\", \"method\": \"GET\",\"meta\": {\"Authorization\": \"token %s\"}}\n"
#elif LIGHT_DEVICE
#include "user_light.h"
#define RESPONSE_FRAME "{\"status\": 200,\"nonce\": %d, \"datapoint\": {\"x\": %d,\"y\": %d,\"z\": %d,\"k\": %d,\"l\": %d},\"deliver_to_device\":true}\n"
#define FIRST_FRAME "{\"nonce\": %d, \"path\": \"/v1/device/identify\", \"method\": \"GET\",\"meta\": {\"Authorization\": \"token %s\"}}\n"
#elif SENSOR_DEVICE
#include "user_sensor.h"
#if HUMITURE_SUB_DEVICE
#define UPLOAD_FRAME "{\"nonce\": %d, \"path\": \"/v1/datastreams/tem_hum/datapoint/\", \"method\": \"POST\", \
\
"body
\"
: {
\"
datapoint
\"
: {
\"
x
\"
: %s%d.%02d,
\"
y
\"
: %d.%02d}},
\"
meta
\"
: {
\"
Authorization
\"
:
\"
token %s
\"
}}
\n
"
#elif FLAMMABLE_GAS_SUB_DEVICE
#define UPLOAD_FRAME "{\"nonce\": %d, \"path\": \"/v1/datastreams/flammable_gas/datapoint/\", \"method\": \"POST\", \
\
"body
\"
: {
\"
datapoint
\"
: {
\"
x
\"
: %d.%03d}},
\"
meta
\"
: {
\"
Authorization
\"
:
\"
token %s
\"
}}
\n
"
#endif
LOCAL
uint32
count
=
0
;
#endif
#define UPGRADE_FRAME "{\"path\": \"/v1/messages/\", \"method\": \"POST\", \"meta\": {\"Authorization\": \"token %s\"},\
\
"get
\"
:{
\"
action
\"
:
\"
%s
\"
},
\"
body
\"
:{
\"
pre_rom_version
\"
:
\"
%s
\"
,
\"
rom_version
\"
:
\"
%s
\"
}}
\n
"
#if PLUG_DEVICE || LIGHT_DEVICE
#define BEACON_FRAME "{\"path\": \"/v1/ping/\", \"method\": \"POST\",\"meta\": {\"Authorization\": \"token %s\"}}\n"
#define RPC_RESPONSE_FRAME "{\"status\": 200, \"nonce\": %d, \"deliver_to_device\": true}\n"
#define TIMER_FRAME "{\"body\": {}, \"get\":{\"is_humanize_format_simple\":\"true\"},\"meta\": {\"Authorization\": \"Token %s\"},\"path\": \"/v1/device/timers/\",\"post\":{},\"method\": \"GET\"}\n"
#define pheadbuffer "Connection: keep-alive\r\n\
Cache
-
Control
:
no
-
cache
\
r
\
n
\
User
-
Agent
:
Mozilla
/
5
.
0
(
Windows
NT
5
.
1
)
AppleWebKit
/
537
.
36
(
KHTML
,
like
Gecko
)
Chrome
/
30
.
0
.
1599
.
101
Safari
/
537
.
36
\
r
\
n
\
Accept
:
*/
*
\
r
\
n
\
Authorization
:
token
%
s
\
r
\
n
\
Accept
-
Encoding
:
gzip
,
deflate
,
sdch
\
r
\
n
\
Accept
-
Language
:
zh
-
CN
,
zh
;
q
=
0
.
8
\
r
\
n
\
r
\
n
"
LOCAL uint8 ping_status;
LOCAL os_timer_t beacon_timer;
#endif
#ifdef USE_DNS
ip_addr_t esp_server_ip;
#endif
LOCAL struct espconn user_conn;
LOCAL struct _esp_tcp user_tcp;
LOCAL os_timer_t client_timer;
struct esp_platform_saved_param esp_param;
LOCAL uint8 device_status;
LOCAL uint8 device_recon_count = 0;
LOCAL uint32 active_nonce = 0;
LOCAL uint8 iot_version[20] = {0};
struct rst_info rtc_info;
void user_esp_platform_check_ip(uint8 reset_flag);
/******************************************************************************
* FunctionName : user_esp_platform_get_token
* Description : get the espressif's device token
* Parameters : token -- the parame point which write the flash
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_esp_platform_get_token(uint8_t *token)
{
if (token == NULL) {
return;
}
os_memcpy(token, esp_param.token, sizeof(esp_param.token));
}
/******************************************************************************
* FunctionName : user_esp_platform_set_token
* Description : save the token for the espressif's device
* Parameters : token -- the parame point which write the flash
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_esp_platform_set_token(uint8_t *token)
{
if (token == NULL) {
return;
}
esp_param.activeflag = 0;
os_memcpy(esp_param.token, token, os_strlen(token));
system_param_save_with_protect(ESP_PARAM_START_SEC, &esp_param, sizeof(esp_param));
}
/******************************************************************************
* FunctionName : user_esp_platform_set_active
* Description : set active flag
* Parameters : activeflag -- 0 or 1
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_esp_platform_set_active(uint8 activeflag)
{
esp_param.activeflag = activeflag;
system_param_save_with_protect(ESP_PARAM_START_SEC, &esp_param, sizeof(esp_param));
}
void ICACHE_FLASH_ATTR
user_esp_platform_set_connect_status(uint8 status)
{
device_status = status;
}
/******************************************************************************
* FunctionName : user_esp_platform_get_connect_status
* Description : get each connection step's status
* Parameters : none
* Returns : status
*******************************************************************************/
uint8 ICACHE_FLASH_ATTR
user_esp_platform_get_connect_status(void)
{
uint8 status = wifi_station_get_connect_status();
if (status == STATION_GOT_IP) {
status = (device_status == 0) ? DEVICE_CONNECTING : device_status;
}
ESP_DBG("
status
%
d
\
n
", status);
return status;
}
/******************************************************************************
* FunctionName : user_esp_platform_parse_nonce
* Description : parse the device nonce
* Parameters : pbuffer -- the recivce data point
* Returns : the nonce
*******************************************************************************/
int ICACHE_FLASH_ATTR
user_esp_platform_parse_nonce(char *pbuffer)
{
char *pstr = NULL;
char *pparse = NULL;
char noncestr[11] = {0};
int nonce = 0;
pstr = (char *)os_strstr(pbuffer, "
\
"nonce
\"
: "
);
if
(
pstr
!=
NULL
)
{
pstr
+=
9
;
pparse
=
(
char
*
)
os_strstr
(
pstr
,
","
);
if
(
pparse
!=
NULL
)
{
os_memcpy
(
noncestr
,
pstr
,
pparse
-
pstr
);
}
else
{
pparse
=
(
char
*
)
os_strstr
(
pstr
,
"}"
);
if
(
pparse
!=
NULL
)
{
os_memcpy
(
noncestr
,
pstr
,
pparse
-
pstr
);
}
else
{
pparse
=
(
char
*
)
os_strstr
(
pstr
,
"]"
);
if
(
pparse
!=
NULL
)
{
os_memcpy
(
noncestr
,
pstr
,
pparse
-
pstr
);
}
else
{
return
0
;
}
}
}
nonce
=
atoi
(
noncestr
);
}
return
nonce
;
}
/******************************************************************************
* FunctionName : user_esp_platform_get_info
* Description : get and update the espressif's device status
* Parameters : pespconn -- the espconn used to connect with host
* pbuffer -- prossing the data point
* Returns : none
*******************************************************************************/
void
ICACHE_FLASH_ATTR
user_esp_platform_get_info
(
struct
espconn
*
pconn
,
uint8
*
pbuffer
)
{
char
*
pbuf
=
NULL
;
int
nonce
=
0
;
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
nonce
=
user_esp_platform_parse_nonce
(
pbuffer
);
if
(
pbuf
!=
NULL
)
{
#if PLUG_DEVICE
os_sprintf
(
pbuf
,
RESPONSE_FRAME
,
user_plug_get_status
(),
nonce
);
#elif LIGHT_DEVICE
uint32
white_val
;
white_val
=
(
PWM_CHANNEL
>
LIGHT_COLD_WHITE
?
user_light_get_duty
(
LIGHT_COLD_WHITE
)
:
0
);
os_sprintf
(
pbuf
,
RESPONSE_FRAME
,
nonce
,
user_light_get_period
(),
user_light_get_duty
(
LIGHT_RED
),
user_light_get_duty
(
LIGHT_GREEN
),
user_light_get_duty
(
LIGHT_BLUE
),
white_val
);
//50);
#endif
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
os_free
(
pbuf
);
pbuf
=
NULL
;
}
}
/******************************************************************************
* FunctionName : user_esp_platform_set_info
* Description : prossing the data and controling the espressif's device
* Parameters : pespconn -- the espconn used to connect with host
* pbuffer -- prossing the data point
* Returns : none
*******************************************************************************/
void
ICACHE_FLASH_ATTR
user_esp_platform_set_info
(
struct
espconn
*
pconn
,
uint8
*
pbuffer
)
{
#if PLUG_DEVICE
char
*
pstr
=
NULL
;
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"plug-status"
);
if
(
pstr
!=
NULL
)
{
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"body"
);
if
(
pstr
!=
NULL
)
{
if
(
os_strncmp
(
pstr
+
27
,
"1"
,
1
)
==
0
)
{
user_plug_set_status
(
0x01
);
}
else
if
(
os_strncmp
(
pstr
+
27
,
"0"
,
1
)
==
0
)
{
user_plug_set_status
(
0x00
);
}
}
}
#elif LIGHT_DEVICE
char
*
pstr
=
NULL
;
char
*
pdata
=
NULL
;
char
*
pbuf
=
NULL
;
char
recvbuf
[
10
];
uint16
length
=
0
;
uint32
data
=
0
;
static
uint32
rr
,
gg
,
bb
,
cw
,
ww
,
period
;
ww
=
0
;
cw
=
0
;
extern
uint8
light_sleep_flg
;
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
path
\"
:
\"
/v1/datastreams/light/datapoint/
\"
"
);
if
(
pstr
!=
NULL
)
{
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"{
\"
datapoint
\"
: "
);
if
(
pstr
!=
NULL
)
{
pbuf
=
(
char
*
)
os_strstr
(
pbuffer
,
"}}"
);
length
=
pbuf
-
pstr
;
length
+=
2
;
pdata
=
(
char
*
)
os_zalloc
(
length
+
1
);
os_memcpy
(
pdata
,
pstr
,
length
);
pstr
=
(
char
*
)
os_strchr
(
pdata
,
'x'
);
if
(
pstr
!=
NULL
)
{
pstr
+=
4
;
pbuf
=
(
char
*
)
os_strchr
(
pstr
,
','
);
if
(
pbuf
!=
NULL
)
{
length
=
pbuf
-
pstr
;
os_memset
(
recvbuf
,
0
,
10
);
os_memcpy
(
recvbuf
,
pstr
,
length
);
data
=
atoi
(
recvbuf
);
period
=
data
;
//user_light_set_period(data);
}
}
pstr
=
(
char
*
)
os_strchr
(
pdata
,
'y'
);
if
(
pstr
!=
NULL
)
{
pstr
+=
4
;
pbuf
=
(
char
*
)
os_strchr
(
pstr
,
','
);
if
(
pbuf
!=
NULL
)
{
length
=
pbuf
-
pstr
;
os_memset
(
recvbuf
,
0
,
10
);
os_memcpy
(
recvbuf
,
pstr
,
length
);
data
=
atoi
(
recvbuf
);
rr
=
data
;
os_printf
(
"r: %d
\r\n
"
,
rr
);
//user_light_set_duty(data, 0);
}
}
pstr
=
(
char
*
)
os_strchr
(
pdata
,
'z'
);
if
(
pstr
!=
NULL
)
{
pstr
+=
4
;
pbuf
=
(
char
*
)
os_strchr
(
pstr
,
','
);
if
(
pbuf
!=
NULL
)
{
length
=
pbuf
-
pstr
;
os_memset
(
recvbuf
,
0
,
10
);
os_memcpy
(
recvbuf
,
pstr
,
length
);
data
=
atoi
(
recvbuf
);
gg
=
data
;
os_printf
(
"g: %d
\r\n
"
,
gg
);
//user_light_set_duty(data, 1);
}
}
pstr
=
(
char
*
)
os_strchr
(
pdata
,
'k'
);
if
(
pstr
!=
NULL
)
{
pstr
+=
4
;;
pbuf
=
(
char
*
)
os_strchr
(
pstr
,
','
);
if
(
pbuf
!=
NULL
)
{
length
=
pbuf
-
pstr
;
os_memset
(
recvbuf
,
0
,
10
);
os_memcpy
(
recvbuf
,
pstr
,
length
);
data
=
atoi
(
recvbuf
);
bb
=
data
;
os_printf
(
"b: %d
\r\n
"
,
bb
);
//user_light_set_duty(data, 2);
}
}
pstr
=
(
char
*
)
os_strchr
(
pdata
,
'l'
);
if
(
pstr
!=
NULL
)
{
pstr
+=
4
;;
pbuf
=
(
char
*
)
os_strchr
(
pstr
,
','
);
if
(
pbuf
!=
NULL
)
{
length
=
pbuf
-
pstr
;
os_memset
(
recvbuf
,
0
,
10
);
os_memcpy
(
recvbuf
,
pstr
,
length
);
data
=
atoi
(
recvbuf
);
cw
=
data
;
ww
=
data
;
os_printf
(
"cw: %d
\r\n
"
,
cw
);
os_printf
(
"ww:%d
\r\n
"
,
ww
);
//chg
//user_light_set_duty(data, 2);
}
}
os_free
(
pdata
);
}
}
if
((
rr
|
gg
|
bb
|
cw
|
ww
)
==
0
){
if
(
light_sleep_flg
==
0
){
}
}
else
{
if
(
light_sleep_flg
==
1
){
os_printf
(
"modem sleep en
\r\n
"
);
wifi_set_sleep_type
(
MODEM_SLEEP_T
);
light_sleep_flg
=
0
;
}
}
light_set_aim
(
rr
,
gg
,
bb
,
cw
,
ww
,
period
);
//user_light_restart();
#endif
user_esp_platform_get_info
(
pconn
,
pbuffer
);
}
/******************************************************************************
* FunctionName : user_esp_platform_reconnect
* Description : reconnect with host after get ip
* Parameters : pespconn -- the espconn used to reconnect with host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_reconnect
(
struct
espconn
*
pespconn
)
{
ESP_DBG
(
"user_esp_platform_reconnect
\n
"
);
user_esp_platform_check_ip
(
0
);
}
/******************************************************************************
* FunctionName : user_esp_platform_discon_cb
* Description : disconnect successfully with the host
* Parameters : arg -- Additional argument to pass to the callback function
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_discon_cb
(
void
*
arg
)
{
struct
espconn
*
pespconn
=
arg
;
struct
ip_info
ipconfig
;
struct
dhcp_client_info
dhcp_info
;
ESP_DBG
(
"user_esp_platform_discon_cb
\n
"
);
#if (PLUG_DEVICE || LIGHT_DEVICE)
os_timer_disarm
(
&
beacon_timer
);
#endif
if
(
pespconn
==
NULL
)
{
return
;
}
pespconn
->
proto
.
tcp
->
local_port
=
espconn_port
();
#if (PLUG_DEVICE || SENSOR_DEVICE)
user_link_led_output
(
1
);
#endif
#if SENSOR_DEVICE
#ifdef SENSOR_DEEP_SLEEP
if
(
wifi_get_opmode
()
==
STATION_MODE
)
{
/***add by tzx for saving ip_info to avoid dhcp_client start****/
wifi_get_ip_info
(
STATION_IF
,
&
ipconfig
);
dhcp_info
.
ip_addr
=
ipconfig
.
ip
;
dhcp_info
.
netmask
=
ipconfig
.
netmask
;
dhcp_info
.
gw
=
ipconfig
.
gw
;
dhcp_info
.
flag
=
0x01
;
os_printf
(
"dhcp_info.ip_addr = %d
\n
"
,
dhcp_info
.
ip_addr
);
system_rtc_mem_write
(
64
,
&
dhcp_info
,
sizeof
(
struct
dhcp_client_info
));
user_sensor_deep_sleep_enter
();
}
else
{
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_reconnect
,
pespconn
);
os_timer_arm
(
&
client_timer
,
SENSOR_DEEP_SLEEP_TIME
/
1000
,
0
);
}
#else
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_reconnect
,
pespconn
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
#endif
#else
user_esp_platform_reconnect
(
pespconn
);
#endif
}
/******************************************************************************
* FunctionName : user_esp_platform_discon
* Description : A new incoming connection has been disconnected.
* Parameters : espconn -- the espconn used to disconnect with host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_discon
(
struct
espconn
*
pespconn
)
{
ESP_DBG
(
"user_esp_platform_discon
\n
"
);
#if (PLUG_DEVICE || SENSOR_DEVICE)
user_link_led_output
(
1
);
#endif
#ifdef CLIENT_SSL_ENABLE
espconn_secure_disconnect
(
pespconn
);
#else
espconn_disconnect
(
pespconn
);
#endif
}
/******************************************************************************
* FunctionName : user_esp_platform_sent_cb
* Description : Data has been sent successfully and acknowledged by the remote host.
* Parameters : arg -- Additional argument to pass to the callback function
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_sent_cb
(
void
*
arg
)
{
struct
espconn
*
pespconn
=
arg
;
ESP_DBG
(
"user_esp_platform_sent_cb
\n
"
);
}
/******************************************************************************
* FunctionName : user_esp_platform_sent
* Description : Processing the application data and sending it to the host
* Parameters : pespconn -- the espconn used to connetion with the host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_sent
(
struct
espconn
*
pespconn
)
{
uint8
devkey
[
token_size
]
=
{
0
};
uint32
nonce
;
char
*
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
os_memcpy
(
devkey
,
esp_param
.
devkey
,
40
);
if
(
esp_param
.
activeflag
==
0xFF
)
{
esp_param
.
activeflag
=
0
;
}
if
(
pbuf
!=
NULL
)
{
if
(
esp_param
.
activeflag
==
0
)
{
uint8
token
[
token_size
]
=
{
0
};
uint8
bssid
[
6
];
active_nonce
=
os_random
()
&
0x7FFFFFFF
;
os_memcpy
(
token
,
esp_param
.
token
,
40
);
wifi_get_macaddr
(
STATION_IF
,
bssid
);
os_sprintf
(
pbuf
,
ACTIVE_FRAME
,
active_nonce
,
token
,
MAC2STR
(
bssid
),
iot_version
,
devkey
);
}
#if SENSOR_DEVICE
#if HUMITURE_SUB_DEVICE
else
{
#if 0
uint16 tp, rh;
uint8 data[4];
if (user_mvh3004_read_th(data)) {
rh = data[0] << 8 | data[1];
tp = data[2] << 8 | data[3];
}
#else
uint16
tp
,
rh
;
uint8
*
data
;
uint32
tp_t
,
rh_t
;
data
=
(
uint8
*
)
user_mvh3004_get_poweron_th
();
rh
=
data
[
0
]
<<
8
|
data
[
1
];
tp
=
data
[
2
]
<<
8
|
data
[
3
];
#endif
tp_t
=
(
tp
>>
2
)
*
165
*
100
/
(
16384
-
1
);
rh_t
=
(
rh
&
0x3fff
)
*
100
*
100
/
(
16384
-
1
);
if
(
tp_t
>=
4000
)
{
os_sprintf
(
pbuf
,
UPLOAD_FRAME
,
count
,
""
,
tp_t
/
100
-
40
,
tp_t
%
100
,
rh_t
/
100
,
rh_t
%
100
,
devkey
);
}
else
{
tp_t
=
4000
-
tp_t
;
os_sprintf
(
pbuf
,
UPLOAD_FRAME
,
count
,
"-"
,
tp_t
/
100
,
tp_t
%
100
,
rh_t
/
100
,
rh_t
%
100
,
devkey
);
}
}
#elif FLAMMABLE_GAS_SUB_DEVICE
else
{
uint32
adc_value
=
system_adc_read
();
os_sprintf
(
pbuf
,
UPLOAD_FRAME
,
count
,
adc_value
/
1024
,
adc_value
*
1000
/
1024
,
devkey
);
}
#endif
#else
else
{
nonce
=
os_random
()
&
0x7FFFFFFF
;
os_sprintf
(
pbuf
,
FIRST_FRAME
,
nonce
,
devkey
);
}
#endif
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
os_free
(
pbuf
);
}
}
#if PLUG_DEVICE || LIGHT_DEVICE
/******************************************************************************
* FunctionName : user_esp_platform_sent_beacon
* Description : sent beacon frame for connection with the host is activate
* Parameters : pespconn -- the espconn used to connetion with the host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_sent_beacon
(
struct
espconn
*
pespconn
)
{
if
(
pespconn
==
NULL
)
{
return
;
}
if
(
pespconn
->
state
==
ESPCONN_CONNECT
)
{
if
(
esp_param
.
activeflag
==
0
)
{
ESP_DBG
(
"please check device is activated.
\n
"
);
user_esp_platform_sent
(
pespconn
);
}
else
{
uint8
devkey
[
token_size
]
=
{
0
};
os_memcpy
(
devkey
,
esp_param
.
devkey
,
40
);
ESP_DBG
(
"user_esp_platform_sent_beacon %u
\n
"
,
system_get_time
());
if
(
ping_status
==
0
)
{
ESP_DBG
(
"user_esp_platform_sent_beacon sent fail!
\n
"
);
user_esp_platform_discon
(
pespconn
);
}
else
{
char
*
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
if
(
pbuf
!=
NULL
)
{
os_sprintf
(
pbuf
,
BEACON_FRAME
,
devkey
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
ping_status
=
0
;
os_timer_arm
(
&
beacon_timer
,
BEACON_TIME
,
0
);
os_free
(
pbuf
);
}
}
}
}
else
{
ESP_DBG
(
"user_esp_platform_sent_beacon sent fail!
\n
"
);
user_esp_platform_discon
(
pespconn
);
}
}
/******************************************************************************
* FunctionName : user_platform_rpc_set_rsp
* Description : response the message to server to show setting info is received
* Parameters : pespconn -- the espconn used to connetion with the host
* nonce -- mark the message received from server
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_platform_rpc_set_rsp
(
struct
espconn
*
pespconn
,
int
nonce
)
{
char
*
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
if
(
pespconn
==
NULL
)
{
return
;
}
os_sprintf
(
pbuf
,
RPC_RESPONSE_FRAME
,
nonce
);
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
os_free
(
pbuf
);
}
/******************************************************************************
* FunctionName : user_platform_timer_get
* Description : get the timers from server
* Parameters : pespconn -- the espconn used to connetion with the host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_platform_timer_get
(
struct
espconn
*
pespconn
)
{
uint8
devkey
[
token_size
]
=
{
0
};
char
*
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
os_memcpy
(
devkey
,
esp_param
.
devkey
,
40
);
if
(
pespconn
==
NULL
)
{
return
;
}
os_sprintf
(
pbuf
,
TIMER_FRAME
,
devkey
);
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
os_free
(
pbuf
);
}
/******************************************************************************
* FunctionName : user_esp_platform_upgrade_cb
* Description : Processing the downloaded data from the server
* Parameters : pespconn -- the espconn used to connetion with the host
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_upgrade_rsp
(
void
*
arg
)
{
struct
upgrade_server_info
*
server
=
arg
;
struct
espconn
*
pespconn
=
server
->
pespconn
;
uint8
devkey
[
41
]
=
{
0
};
uint8
*
pbuf
=
NULL
;
char
*
action
=
NULL
;
os_memcpy
(
devkey
,
esp_param
.
devkey
,
40
);
pbuf
=
(
char
*
)
os_zalloc
(
packet_size
);
if
(
server
->
upgrade_flag
==
true
)
{
ESP_DBG
(
"user_esp_platform_upgarde_successfully
\n
"
);
action
=
"device_upgrade_success"
;
os_sprintf
(
pbuf
,
UPGRADE_FRAME
,
devkey
,
action
,
server
->
pre_version
,
server
->
upgrade_version
);
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
if
(
pbuf
!=
NULL
)
{
os_free
(
pbuf
);
pbuf
=
NULL
;
}
}
else
{
ESP_DBG
(
"user_esp_platform_upgrade_failed
\n
"
);
action
=
"device_upgrade_failed"
;
os_sprintf
(
pbuf
,
UPGRADE_FRAME
,
devkey
,
action
,
server
->
pre_version
,
server
->
upgrade_version
);
ESP_DBG
(
"%s
\n
"
,
pbuf
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#else
espconn_sent
(
pespconn
,
pbuf
,
os_strlen
(
pbuf
));
#endif
if
(
pbuf
!=
NULL
)
{
os_free
(
pbuf
);
pbuf
=
NULL
;
}
}
os_free
(
server
->
url
);
server
->
url
=
NULL
;
os_free
(
server
);
server
=
NULL
;
}
/******************************************************************************
* FunctionName : user_esp_platform_upgrade_begin
* Description : Processing the received data from the server
* Parameters : pespconn -- the espconn used to connetion with the host
* server -- upgrade param
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_upgrade_begin
(
struct
espconn
*
pespconn
,
struct
upgrade_server_info
*
server
)
{
uint8
user_bin
[
9
]
=
{
0
};
uint8
devkey
[
41
]
=
{
0
};
server
->
pespconn
=
pespconn
;
os_memcpy
(
devkey
,
esp_param
.
devkey
,
40
);
os_memcpy
(
server
->
ip
,
pespconn
->
proto
.
tcp
->
remote_ip
,
4
);
#ifdef UPGRADE_SSL_ENABLE
server
->
port
=
443
;
#else
server
->
port
=
80
;
#endif
server
->
check_cb
=
user_esp_platform_upgrade_rsp
;
server
->
check_times
=
120000
;
if
(
server
->
url
==
NULL
)
{
server
->
url
=
(
uint8
*
)
os_zalloc
(
512
);
}
if
(
system_upgrade_userbin_check
()
==
UPGRADE_FW_BIN1
)
{
os_memcpy
(
user_bin
,
"user2.bin"
,
10
);
}
else
if
(
system_upgrade_userbin_check
()
==
UPGRADE_FW_BIN2
)
{
os_memcpy
(
user_bin
,
"user1.bin"
,
10
);
}
os_sprintf
(
server
->
url
,
"GET /v1/device/rom/?action=download_rom&version=%s&filename=%s HTTP/1.0
\r\n
Host: "
IPSTR
":%d
\r\n
"
pheadbuffer
""
,
server
->
upgrade_version
,
user_bin
,
IP2STR
(
server
->
ip
),
server
->
port
,
devkey
);
ESP_DBG
(
"%s
\n
"
,
server
->
url
);
#ifdef UPGRADE_SSL_ENABLE
if
(
system_upgrade_start_ssl
(
server
)
==
false
)
{
#else
if
(
system_upgrade_start
(
server
)
==
false
)
{
#endif
ESP_DBG
(
"upgrade is already started
\n
"
);
}
}
#endif
/******************************************************************************
* FunctionName : user_esp_platform_recv_cb
* Description : Processing the received data from the server
* Parameters : arg -- Additional argument to pass to the callback function
* pusrdata -- The received data (or NULL when the connection has been closed!)
* length -- The length of received data
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_recv_cb
(
void
*
arg
,
char
*
pusrdata
,
unsigned
short
length
)
{
char
*
pstr
=
NULL
;
LOCAL
char
pbuffer
[
1024
*
2
]
=
{
0
};
struct
espconn
*
pespconn
=
arg
;
ESP_DBG
(
"user_esp_platform_recv_cb %s
\n
"
,
pusrdata
);
#if (PLUG_DEVICE || LIGHT_DEVICE)
os_timer_disarm
(
&
beacon_timer
);
#endif
if
(
length
==
1460
)
{
os_memcpy
(
pbuffer
,
pusrdata
,
length
);
}
else
{
struct
espconn
*
pespconn
=
(
struct
espconn
*
)
arg
;
os_memcpy
(
pbuffer
+
os_strlen
(
pbuffer
),
pusrdata
,
length
);
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
activate_status
\"
: "
))
!=
NULL
&&
user_esp_platform_parse_nonce
(
pbuffer
)
==
active_nonce
)
{
if
(
os_strncmp
(
pstr
+
19
,
"1"
,
1
)
==
0
)
{
ESP_DBG
(
"device activates successful.
\n
"
);
device_status
=
DEVICE_ACTIVE_DONE
;
esp_param
.
activeflag
=
1
;
system_param_save_with_protect
(
ESP_PARAM_START_SEC
,
&
esp_param
,
sizeof
(
esp_param
));
user_esp_platform_sent
(
pespconn
);
if
(
LIGHT_DEVICE
){
system_restart
();
}
}
else
{
ESP_DBG
(
"device activates failed.
\n
"
);
device_status
=
DEVICE_ACTIVE_FAIL
;
}
}
#if (PLUG_DEVICE || LIGHT_DEVICE)
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
action
\"
:
\"
sys_upgrade
\"
"
))
!=
NULL
)
{
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
version
\"
:"
))
!=
NULL
)
{
struct
upgrade_server_info
*
server
=
NULL
;
int
nonce
=
user_esp_platform_parse_nonce
(
pbuffer
);
user_platform_rpc_set_rsp
(
pespconn
,
nonce
);
server
=
(
struct
upgrade_server_info
*
)
os_zalloc
(
sizeof
(
struct
upgrade_server_info
));
os_memcpy
(
server
->
upgrade_version
,
pstr
+
12
,
16
);
server
->
upgrade_version
[
15
]
=
'\0'
;
os_sprintf
(
server
->
pre_version
,
"%s%d.%d.%dt%d(%s)"
,
VERSION_TYPE
,
IOT_VERSION_MAJOR
,
\
IOT_VERSION_MINOR
,
IOT_VERSION_REVISION
,
device_type
,
UPGRADE_FALG
);
user_esp_platform_upgrade_begin
(
pespconn
,
server
);
}
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
action
\"
:
\"
sys_reboot
\"
"
))
!=
NULL
)
{
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
system_upgrade_reboot
,
NULL
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"/v1/device/timers/"
))
!=
NULL
)
{
int
nonce
=
user_esp_platform_parse_nonce
(
pbuffer
);
user_platform_rpc_set_rsp
(
pespconn
,
nonce
);
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_platform_timer_get
,
pespconn
);
os_timer_arm
(
&
client_timer
,
2000
,
0
);
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
method
\"
: "
))
!=
NULL
)
{
if
(
os_strncmp
(
pstr
+
11
,
"GET"
,
3
)
==
0
)
{
user_esp_platform_get_info
(
pespconn
,
pbuffer
);
}
else
if
(
os_strncmp
(
pstr
+
11
,
"POST"
,
4
)
==
0
)
{
user_esp_platform_set_info
(
pespconn
,
pbuffer
);
}
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"ping success"
))
!=
NULL
)
{
ESP_DBG
(
"ping success
\n
"
);
ping_status
=
1
;
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"send message success"
))
!=
NULL
)
{
}
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"timers"
))
!=
NULL
)
{
user_platform_timer_start
(
pusrdata
,
pespconn
);
}
#elif SENSOR_DEVICE
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"
\"
status
\"
:"
))
!=
NULL
)
{
if
(
os_strncmp
(
pstr
+
10
,
"200"
,
3
)
!=
0
)
{
ESP_DBG
(
"message upload failed.
\n
"
);
}
else
{
count
++
;
ESP_DBG
(
"message upload sucessful.
\n
"
);
}
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_discon
,
pespconn
);
os_timer_arm
(
&
client_timer
,
10
,
0
);
}
#endif
else
if
((
pstr
=
(
char
*
)
os_strstr
(
pbuffer
,
"device"
))
!=
NULL
)
{
#if PLUG_DEVICE || LIGHT_DEVICE
user_platform_timer_get
(
pespconn
);
#elif SENSOR_DEVICE
#endif
}
os_memset
(
pbuffer
,
0
,
sizeof
(
pbuffer
));
}
#if (PLUG_DEVICE || LIGHT_DEVICE)
os_timer_arm
(
&
beacon_timer
,
BEACON_TIME
,
0
);
#endif
}
#if AP_CACHE
/******************************************************************************
* FunctionName : user_esp_platform_ap_change
* Description : add the user interface for changing to next ap ID.
* Parameters :
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_ap_change
(
void
)
{
uint8
current_id
;
uint8
i
=
0
;
ESP_DBG
(
"user_esp_platform_ap_is_changing
\n
"
);
current_id
=
wifi_station_get_current_ap_id
();
ESP_DBG
(
"current ap id =%d
\n
"
,
current_id
);
if
(
current_id
==
AP_CACHE_NUMBER
-
1
)
{
i
=
0
;
}
else
{
i
=
current_id
+
1
;
}
while
(
wifi_station_ap_change
(
i
)
!=
true
)
{
i
++
;
if
(
i
==
AP_CACHE_NUMBER
-
1
)
{
i
=
0
;
}
}
/* just need to re-check ip while change AP */
device_recon_count
=
0
;
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_check_ip
,
NULL
);
os_timer_arm
(
&
client_timer
,
100
,
0
);
}
#endif
LOCAL
bool
ICACHE_FLASH_ATTR
user_esp_platform_reset_mode
(
void
)
{
if
(
wifi_get_opmode
()
==
STATION_MODE
)
{
wifi_set_opmode
(
STATIONAP_MODE
);
}
#if AP_CACHE
/* delay 5s to change AP */
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_ap_change
,
NULL
);
os_timer_arm
(
&
client_timer
,
5000
,
0
);
return
true
;
#endif
return
false
;
}
/******************************************************************************
* FunctionName : user_esp_platform_recon_cb
* Description : The connection had an error and is already deallocated.
* Parameters : arg -- Additional argument to pass to the callback function
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_recon_cb
(
void
*
arg
,
sint8
err
)
{
struct
espconn
*
pespconn
=
(
struct
espconn
*
)
arg
;
ESP_DBG
(
"user_esp_platform_recon_cb
\n
"
);
#if (PLUG_DEVICE || LIGHT_DEVICE)
os_timer_disarm
(
&
beacon_timer
);
#endif
#if (PLUG_DEVICE || SENSOR_DEVICE)
user_link_led_output
(
1
);
#endif
if
(
++
device_recon_count
==
5
)
{
device_status
=
DEVICE_CONNECT_SERVER_FAIL
;
if
(
user_esp_platform_reset_mode
())
{
return
;
}
}
#if SENSOR_DEVICE
#ifdef SENSOR_DEEP_SLEEP
if
(
wifi_get_opmode
()
==
STATION_MODE
)
{
user_esp_platform_reset_mode
();
//user_sensor_deep_sleep_enter();
}
else
{
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_reconnect
,
pespconn
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
}
#else
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_reconnect
,
pespconn
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
#endif
#else
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_reconnect
,
pespconn
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
#endif
}
/******************************************************************************
* FunctionName : user_esp_platform_connect_cb
* Description : A new incoming connection has been connected.
* Parameters : arg -- Additional argument to pass to the callback function
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_connect_cb
(
void
*
arg
)
{
struct
espconn
*
pespconn
=
arg
;
ESP_DBG
(
"user_esp_platform_connect_cb
\n
"
);
if
(
wifi_get_opmode
()
==
STATIONAP_MODE
)
{
wifi_set_opmode
(
STATION_MODE
);
}
#if (PLUG_DEVICE || SENSOR_DEVICE)
user_link_led_timer_done
();
#endif
device_recon_count
=
0
;
espconn_regist_recvcb
(
pespconn
,
user_esp_platform_recv_cb
);
espconn_regist_sentcb
(
pespconn
,
user_esp_platform_sent_cb
);
user_esp_platform_sent
(
pespconn
);
}
/******************************************************************************
* FunctionName : user_esp_platform_connect
* Description : The function given as the connect with the host
* Parameters : espconn -- the espconn used to connect the connection
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_connect
(
struct
espconn
*
pespconn
)
{
ESP_DBG
(
"user_esp_platform_connect
\n
"
);
#ifdef CLIENT_SSL_ENABLE
espconn_secure_connect
(
pespconn
);
#else
espconn_connect
(
pespconn
);
#endif
}
#ifdef USE_DNS
/******************************************************************************
* FunctionName : user_esp_platform_dns_found
* Description : dns found callback
* 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
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_dns_found
(
const
char
*
name
,
ip_addr_t
*
ipaddr
,
void
*
arg
)
{
struct
espconn
*
pespconn
=
(
struct
espconn
*
)
arg
;
if
(
ipaddr
==
NULL
)
{
ESP_DBG
(
"user_esp_platform_dns_found NULL
\n
"
);
if
(
++
device_recon_count
==
5
)
{
device_status
=
DEVICE_CONNECT_SERVER_FAIL
;
user_esp_platform_reset_mode
();
}
return
;
}
ESP_DBG
(
"user_esp_platform_dns_found %d.%d.%d.%d
\n
"
,
*
((
uint8
*
)
&
ipaddr
->
addr
),
*
((
uint8
*
)
&
ipaddr
->
addr
+
1
),
*
((
uint8
*
)
&
ipaddr
->
addr
+
2
),
*
((
uint8
*
)
&
ipaddr
->
addr
+
3
));
if
(
esp_server_ip
.
addr
==
0
&&
ipaddr
->
addr
!=
0
)
{
os_timer_disarm
(
&
client_timer
);
esp_server_ip
.
addr
=
ipaddr
->
addr
;
os_memcpy
(
pespconn
->
proto
.
tcp
->
remote_ip
,
&
ipaddr
->
addr
,
4
);
pespconn
->
proto
.
tcp
->
local_port
=
espconn_port
();
#ifdef CLIENT_SSL_ENABLE
pespconn
->
proto
.
tcp
->
remote_port
=
8443
;
#else
pespconn
->
proto
.
tcp
->
remote_port
=
8000
;
#endif
#if (PLUG_DEVICE || LIGHT_DEVICE)
ping_status
=
1
;
#endif
espconn_regist_connectcb
(
pespconn
,
user_esp_platform_connect_cb
);
espconn_regist_disconcb
(
pespconn
,
user_esp_platform_discon_cb
);
espconn_regist_reconcb
(
pespconn
,
user_esp_platform_recon_cb
);
user_esp_platform_connect
(
pespconn
);
}
}
/******************************************************************************
* FunctionName : user_esp_platform_dns_check_cb
* Description : 1s time callback to check dns found
* Parameters : arg -- Additional argument to pass to the callback function
* Returns : none
*******************************************************************************/
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_dns_check_cb
(
void
*
arg
)
{
struct
espconn
*
pespconn
=
arg
;
ESP_DBG
(
"user_esp_platform_dns_check_cb
\n
"
);
espconn_gethostbyname
(
pespconn
,
ESP_DOMAIN
,
&
esp_server_ip
,
user_esp_platform_dns_found
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
}
LOCAL
void
ICACHE_FLASH_ATTR
user_esp_platform_start_dns
(
struct
espconn
*
pespconn
)
{
esp_server_ip
.
addr
=
0
;
espconn_gethostbyname
(
pespconn
,
ESP_DOMAIN
,
&
esp_server_ip
,
user_esp_platform_dns_found
);
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_dns_check_cb
,
pespconn
);
os_timer_arm
(
&
client_timer
,
1000
,
0
);
}
#endif
#if LIGHT_DEVICE
void
user_mdns_conf
()
{
struct
ip_info
ipconfig
;
wifi_get_ip_info
(
STATION_IF
,
&
ipconfig
);
struct
mdns_info
*
info
=
(
struct
mdns_info
*
)
os_zalloc
(
sizeof
(
struct
mdns_info
));
info
->
host_name
=
"espressif_light_demo"
;
info
->
ipAddr
=
ipconfig
.
ip
.
addr
;
//sation ip
info
->
server_name
=
"espLight"
;
info
->
server_port
=
80
;
info
->
txt_data
[
0
]
=
"version = 1.0.1"
;
espconn_mdns_init
(
info
);
}
#endif
/******************************************************************************
* FunctionName : user_esp_platform_check_ip
* Description : espconn struct parame init when get ip addr
* Parameters : none
* Returns : none
*******************************************************************************/
void
ICACHE_FLASH_ATTR
user_esp_platform_check_ip
(
uint8
reset_flag
)
{
struct
ip_info
ipconfig
;
os_timer_disarm
(
&
client_timer
);
wifi_get_ip_info
(
STATION_IF
,
&
ipconfig
);
if
(
wifi_station_get_connect_status
()
==
STATION_GOT_IP
&&
ipconfig
.
ip
.
addr
!=
0
)
{
#if (PLUG_DEVICE || SENSOR_DEVICE)
user_link_led_timer_init
();
#endif
//***************************
#if LIGHT_DEVICE
user_mdns_conf
();
#endif
//***************************
user_conn
.
proto
.
tcp
=
&
user_tcp
;
user_conn
.
type
=
ESPCONN_TCP
;
user_conn
.
state
=
ESPCONN_NONE
;
device_status
=
DEVICE_CONNECTING
;
if
(
reset_flag
)
{
device_recon_count
=
0
;
}
#if (PLUG_DEVICE || LIGHT_DEVICE)
os_timer_disarm
(
&
beacon_timer
);
os_timer_setfn
(
&
beacon_timer
,
(
os_timer_func_t
*
)
user_esp_platform_sent_beacon
,
&
user_conn
);
#endif
#ifdef USE_DNS
user_esp_platform_start_dns
(
&
user_conn
);
#else
const
char
esp_server_ip
[
4
]
=
{
114
,
215
,
177
,
97
};
os_memcpy
(
user_conn
.
proto
.
tcp
->
remote_ip
,
esp_server_ip
,
4
);
user_conn
.
proto
.
tcp
->
local_port
=
espconn_port
();
#ifdef CLIENT_SSL_ENABLE
user_conn
.
proto
.
tcp
->
remote_port
=
8443
;
#else
user_conn
.
proto
.
tcp
->
remote_port
=
8000
;
#endif
espconn_regist_connectcb
(
&
user_conn
,
user_esp_platform_connect_cb
);
espconn_regist_reconcb
(
&
user_conn
,
user_esp_platform_recon_cb
);
user_esp_platform_connect
(
&
user_conn
);
#endif
}
else
{
/* if there are wrong while connecting to some AP, then reset mode */
if
((
wifi_station_get_connect_status
()
==
STATION_WRONG_PASSWORD
||
wifi_station_get_connect_status
()
==
STATION_NO_AP_FOUND
||
wifi_station_get_connect_status
()
==
STATION_CONNECT_FAIL
))
{
user_esp_platform_reset_mode
();
}
else
{
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_check_ip
,
NULL
);
os_timer_arm
(
&
client_timer
,
100
,
0
);
}
}
}
/******************************************************************************
* FunctionName : user_esp_platform_init
* Description : device parame init based on espressif platform
* Parameters : none
* Returns : none
*******************************************************************************/
void
ICACHE_FLASH_ATTR
user_esp_platform_init
(
void
)
{
os_sprintf
(
iot_version
,
"%s%d.%d.%dt%d(%s)"
,
VERSION_TYPE
,
IOT_VERSION_MAJOR
,
\
IOT_VERSION_MINOR
,
IOT_VERSION_REVISION
,
device_type
,
UPGRADE_FALG
);
os_printf
(
"IOT VERSION = %s
\n
"
,
iot_version
);
system_param_load
(
ESP_PARAM_START_SEC
,
0
,
&
esp_param
,
sizeof
(
esp_param
));
struct
rst_info
*
rtc_info
=
system_get_rst_info
();
os_printf
(
"reset reason: %x
\n
"
,
rtc_info
->
reason
);
if
(
rtc_info
->
reason
==
REASON_WDT_RST
||
rtc_info
->
reason
==
REASON_EXCEPTION_RST
||
rtc_info
->
reason
==
REASON_SOFT_WDT_RST
)
{
if
(
rtc_info
->
reason
==
REASON_EXCEPTION_RST
)
{
os_printf
(
"Fatal exception (%d):
\n
"
,
rtc_info
->
exccause
);
}
os_printf
(
"epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x
\n
"
,
rtc_info
->
epc1
,
rtc_info
->
epc2
,
rtc_info
->
epc3
,
rtc_info
->
excvaddr
,
rtc_info
->
depc
);
}
/***add by tzx for saving ip_info to avoid dhcp_client start****/
struct
dhcp_client_info
dhcp_info
;
struct
ip_info
sta_info
;
system_rtc_mem_read
(
64
,
&
dhcp_info
,
sizeof
(
struct
dhcp_client_info
));
if
(
dhcp_info
.
flag
==
0x01
)
{
if
(
true
==
wifi_station_dhcpc_status
())
{
wifi_station_dhcpc_stop
();
}
sta_info
.
ip
=
dhcp_info
.
ip_addr
;
sta_info
.
gw
=
dhcp_info
.
gw
;
sta_info
.
netmask
=
dhcp_info
.
netmask
;
if
(
true
!=
wifi_set_ip_info
(
STATION_IF
,
&
sta_info
))
{
os_printf
(
"set default ip wrong
\n
"
);
}
}
os_memset
(
&
dhcp_info
,
0
,
sizeof
(
struct
dhcp_client_info
));
system_rtc_mem_write
(
64
,
&
dhcp_info
,
sizeof
(
struct
rst_info
));
#if AP_CACHE
wifi_station_ap_number_set
(
AP_CACHE_NUMBER
);
#endif
#if 0
{
char sofap_mac[6] = {0x16, 0x34, 0x56, 0x78, 0x90, 0xab};
char sta_mac[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab};
struct ip_info info;
wifi_set_macaddr(SOFTAP_IF, sofap_mac);
wifi_set_macaddr(STATION_IF, sta_mac);
IP4_ADDR(&info.ip, 192, 168, 3, 200);
IP4_ADDR(&info.gw, 192, 168, 3, 1);
IP4_ADDR(&info.netmask, 255, 255, 255, 0);
wifi_set_ip_info(STATION_IF, &info);
IP4_ADDR(&info.ip, 10, 10, 10, 1);
IP4_ADDR(&info.gw, 10, 10, 10, 1);
IP4_ADDR(&info.netmask, 255, 255, 255, 0);
wifi_set_ip_info(SOFTAP_IF, &info);
}
#endif
if
(
esp_param
.
activeflag
!=
1
)
{
#ifdef SOFTAP_ENCRYPT
struct
softap_config
config
;
char
password
[
33
];
char
macaddr
[
6
];
wifi_softap_get_config
(
&
config
);
wifi_get_macaddr
(
SOFTAP_IF
,
macaddr
);
os_memset
(
config
.
password
,
0
,
sizeof
(
config
.
password
));
os_sprintf
(
password
,
MACSTR
"_%s"
,
MAC2STR
(
macaddr
),
PASSWORD
);
os_memcpy
(
config
.
password
,
password
,
os_strlen
(
password
));
config
.
authmode
=
AUTH_WPA_WPA2_PSK
;
wifi_softap_set_config
(
&
config
);
#endif
wifi_set_opmode
(
STATIONAP_MODE
);
}
#if PLUG_DEVICE
user_plug_init
();
#elif LIGHT_DEVICE
user_light_init
();
#elif SENSOR_DEVICE
user_sensor_init
(
esp_param
.
activeflag
);
#endif
if
(
wifi_get_opmode
()
!=
SOFTAP_MODE
)
{
os_timer_disarm
(
&
client_timer
);
os_timer_setfn
(
&
client_timer
,
(
os_timer_func_t
*
)
user_esp_platform_check_ip
,
1
);
os_timer_arm
(
&
client_timer
,
100
,
0
);
}
}
#endif
Prev
1
…
11
12
13
14
15
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment