Skip to content

Commit

Permalink
add support:
Browse files Browse the repository at this point in the history
extended BAUD command for UART data bits = 5/6/7/8 , parity = N/E/O, stop bits = 1/1.5/2
extended AP with authmode and channel
for SDK 0.9.4 and later: the next espconn_sent must called after espconn_sent_callback of the pre-packet.
Instead espconn_sent use from user code the buffered versions:
spbuffsent(serverConnData *conn, const char *data, uint16 len)
espbuffsentstring(serverConnData *conn, const char *data)
espbuffsentprintf(serverConnData *conn, const char *format, ...)

fix bug:
setting SSID

add Visual Studio 2013 solution and project files parallel to the original Makefile
  • Loading branch information
petgit committed Jan 25, 2015
1 parent 6e90eac commit 4e65c7c
Show file tree
Hide file tree
Showing 18 changed files with 671 additions and 174 deletions.
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@
*.i*86
*.x86_64
*.hex

## Ignore Visual Studio temporary, user, log files
*.log
*.opensdf
*.sdf
*.suo
*.user
22 changes: 22 additions & 0 deletions ESP8266-transparent-bridge.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30723.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ESP8266-transparent-bridge", "ESP8266-transparent-bridge.vcxproj", "{55169C13-275D-46F6-B8E8-C3501533A18E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Release|ARM = Release|ARM
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{55169C13-275D-46F6-B8E8-C3501533A18E}.Debug|ARM.ActiveCfg = Debug|ARM
{55169C13-275D-46F6-B8E8-C3501533A18E}.Debug|ARM.Build.0 = Debug|ARM
{55169C13-275D-46F6-B8E8-C3501533A18E}.Release|ARM.ActiveCfg = Release|ARM
{55169C13-275D-46F6-B8E8-C3501533A18E}.Release|ARM.Build.0 = Release|ARM
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
84 changes: 84 additions & 0 deletions ESP8266-transparent-bridge.vcxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="driver\uart.c" />
<ClCompile Include="user\config.c" />
<ClCompile Include="user\flash_param.c" />
<ClCompile Include="user\server.c" />
<ClCompile Include="user\user_main.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\at_version.h" />
<ClInclude Include="include\driver\uart.h" />
<ClInclude Include="include\driver\uart_register.h" />
<ClInclude Include="include\eagle_soc.h" />
<ClInclude Include="include\espmissingincludes.h" />
<ClInclude Include="include\task.h" />
<ClInclude Include="include\user_config.h" />
<ClInclude Include="user\config.h" />
<ClInclude Include="user\config_wifi.h" />
<ClInclude Include="user\flash_param.h" />
<ClInclude Include="user\server.h" />
</ItemGroup>
<ItemGroup>
<None Include="Makefile_VS2013" />
<None Include="README.md" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{55169C13-275D-46F6-B8E8-C3501533A18E}</ProjectGuid>
<Keyword>MakeFileProj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup>
<ConfigurationType>Makefile</ConfigurationType>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<NMakeOutput />
<NMakePreprocessorDefinitions />
<IncludePath>..\xtensa-lx106-elf\lib\gcc\xtensa-lx106-elf\4.8.2\include;..\xtensa-lx106-elf\xtensa-lx106-elf\include\;include\driver;include;..\esp_iot_sdk_v0.9.5\include</IncludePath>
<ExecutablePath />
<ReferencePath />
<LibraryPath />
<LibraryWPath />
<ExcludePath />
<NMakeOutput />
<OutDir>bin</OutDir>
<IntDir>build</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<NMakeBuildCommandLine>espmake all flash</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>espmake clean all flash</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>espmake clean</NMakeCleanCommandLine>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<NMakeBuildCommandLine>espmake</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>espmake clean all</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>espmake clean</NMakeCleanCommandLine>
</PropertyGroup>
<ItemDefinitionGroup>
<BuildLog>
<Path />
</BuildLog>
</ItemDefinitionGroup>

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
149 changes: 149 additions & 0 deletions Makefile_VS2013
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# tnx to mamalala
# Changelog
# Changed the variables to include the header file directory
# Added global var for the XTENSA tool root
#
# This make file still needs some work.
#
#
# Output directors to store intermediate compiled files
# relative to the project directory
BUILD_BASE = build
FW_BASE = bin

# Base directory for the compiler
XTENSA_TOOLS_ROOT ?= ../xtensa-lx106-elf/bin

# base directory of the ESP8266 SDK package, absolute
#SDK_BASE ?= ../esp_iot_sdk_v0.9.3Patch1
#SDK_BASE ?= ../esp_iot_sdk_v0.9.4
#from http://bbs.espressif.com/viewtopic.php?f=5&t=154, esp_iot_sdk_v0.9.5_15_01_23.zip
SDK_BASE ?= ../esp_iot_sdk_v0.9.5

#Esptool.py path and port
ESPTOOL ?= C:\Python27\python ..\esptool-py.py
ESPPORT ?= COM5

# name for the target project
TARGET = app

# which modules (subdirectories) of the project to include in compiling
MODULES = driver user
EXTRA_INCDIR = include /opt/Espressif/include

# libraries used in this project, mainly provided by the SDK
LIBS = c gcc hal pp phy net80211 lwip wpa main

# compiler flags using during compilation of source files
CFLAGS = -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH

# linker flags used to generate the main object file
LDFLAGS = -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static

# linker script used for the above linkier step
LD_SCRIPT = eagle.app.v6.ld

# various paths from the SDK used in this project
SDK_LIBDIR = lib
SDK_LDDIR = ld
SDK_INCDIR = include include/json

# we create two different files for uploading into the flash
# these are the names and options to generate them
FW_FILE_1 = eagle.app.v6.flash
FW_FILE_1_ARGS = -bo $@ -bs .text -bs .data -bs .rodata -bc -ec
FW_FILE_2 = eagle.app.v6.irom0text
FW_FILE_2_ARGS = -es .irom0.text $@ -ec

# select which tools to use as compiler, librarian and linker
CC := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
AR := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-ar
LD := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-gcc
OD := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-objdump



####
#### no user configurable options below here
####
FW_TOOL ?= ../esptool/esptool
SRC_DIR := $(MODULES)
BUILD_DIR := $(addprefix $(BUILD_BASE)/,$(MODULES))

SDK_LIBDIR := $(addprefix $(SDK_BASE)/,$(SDK_LIBDIR))
SDK_INCDIR := $(addprefix -I$(SDK_BASE)/,$(SDK_INCDIR))

SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
OBJ := $(patsubst %.c,$(BUILD_BASE)/%.o,$(SRC))
LIBS := $(addprefix -l,$(LIBS))
APP_AR := $(addprefix $(BUILD_BASE)/,$(TARGET)_app.a)
TARGET_OUT := $(addprefix $(BUILD_BASE)/,$(TARGET).out)

LD_SCRIPT := $(addprefix -T$(SDK_BASE)/$(SDK_LDDIR)/,$(LD_SCRIPT))

INCDIR := $(addprefix -I,$(SRC_DIR))
EXTRA_INCDIR := $(addprefix -I,$(EXTRA_INCDIR))
MODULE_INCDIR := $(addsuffix /include,$(INCDIR))

FW_FILE_1 := $(addprefix $(FW_BASE)/,$(FW_FILE_1).bin)
FW_FILE_2 := $(addprefix $(FW_BASE)/,$(FW_FILE_2).bin)

V ?= $(VERBOSE)
ifeq ("$(V)","1")
Q :=
vecho := @true
else
Q := @
vecho := @echo
endif

vpath %.c $(SRC_DIR)

define compile-objects
$1/%.o: %.c
$(vecho) "CC $$<"
$(Q) $(CC) $(INCDIR) $(MODULE_INCDIR) $(EXTRA_INCDIR) $(SDK_INCDIR) $(CFLAGS) -c $$< -o $$@
endef

.PHONY: all checkdirs flash clean

all: checkdirs $(TARGET_OUT) $(FW_FILE_1) $(FW_FILE_2)

$(FW_FILE_1): $(TARGET_OUT)
$(vecho) "FW $@"
$(Q) $(FW_TOOL) -eo $(TARGET_OUT) $(FW_FILE_1_ARGS)

$(FW_FILE_2): $(TARGET_OUT)
$(vecho) "FW $@"
$(Q) $(FW_TOOL) -eo $(TARGET_OUT) $(FW_FILE_2_ARGS)

$(TARGET_OUT): $(APP_AR)
$(vecho) "LD $@"
$(Q) $(LD) -L$(SDK_LIBDIR) $(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $(LIBS) $(APP_AR) -Wl,--end-group -o $@
$(Q) $(OD) -h $@

$(APP_AR): $(OBJ)
$(vecho) "AR $@"
$(Q) $(AR) cru $@ $^

checkdirs: $(BUILD_DIR) $(FW_BASE)

$(BUILD_DIR):
$(Q) mkdir -p $@

bin:
$(Q) mkdir -p $@

flash: bin/eagle.app.v6.flash.bin bin/eagle.app.v6.irom0text.bin
-$(ESPTOOL) --port $(ESPPORT) write_flash 0x00000 bin/eagle.app.v6.flash.bin 0x40000 bin/eagle.app.v6.irom0text.bin

clean:
$(Q) rm -f $(APP_AR)
$(Q) rm -f $(TARGET_OUT)
$(Q) rm -rf $(BUILD_DIR)
$(Q) rm -rf $(BUILD_BASE)
$(Q) rm -f $(FW_FILE_1)
$(Q) rm -f $(FW_FILE_2)
$(Q) rm -rf $(FW_BASE)

$(foreach bdir,$(BUILD_DIR),$(eval $(call compile-objects,$(bdir))))
59 changes: 54 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,28 @@ Telnet into the module and issue commands prefixed by +++AT to escape each comma
+++AT STA <ssid> <password> # set ssid and password to connect to
+++AT AP # print the current soft ap settings
+++AT AP <ssid> # set the AP as open with specified ssid
+++AT AP <ssid> <password> # set the AP as WPA with password
+++AT BAUD # print current UART baud rate
+++AT BAUD <baud> # set currrent UART baud rate
+++AT AP <ssid> <pw> [<authmode> [<ch>]]]# set the AP ssid and password, authmode:1= WEP,2= WPA,3= WPA2,4= WPA+WPA2 , channel: 1..13
+++AT BAUD # print current UART settings
+++AT BAUD <baud> [data [parity [stop]]] # set current UART baud rate and optional data bits = 5/6/7/8 , parity = N/E/O, stop bits = 1/1.5/2
+++AT PORT # print current incoming TCP socket port
+++AT PORT <port> # set current incoming TCP socket port (restarts ESP)
+++AT FLASH # print current flash settings
+++AT FLASH <1|0> # 1: The changed UART settings (++AT BAUD ...) are saved ( Default after boot), 0= no save to flash.
+++AT RESET # software reset the unit
```
Upon success, all commands send back "OK" as their final output. Note that passwords may not contain spaces. For the softAP, the mode is fixed to AUTH_WPA_PSK.
Upon success, all commands send back "OK" as their final output. Note that passwords may not contain spaces.

The settings are saved after the commands
+++AT PORT <port>
+++AT BAUD <baud> ...

After +++AT FLASH 0 the parameter of command +++AT BAUD <baud> ... are NOT saved to the flash memory.
The new settings are applied to the UART and saved only in RAM.
But a following +++AT PORT <port> need to flash the settings for the necessary reboot. Then also the changed UART setting are saved to flash.

The disable of flash the settings is for devices with baud rate changes to avoid permanently flash of the setting sector.
Some electric meter start conversion with 300 baud and accept a command to change to 9600.

Example session:
```
user@host:~$ telnet 192.168.1.197
Expand Down Expand Up @@ -69,7 +83,11 @@ In order, this gets the current opmode. Good, it is 3 for STA + AP. Next, the cu

**Cons:**

* Unbuffered TCP writes. Each incoming UART character gets sent as a separate TCP packet. This could potentially impact performance, however, in my hands that hasn't been an issue.
* limited buffered TCP writes. The first buffer is the UART FIFO. The second buffer is to collect new uart chars until the previous packet is sent.
From SDK 0.9.4 the next espconn_sent must after espconn_sent_callback of the pre-packet.
All incoming UART characters in the FIFO gets sent immediately via the tx-buffer. The resulting TCP packet has only some bytes.

This could potentially impact performance, however, in my hands that hasn't been an issue.


Parts of this firmware are from the stock AT firmware and the esphttpd project.
Expand All @@ -78,4 +96,35 @@ Enjoy.
Flash command, e.g. w/ locations:
```
/opt/Espressif/esptool-py/esptool.py --port /dev/tty.usbserial-A603HRFF write_flash 0x00000 eagle.app.v6.flash.bin 0x40000 eagle.app.v6.irom0text.bin
...
or use ESP8266Flasher.exe from https://github.com/nodemcu/nodemcu-flasher with
eagle.app.v6.flash.bin at 0x00000
eagle.app.v6.irom0text.bin at 0x40000
```

#Visual Studio 2013 Integration
see "New Windows terminal/flasher apps & Visual Studio" http://www.esp8266.com/viewtopic.php?f=9&t=911#p5113 to setup Visual Studio 2013
Please install in a folder i.e. c:\Projects\Espressif\
```
ESP8266-transparent-bridge/ #this project
esp_iot_sdk_v0.9.5/ #http://bbs.espressif.com/download/file.php?id=189
xtensa-lx106-elf/ #pre-built compiler, see http://www.esp8266.com/viewtopic.php?f=9&t=911#p5113 ,
#I used xtensa-lx106-elf-141114.7z from https://drive.google.com/uc?export=download&confirm=XHSI&id=0BzWyTGWIwcYQallNcTlxek1qNTQ
esptool-py.py #http://www.esp8266.com/download/file.php?id=321
```

The files used by Visual Studio are:
```
ESP8266-transparent-bridge.sln #solution file
ESP8266-transparent-bridge.vcxproj #project file, with IncludePath to xtensa-lx106-elf, sdk for intellisense and "Go To Definition" F12
espmake.cmd #batch file called by build, rebuild, clean command, which set the path and call make with Makefile_VS2013
Makefile_VS2013 #the makefile called by the Visual Studio NMake project via espmake.cmd
```
The Debug config is used for compile, Release for compile & flash with esptool-py.py

The following absolute path names and COM Port number are expected:
```
C:\MinGW\bin;C:\MinGW\msys\1.0\bin in espmake.cmd
C:\Python27\python in Makefile_VS2013 for flash
COM5 in Makefile_VS2013 for flash
```
Binary file modified bin/eagle.app.v6.flash.bin
Binary file not shown.
Binary file modified bin/eagle.app.v6.irom0text.bin
Binary file not shown.
8 changes: 4 additions & 4 deletions driver/uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ uart_config(uint8 uart_no)

uart_div_modify(uart_no, UART_CLK_FREQ / (UartDev.baut_rate));

WRITE_PERI_REG(UART_CONF0(uart_no), UartDev.exist_parity
| UartDev.parity
| (UartDev.stop_bits << UART_STOP_BIT_NUM_S)
| (UartDev.data_bits << UART_BIT_NUM_S));
if (uart_no == UART1) //UART 1 always 8 N 1
WRITE_PERI_REG(UART_CONF0(uart_no), CALC_UARTMODE(EIGHT_BITS, NONE_BITS, ONE_STOP_BIT));
else
WRITE_PERI_REG(UART_CONF0(uart_no), CALC_UARTMODE(UartDev.data_bits, UartDev.parity, UartDev.stop_bits));

//clear rx and tx fifo,not ready
SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
Expand Down
9 changes: 9 additions & 0 deletions espmake.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@echo off
REM see "New Windows terminal/flasher apps & Visual Studio" http://www.esp8266.com/viewtopic.php?f=9&t=911 to setup Visual Studio 2013

REM remove automatic created obj folder
rd obj /S /Q >nul 2>&1

PATH=%PATH%;%~dp0..\xtensa-lx106-elf\bin;C:\MinGW\bin;C:\MinGW\msys\1.0\bin
make -f makefile_VS2013 %1 %2 %3 %4 %5

Loading

0 comments on commit 4e65c7c

Please sign in to comment.