From 3060d72234e8e0a09b001ff8ea348dc09f6b56f9 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Tue, 6 Oct 2015 17:54:43 +1100 Subject: [PATCH] Add a basic serial_echo example, with a silly Easter Egg --- examples/serial_echo/Makefile | 3 +++ examples/serial_echo/serial_echo.c | 41 ++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 examples/serial_echo/Makefile create mode 100644 examples/serial_echo/serial_echo.c diff --git a/examples/serial_echo/Makefile b/examples/serial_echo/Makefile new file mode 100644 index 0000000..717b163 --- /dev/null +++ b/examples/serial_echo/Makefile @@ -0,0 +1,3 @@ +# Simple makefile for simple example +PROGRAM=simple +include ../../common.mk diff --git a/examples/serial_echo/serial_echo.c b/examples/serial_echo/serial_echo.c new file mode 100644 index 0000000..cea3f33 --- /dev/null +++ b/examples/serial_echo/serial_echo.c @@ -0,0 +1,41 @@ +/* Extremely simple example that just reads from stdin and echoes back on stdout + * + * Has an easter egg, which is if you type "QUACK" it'll quack 3 times back at you. + * + * This example code is in the public domain + */ +#include "espressif/esp_common.h" +#include +#include + +void user_init(void) +{ + printf("SDK version:%s\n", sdk_system_get_sdk_version()); + printf("Going into echo mode...\n"); + + /* By default stdout is line-buffered, so you only see output + after a newline is sent. This is helpful in a multithreaded + environment so output doesn't get chopped up within a line. + + Here we want to see the echo immediately, so disable buffering. + */ + setbuf(stdout, NULL); + + while(1) { + int c = getchar(); + if(c != EOF) + putchar(c); + + /* Easter egg: check for a quack! */ + static int quack; + if(c == "QUACK"[quack]) { + quack++; + if(quack == strlen("QUACK")) { + printf("\nQUACK\nQUACK\n"); + quack = 0; + } + } else { + quack = 0; + } + } +}