Merge pull request #2092 from cesanta/standex

standardize examples
This commit is contained in:
Sergio R. Caprile 2023-02-23 19:07:44 -03:00 committed by GitHub
commit 4436093816
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 928 additions and 1892 deletions

View File

@ -1 +1,2 @@
See detailed tutorial at https://mongoose.ws/tutorials/mqtt-client-aws-iot/ - This example requires generating AWS and user credentials and downloading certificates
- This example requires building with TLS support; before running, see detailed tutorial at https://mongoose.ws/tutorials/mqtt-client-aws-iot/

View File

@ -1,20 +1,32 @@
PROG ?= example PROG ?= example # Program we are building
CFLAGS ?= -W -Wall -Wextra -O2 $(EXTRA_CFLAGS) DELETE = rm -rf # Command to remove files
SSL ?= MBEDTLS OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
ifeq "$(SSL)" "MBEDTLS" # Mongoose build options. See https://mongoose.ws/documentation/#build-options
CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 -L$(MBEDTLS)/lib -I$(MBEDTLS)/include #CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1
ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
MAKE += WINDOWS=1 CC=$(CC)
endif endif
ifeq "$(SSL)" "OPENSSL" all: $(PROG) # Default target. Build and run program
CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto -L$(OPENSSL)/lib -I$(OPENSSL)/include
endif
all: $(PROG)
$(RUN) ./$(PROG) $(ARGS) $(RUN) ./$(PROG) $(ARGS)
$(PROG): main.c $(PROG): $(SOURCES) # Build program from sources
$(CC) ../../mongoose.c -I../.. $(CFLAGS) -o $(PROG) main.c $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: clean: # Cleanup. Delete built program and all build artifacts
rm -rf $(PROG) _CL* *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb mbedtls $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM mbedtls
# see https://mongoose.ws/tutorials/tls/#how-to-build for TLS build options
mbedtls: # Pull and build mbedTLS library
git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@
$(MAKE) -C mbedtls/library

View File

@ -1,5 +1,2 @@
# SMTP client example - This example requires changing server name and user credentials on `main.c`
- This example requires building with TLS support; before running, see detailed tutorial at https://mongoose.ws/tutorials/smtp-client/
This example shows how to send emails using Mongoose.
Before running this example, open main.c and modify settings at the top
of the file.

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,10 +1,25 @@
PROG ?= example PROG ?= example # Program we are building
DELETE = rm -rf # Command to remove files
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
all: $(PROG) # Mongoose build options. See https://mongoose.ws/documentation/#build-options
CFLAGS_MONGOOSE += -DMG_ENABLE_LINES
ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif
all: $(PROG) # Default target. Build and run program
$(RUN) ./$(PROG) $(ARGS) $(RUN) ./$(PROG) $(ARGS)
$(PROG): main.c $(PROG): $(SOURCES) # Build program from sources
$(CC) ../../mongoose.c -I../.. -W -Wall -DMG_ENABLE_LINES=1 $(CFLAGS) -o $(PROG) main.c $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: clean: # Cleanup. Delete built program and all build artifacts
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,19 +1,25 @@
PROG ?= example PROG ?= example # Program we are building
CFLAGS ?= -DMG_ENABLE_LINES $(CFLAGS_EXTRA) DELETE = rm -rf # Command to remove files
MBEDTLS_DIR ?= OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
ifeq "$(MBEDTLS_DIR)" "" # Mongoose build options. See https://mongoose.ws/documentation/#build-options
else CFLAGS_MONGOOSE += -DMG_ENABLE_LINES
CFLAGS += -DMG_ENABLE_MBEDTLS=1 -I$(MBEDTLS_DIR)/include -I/usr/include
CFLAGS += -L$(MBEDTLS_DIR)/lib -lmbedtls -lmbedcrypto -lmbedx509 ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif endif
all: $(PROG) all: $(PROG) # Default target. Build and run program
$(DEBUGGER) ./$(PROG) $(ARGS) $(RUN) ./$(PROG) $(ARGS)
$(PROG): $(SOURCES) # Build program from sources
$(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
$(PROG): main.c clean: # Cleanup. Delete built program and all build artifacts
$(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) -o $(PROG) main.c $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM
clean:
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,20 +1,32 @@
PROG ?= example PROG ?= example # Program we are building
SSL = ? DELETE = rm -rf # Command to remove files
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
ifeq "$(SSL)" "MBEDTLS" # Mongoose build options. See https://mongoose.ws/documentation/#build-options
CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 #CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1
ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
MAKE += WINDOWS=1 CC=$(CC)
endif endif
ifeq "$(SSL)" "OPENSSL" all: $(PROG) # Default target. Build and run program
CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto $(RUN) ./$(PROG) $(ARGS)
endif
all: $(PROG) $(PROG): $(SOURCES) # Build program from sources
$(DEBUGGER) ./$(PROG) $(ARGS) $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: # Cleanup. Delete built program and all build artifacts
$(DELETE) $(PROG) *.o *.obj *.exe *.dSYM mbedtls
$(PROG): main.c # see https://mongoose.ws/tutorials/tls/#how-to-build for TLS build options
$(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) $(EXTRA_CFLAGS) -o $(PROG) main.c
clean: mbedtls: # Pull and build mbedTLS library
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@
$(MAKE) -C mbedtls/library

1
examples/tcp/mongoose.c Symbolic link
View File

@ -0,0 +1 @@
../../mongoose.c

1
examples/tcp/mongoose.h Symbolic link
View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,10 +1,25 @@
PROG ?= example PROG ?= example # Program we are building
DELETE = rm -rf # Command to remove files
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
all: $(PROG) # Mongoose build options. See https://mongoose.ws/documentation/#build-options
$(DEBUGGER) ./$(PROG) $(ARGS) CFLAGS_MONGOOSE += -DMG_ENABLE_LINES
$(PROG): main.c ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
$(CC) ../../mongoose.c -I../.. -W -Wall -DMG_ENABLE_LINES=1 $(CFLAGS) -o $(PROG) main.c PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif
clean: all: $(PROG) # Default target. Build and run program
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb $(RUN) ./$(PROG) $(ARGS)
$(PROG): $(SOURCES) # Build program from sources
$(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: # Cleanup. Delete built program and all build artifacts
$(DELETE) $(PROG) *.o *.obj *.exe *.dSYM

1
examples/timers/mongoose.c Symbolic link
View File

@ -0,0 +1 @@
../../mongoose.c

1
examples/timers/mongoose.h Symbolic link
View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,19 +1,36 @@
PROG ?= example PROG ?= example # Program we are building
SOURCES ?= ../../mongoose.c main.c net.c packed_fs.c DELETE = rm -rf # Command to remove files
CFLAGS ?= -I../.. -DMG_ENABLE_PACKED_FS=1 -DMG_ENABLE_LINES=1 $(EXTRA_CFLAGS) OUT ?= -o $(PROG) # Compiler argument for output file
FILES_TO_EMBED ?= $(wildcard web_root/*) SOURCES = main.c mongoose.c net.c packed_fs.c # Source code files
ROOT ?= $(realpath $(CURDIR)/../../..) CFLAGS = -W -Wall -Wextra -g -I. # Build options
DOCKER ?= docker run --rm -e Tmp=. -e WINEDEBUG=-all -v $(ROOT):$(ROOT) -w $(CURDIR)
VC98 ?= $(DOCKER) mdashnet/vc98 wine
MINGW ?= $(DOCKER) mdashnet/mingw
all: $(PROG) # Mongoose build options. See https://mongoose.ws/documentation/#build-options
$(RUN) ./$(PROG) CFLAGS_MONGOOSE += -DMG_ENABLE_PACKED_FS=1 -DMG_ENABLE_LINES=1
$(PROG): $(SOURCES) $(FILES_TO_EMBED) ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif
all: $(PROG) # Default target. Build and run program
$(RUN) ./$(PROG) $(ARGS)
ifneq ($(OS),Windows_NT)
# Before embedding files, gzip them to save space
packed_fs.c: $(shell find web_root -type f) Makefile
rm -rf tmp/web_root && mkdir tmp && cp -r web_root tmp/
find tmp -type f | xargs -n1 gzip
$(CC) ../../test/pack.c -o pack $(CC) ../../test/pack.c -o pack
./pack $(FILES_TO_EMBED) > packed_fs.c cd tmp && ../pack `find web_root -type f` > ../$@
$(CC) -W -Wall -Wextra -O0 -g3 $(CFLAGS) -o $(PROG) $(SOURCES) endif
$(PROG): $(SOURCES) # Build program from sources
$(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: # Cleanup. Delete built program and all build artifacts
$(DELETE) $(PROG) *.o *.obj *.exe *.dSYM pack tmp
clean:
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb log.txt pack config.json

View File

@ -3,14 +3,14 @@
This example is a demonstration of how Mongoose Library could be integrated This example is a demonstration of how Mongoose Library could be integrated
into an embedded device and provide a UART-to-Network bridge capability: into an embedded device and provide a UART-to-Network bridge capability:
- A device opens listening TCP port and Websocket port and waits for connections - The device opens listening TCP and Websocket ports and waits for connections
- When a client connects, data is exchanged with the device's UART - When a client connects, data is exchanged with the device's UART
- Everything that client send, is sent to the UART - Everything the client sends, is sent to the UART
- Everything that is read from the UART, gets sent to the client - Everything that is read from the UART, gets sent to the client
- Multiple clients are allowed - Multiple clients are allowed
- Live UART console allows to talk to the UART from the web page - Live UART console allows to talk to the UART from the web page
- Web UI is hardcoded into the binary and does not need a filesystem - Web UI is hardcoded into the binary and does not need a filesystem
# Screenshots
![](screenshots/dashboard.png) ![](screenshots/dashboard.png)
See a detailed tutorial at https://mongoose.ws/tutorials/uart-bridge/

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -34,7 +34,9 @@ void config_write(struct mg_str config);
#else #else
void uart_init(int tx, int rx, int baud) { void uart_init(int tx, int rx, int baud) {
// We use stdin/stdout as UART. Make stdin non-blocking // We use stdin/stdout as UART. Make stdin non-blocking
#if MG_ARCH != MG_ARCH_WIN32
fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK);
#endif
(void) tx, (void) rx, (void) baud; (void) tx, (void) rx, (void) baud;
} }
@ -44,7 +46,12 @@ void uart_write(const void *buf, size_t len) {
} }
int uart_read(void *buf, size_t len) { int uart_read(void *buf, size_t len) {
#if MG_ARCH == MG_ARCH_WIN32
(void) buf, (void) len;
return 0;
#else
return read(0, buf, len); // Read from stdin return read(0, buf, len); // Read from stdin
#endif
} }
char *config_read(void) { char *config_read(void) {
@ -202,7 +209,8 @@ void uart_bridge_fn(struct mg_connection *c, int ev, void *ev_data,
s_state.mqtt.enable ? "true" : "false", "rx", s_state.rx, s_state.mqtt.enable ? "true" : "false", "rx", s_state.rx,
"tx", s_state.tx, "baud", s_state.baud); "tx", s_state.tx, "baud", s_state.baud);
} else { } else {
struct mg_http_serve_opts opts = {0}; struct mg_http_serve_opts opts;
memset(&opts, 0, sizeof(opts));
#if 1 #if 1
opts.root_dir = "/web_root"; opts.root_dir = "/web_root";
opts.fs = &mg_fs_packed; opts.fs = &mg_fs_packed;

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,25 @@
PROG ?= example PROG ?= example # Program we are building
DELETE = rm -rf # Command to remove files
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
all: $(PROG) # Mongoose build options. See https://mongoose.ws/documentation/#build-options
#CFLAGS_MONGOOSE += -DMG_ENABLE_LINES
ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif
all: $(PROG) # Default target. Build and run program
$(RUN) ./$(PROG) $(ARGS) $(RUN) ./$(PROG) $(ARGS)
$(PROG): main.c $(PROG): $(SOURCES) # Build program from sources
$(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) -o $(PROG) main.c $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: clean: # Cleanup. Delete built program and all build artifacts
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h

View File

@ -1,10 +1,25 @@
PROG ?= example PROG ?= example # Program we are building
DELETE = rm -rf # Command to remove files
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options
all: $(PROG) # Mongoose build options. See https://mongoose.ws/documentation/#build-options
$(DEBUGGER) ./$(PROG) #CFLAGS_MONGOOSE += -DMG_ENABLE_LINES
$(PROG): ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
$(CC) ../../mongoose.c -I../.. $(CFLAGS) $(EXTRA) -o $(PROG) main.c PROG ?= example.exe # Use .exe suffix for the binary
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
OUT ?= -o $(PROG) # Build output
endif
clean: all: $(PROG) # Default target. Build and run program
rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb log.txt $(RUN) ./$(PROG) $(ARGS)
$(PROG): $(SOURCES) # Build program from sources
$(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)
clean: # Cleanup. Delete built program and all build artifacts
$(DELETE) $(PROG) *.o *.obj *.exe *.dSYM

View File

@ -22,6 +22,7 @@ static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
mg_http_serve_dir(c, ev_data, &opts); mg_http_serve_dir(c, ev_data, &opts);
} }
} }
(void) fn_data;
} }
// The image stream is simulated by sending MJPEG frames specified by the // The image stream is simulated by sending MJPEG frames specified by the

View File

@ -0,0 +1 @@
../../mongoose.c

View File

@ -0,0 +1 @@
../../mongoose.h