123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383 |
- /******************************************************************************
- * 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\nHost: "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
|