From d587762e507cf75dec412008feaf43971e825f52 Mon Sep 17 00:00:00 2001 From: Espressif Systems Date: Thu, 16 Mar 2017 19:19:17 +0800 Subject: [PATCH] example: Add wps demo project --- examples/wps_demo/Makefile | 132 ++++++++++++++++++ examples/wps_demo/gen_misc.bat | 172 +++++++++++++++++++++++ examples/wps_demo/gen_misc.sh | 176 ++++++++++++++++++++++++ examples/wps_demo/include/user_config.h | 29 ++++ examples/wps_demo/readme.txt | 56 ++++++++ examples/wps_demo/user/Makefile | 51 +++++++ examples/wps_demo/user/user_main.c | 99 +++++++++++++ 7 files changed, 715 insertions(+) create mode 100644 examples/wps_demo/Makefile create mode 100644 examples/wps_demo/gen_misc.bat create mode 100755 examples/wps_demo/gen_misc.sh create mode 100644 examples/wps_demo/include/user_config.h create mode 100644 examples/wps_demo/readme.txt create mode 100644 examples/wps_demo/user/Makefile create mode 100644 examples/wps_demo/user/user_main.c diff --git a/examples/wps_demo/Makefile b/examples/wps_demo/Makefile new file mode 100644 index 00000000..a36b22be --- /dev/null +++ b/examples/wps_demo/Makefile @@ -0,0 +1,132 @@ +############################################################# +# 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 object file images to be generated () +# GEN_BINS - list of binaries 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 () +# +TARGET = eagle +#FLAVOR = release +FLAVOR = debug + +#EXTRA_CCFLAGS += -u + +ifndef PDIR # { +GEN_IMAGES= eagle.app.v6.out +GEN_BINS= eagle.app.v6.bin +SPECIAL_MKTARGETS=$(APP_MKTARGETS) +SUBDIRS= \ + user + +endif # } PDIR + +LDDIR = $(SDK_PATH)/ld + +CCFLAGS += -Os + +TARGET_LDFLAGS = \ + -nostdlib \ + -Wl,-EL \ + --longcalls \ + --text-section-literals + +ifeq ($(FLAVOR),debug) + TARGET_LDFLAGS += -g -O2 +endif + +ifeq ($(FLAVOR),release) + TARGET_LDFLAGS += -g -O0 +endif + +COMPONENTS_eagle.app.v6 = \ + user/libuser.a + +LINKFLAGS_eagle.app.v6 = \ + -L$(SDK_PATH)/lib \ + -Wl,--gc-sections \ + -nostdlib \ + -T$(LD_FILE) \ + -Wl,--no-check-sections \ + -u call_user_start \ + -Wl,-static \ + -Wl,--start-group \ + -lcirom \ + -lcrypto \ + -lespconn \ + -lespnow \ + -lfreertos \ + -lgcc \ + -lhal \ + -ljson \ + -llwip \ + -lmain \ + -lmesh \ + -lmirom \ + -lnet80211 \ + -lnopoll \ + -lphy \ + -lpp \ + -lpwm \ + -lmbedtls \ + -lopenssl \ + -lsmartconfig \ + -lspiffs \ + -lwpa \ + -lwps \ + $(DEP_LIBS_eagle.app.v6) \ + -Wl,--end-group + +DEPENDS_eagle.app.v6 = \ + $(LD_FILE) \ + $(LDDIR)/eagle.rom.addr.v6.ld + +############################################################# +# 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 +# + +#UNIVERSAL_TARGET_DEFINES = \ + +# Other potential configuration flags include: +# -DTXRX_TXBUF_DEBUG +# -DTXRX_RXBUF_DEBUG +# -DWLAN_CONFIG_CCX +CONFIGURATION_DEFINES = -DICACHE_FLASH -D__STDC_NO_ATOMICS__=1 -DESP8266_RTOS -D__STDC_VERSION__=201112L -DFREERTOS_ARCH_ESP8266 +#-DNO_LOGGING=1 + +DEFINES += \ + $(UNIVERSAL_TARGET_DEFINES) \ + $(CONFIGURATION_DEFINES) + +DDEFINES += \ + $(UNIVERSAL_TARGET_DEFINES) \ + $(CONFIGURATION_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 +sinclude $(SDK_PATH)/Makefile + +.PHONY: FORCE +FORCE: + diff --git a/examples/wps_demo/gen_misc.bat b/examples/wps_demo/gen_misc.bat new file mode 100644 index 00000000..fbb53be7 --- /dev/null +++ b/examples/wps_demo/gen_misc.bat @@ -0,0 +1,172 @@ +@echo off + +Rem ******NOTICE****** +Rem MUST set SDK_PATH & BIN_PATH firstly!!! +Rem example: +Rem set SDK_PATH=/c/esp_iot_sdk_freertos +Rem set BIN_PATH=/c/esp8266_bin + +set SDK_PATH="" +set BIN_PATH="" + +echo gen_misc.bat version 20150911 +echo . + +if not %SDK_PATH% == "" ( + echo SDK_PATH: %SDK_PATH% +) else ( + echo ERROR: Please set SDK_PATH in gen_misc.bat firstly, exit!!! + goto end +) + +if not %BIN_PATH% == "" ( + echo BIN_PATH: %BIN_PATH% +) else ( + echo ERROR: Please set BIN_PATH in gen_misc.bat firstly, exit!!! + goto end +) + +echo . +echo Please check SDK_PATH/BIN_PATH, enter (Y/y) to continue: +set input=default +set /p input= + +if not %input% == Y ( + if not %input% == y ( + goto end + ) +) + +echo . +echo Please follow below steps(1-5) to generate specific bin(s): +echo STEP 1: use boot_v1.2+ by default +set boot=new + +echo boot mode: %boot% +echo. + +echo STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin) +set input=default +set /p input=enter (0/1/2, default 0): + +if %input% equ 1 ( + if %boot% equ none ( + set app=0 + echo choose no boot before + echo generate bin: eagle.flash.bin+eagle.irom0text.bin + ) else ( + set app=1 + echo generate bin: user1.bin + ) +) else ( +if %input% equ 2 ( + if %boot% equ none ( + set app=0 + echo choose no boot before + echo generate bin: eagle.flash.bin+eagle.irom0text.bin + ) else ( + set app=2 + echo generate bin: user2.bin + ) +) else ( + if %boot% neq none ( + set boot=none + echo ignore boot + ) + set app=0 + echo generate bin: eagle.flash.bin+eagle.irom0text.bin +)) + +echo. + +echo STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz) +set input=default +set /p input=enter (0/1/2/3, default 2): + +if %input% equ 0 ( + set spi_speed=20 +) else ( +if %input% equ 1 ( + set spi_speed=26.7 +) else ( +if %input% equ 3 ( + set spi_speed=80 +) else ( + set spi_speed=40 +))) + +echo spi speed: %spi_speed% MHz +echo. + +echo STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT) +set input=default +set /p input=enter (0/1/2/3, default 0): + +if %input% equ 1 ( + set spi_mode=QOUT +) else ( +if %input% equ 2 ( + set spi_mode=DIO +) else ( +if %input% equ 3 ( + set spi_mode=DOUT +) else ( + set spi_mode=QIO +))) + +echo spi mode: %spi_mode% +echo. + +echo STEP 5: choose flash 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) +set input=default +set /p input=enter (0/1/2/3/4/5/6, default 0): + +if %input% equ 2 ( + set spi_size_map=2 + echo spi size: 1024KB + echo spi ota map: 512KB + 512KB +) else ( + if %input% equ 3 ( + set spi_size_map=3 + echo spi size: 2048KB + echo spi ota map: 512KB + 512KB + ) else ( + if %input% equ 4 ( + set spi_size_map=4 + echo spi size: 4096KB + echo spi ota map: 512KB + 512KB + ) else ( + if %input% equ 5 ( + set spi_size_map=5 + echo spi size: 2048KB + echo spi ota map: 1024KB + 1024KB + ) else ( + if %input% equ 6 ( + set spi_size_map=6 + echo spi size: 4096KB + echo spi ota map: 1024KB + 1024KB + ) else ( + set spi_size_map=0 + echo spi size: 512KB + echo spi ota map: 256KB + 256KB + ) + ) + ) + ) +) + +echo. +echo start... +echo. + +make clean + +make COMPILE=xcc BOOT=%boot% APP=%app% SPI_SPEED=%spi_speed% SPI_MODE=%spi_mode% SPI_SIZE_MAP=%spi_size_map% + +:end \ No newline at end of file diff --git a/examples/wps_demo/gen_misc.sh b/examples/wps_demo/gen_misc.sh new file mode 100755 index 00000000..c8ffb4e1 --- /dev/null +++ b/examples/wps_demo/gen_misc.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +:< + * + * Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case, + * it is free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __USER_CONFIG_H__ +#define __USER_CONFIG_H__ + +#endif + diff --git a/examples/wps_demo/readme.txt b/examples/wps_demo/readme.txt new file mode 100644 index 00000000..e0588e33 --- /dev/null +++ b/examples/wps_demo/readme.txt @@ -0,0 +1,56 @@ +This is a simple project template. + +sample_lib is an example for multi-level folder Makefile, notice the folder structure and each Makefile, you can get the clue. + + +HOWTO: +1. Copy this folder to anywhere. +Example: + Copy to ~/workspace/project_template + You can rename this folder as you like. + +2. Export SDK_PATH and BIN_PATH. +Example: + Your SDK path is ~/esp_iot_rtos_sdk, and want generate bin at ~/esp8266_bin. + Do follow steps: + 1>. export SDK_PATH=~/esp_iot_rtos_sdk + 2>. export BIN_PATH=~/esp8266_bin + SDK and project are seperate, you can update SDK without change your project. + +3. Enter project_template folder, run ./gen_misc.sh, and follow the tips and steps. + + +Compile Options: +(1) COMPILE + Possible value: xcc + Default value: + If not set, use gcc by default. + +(2) BOOT + Possible value: none/old/new + none: no need boot + old: use boot_v1.1 + new: use boot_v1.2 + Default value: new + +(3) APP + Possible value: 0/1/2 + 0: original mode, generate eagle.app.v6.flash.bin and eagle.app.v6.irom0text.bin + 1: generate user1 + 2: generate user2 + Default value: 0 + +(3) SPI_SPEED + Possible value: 20/26.7/40/80 + Default value: 40 + +(4) SPI_MODE + Possible value: QIO/QOUT/DIO/DOUT + Default value: QIO + +(4) SPI_SIZE_MAP + Possible value: 0/2/3/4/5/6 + Default value: 0 + +For example: + make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=0 diff --git a/examples/wps_demo/user/Makefile b/examples/wps_demo/user/Makefile new file mode 100644 index 00000000..373aa7ae --- /dev/null +++ b/examples/wps_demo/user/Makefile @@ -0,0 +1,51 @@ + +############################################################# +# 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 ../sample_lib/azureiot/azure-c-shared-utility/inc +INCLUDES += -I ../sample_lib/azureiot/azure-umqtt-c/inc +INCLUDES += -I ../sample_lib/azureiot/parson +INCLUDES += -I ../sample_lib/azureiot/iothub_client/inc +INCLUDES += -I ../../../include/espressif/esp8266 +INCLUDES += -I ../../../include +INCLUDES += -I ../../../include/openssl +PDIR := ../$(PDIR) + +sinclude $(PDIR)Makefile + diff --git a/examples/wps_demo/user/user_main.c b/examples/wps_demo/user/user_main.c new file mode 100644 index 00000000..c10a7e28 --- /dev/null +++ b/examples/wps_demo/user/user_main.c @@ -0,0 +1,99 @@ +/****************************************************************************** + * Copyright 2013-2014 Espressif Systems (Wuxi) + * + * FileName: user_main.c + * + * Description: entry file of user application + * + * Modification history: + * 2015/7/3, v1.0 create this file. +*******************************************************************************/ + +#include "esp_common.h" +#include +#include +#include +#include "esp_wps.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" + +LOCAL void user_wps_status_cb(int status) +{ + printf("scan status %d\n", status); + switch (status) { + case WPS_CB_ST_SUCCESS: + wifi_wps_disable(); + wifi_station_connect(); + break; + case WPS_CB_ST_FAILED: + case WPS_CB_ST_TIMEOUT: + wifi_wps_start(); + break; + } +} + +LOCAL void user_wps_start(void) +{ + wifi_wps_disable(); + wifi_wps_enable(WPS_TYPE_PBC); + wifi_set_wps_cb(user_wps_status_cb); + wifi_wps_start(); +} + +/****************************************************************************** + * FunctionName : user_rf_cal_sector_set + * Description : SDK just reversed 4 sectors, used for rf init data and paramters. + * We add this function to force users to set rf cal sector, since + * we don't know which sector is free in user's application. + * sector map for last several sectors : ABCCC + * A : rf cal + * B : rf init data + * C : sdk parameters + * Parameters : none + * Returns : rf cal sector +*******************************************************************************/ +uint32 user_rf_cal_sector_set(void) +{ + flash_size_map size_map = system_get_flash_size_map(); + uint32 rf_cal_sec = 0; + + switch (size_map) { + case FLASH_SIZE_4M_MAP_256_256: + rf_cal_sec = 128 - 5; + break; + + case FLASH_SIZE_8M_MAP_512_512: + rf_cal_sec = 256 - 5; + break; + + case FLASH_SIZE_16M_MAP_512_512: + case FLASH_SIZE_16M_MAP_1024_1024: + rf_cal_sec = 512 - 5; + break; + + case FLASH_SIZE_32M_MAP_512_512: + case FLASH_SIZE_32M_MAP_1024_1024: + rf_cal_sec = 1024 - 5; + break; + + default: + rf_cal_sec = 0; + break; + } + + return rf_cal_sec; +} +LOCAL void wps_task(void *pvParameters) +{ + wifi_set_opmode(STATION_MODE); + user_wps_start(); + vTaskDelete(NULL); +} +void user_init(void) +{ + + xTaskCreate(wps_task, "wps_task", 1024, NULL, 4, NULL); + + +} \ No newline at end of file