From 21dacd56c4437972bb6f510ab82461fde9ba52aa Mon Sep 17 00:00:00 2001
From: George Oikonomou <george@contiki-ng.org>
Date: Mon, 30 Oct 2017 22:52:31 +0000
Subject: [PATCH] Provision for platform-specific example aspects

* Use early target identification
* Move sky-specific code to separate sub-dir
---
 examples/rpl-border-router/Makefile           |  9 +++
 examples/rpl-border-router/project-conf.h     |  7 +-
 examples/rpl-border-router/sky/Makefile.sky   |  3 +
 .../sky/slip-bridge-putchar.c                 | 64 +++++++++++++++++++
 examples/rpl-border-router/sky/target-conf.h  | 39 +++++++++++
 examples/rpl-border-router/slip-bridge.c      | 30 ---------
 6 files changed, 121 insertions(+), 31 deletions(-)
 create mode 100644 examples/rpl-border-router/sky/Makefile.sky
 create mode 100644 examples/rpl-border-router/sky/slip-bridge-putchar.c
 create mode 100644 examples/rpl-border-router/sky/target-conf.h

diff --git a/examples/rpl-border-router/Makefile b/examples/rpl-border-router/Makefile
index 2f02a031e2..d20bec220d 100644
--- a/examples/rpl-border-router/Makefile
+++ b/examples/rpl-border-router/Makefile
@@ -3,6 +3,15 @@ all: $(CONTIKI_PROJECT)
 
 CONTIKI=../..
 
+ifeq ($(TARGET),)
+  -include Makefile.target
+endif
+
+### Optionally, the target can add its own Makefile, to do things like e.g.
+### add more source files to the build or define make variables.
+-include $(TARGET)/Makefile.$(TARGET)
+
+PROJECTDIRS += $(TARGET)
 PROJECT_SOURCEFILES += slip-bridge.c httpd-simple.c
 
 ifeq ($(PREFIX),)
diff --git a/examples/rpl-border-router/project-conf.h b/examples/rpl-border-router/project-conf.h
index 32703ce453..b67d39e564 100644
--- a/examples/rpl-border-router/project-conf.h
+++ b/examples/rpl-border-router/project-conf.h
@@ -30,7 +30,12 @@
 
 #ifndef PROJECT_ROUTER_CONF_H_
 #define PROJECT_ROUTER_CONF_H_
-
+/*---------------------------------------------------------------------------*/
+/* Include target-specific header */
+#ifdef TARGET_CONF_PATH
+#include TARGET_CONF_PATH
+#endif /* TARGET_CONF_PATH */
+/*---------------------------------------------------------------------------*/
 #ifndef UIP_FALLBACK_INTERFACE
 #define UIP_FALLBACK_INTERFACE rpl_interface
 #endif
diff --git a/examples/rpl-border-router/sky/Makefile.sky b/examples/rpl-border-router/sky/Makefile.sky
new file mode 100644
index 0000000000..c3d097481e
--- /dev/null
+++ b/examples/rpl-border-router/sky/Makefile.sky
@@ -0,0 +1,3 @@
+PROJECT_SOURCEFILES += slip-bridge-putchar.c
+
+CFLAGS += -DTARGET_CONF_PATH=\"target-conf.h\"
diff --git a/examples/rpl-border-router/sky/slip-bridge-putchar.c b/examples/rpl-border-router/sky/slip-bridge-putchar.c
new file mode 100644
index 0000000000..f7f501ba19
--- /dev/null
+++ b/examples/rpl-border-router/sky/slip-bridge-putchar.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+/*---------------------------------------------------------------------------*/
+#include "contiki.h"
+#include "dev/slip.h"
+
+#include <string.h>
+/*---------------------------------------------------------------------------*/
+#define SLIP_END     0300
+#undef putchar
+/*---------------------------------------------------------------------------*/
+int
+putchar(int c)
+{
+  static char debug_frame = 0;
+
+  if(!debug_frame) {            /* Start of debug output */
+    slip_arch_writeb(SLIP_END);
+    slip_arch_writeb('\r');     /* Type debug line == '\r' */
+    debug_frame = 1;
+  }
+
+  /* Need to also print '\n' because for example COOJA will not show
+     any output before line end */
+  slip_arch_writeb((char)c);
+
+  /*
+   * Line buffered output, a newline marks the end of debug output and
+   * implicitly flushes debug output.
+   */
+  if(c == '\n') {
+    slip_arch_writeb(SLIP_END);
+    debug_frame = 0;
+  }
+  return c;
+}
+/*---------------------------------------------------------------------------*/
diff --git a/examples/rpl-border-router/sky/target-conf.h b/examples/rpl-border-router/sky/target-conf.h
new file mode 100644
index 0000000000..3b0b0fcd4d
--- /dev/null
+++ b/examples/rpl-border-router/sky/target-conf.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2017, George Oikonomou - http://www.spd.gr
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*---------------------------------------------------------------------------*/
+#ifndef TARGET_CONF_H_
+#define TARGET_CONF_H_
+/*---------------------------------------------------------------------------*/
+#define QUEUEBUF_CONF_NUM         4
+#define UIP_CONF_BUFFER_SIZE    140
+/*---------------------------------------------------------------------------*/
+#endif /* TARGET_CONF_H_ */
+/*---------------------------------------------------------------------------*/
diff --git a/examples/rpl-border-router/slip-bridge.c b/examples/rpl-border-router/slip-bridge.c
index a975b22d8d..abf95dfa8d 100644
--- a/examples/rpl-border-router/slip-bridge.c
+++ b/examples/rpl-border-router/slip-bridge.c
@@ -118,36 +118,6 @@ output(void)
   return 0;
 }
 /*---------------------------------------------------------------------------*/
-#if !SLIP_BRIDGE_CONF_NO_PUTCHAR
-#undef putchar
-int
-putchar(int c)
-{
-#define SLIP_END     0300
-  static char debug_frame = 0;
-
-  if(!debug_frame) {            /* Start of debug output */
-    slip_arch_writeb(SLIP_END);
-    slip_arch_writeb('\r');     /* Type debug line == '\r' */
-    debug_frame = 1;
-  }
-
-  /* Need to also print '\n' because for example COOJA will not show
-     any output before line end */
-  slip_arch_writeb((char)c);
-
-  /*
-   * Line buffered output, a newline marks the end of debug output and
-   * implicitly flushes debug output.
-   */
-  if(c == '\n') {
-    slip_arch_writeb(SLIP_END);
-    debug_frame = 0;
-  }
-  return c;
-}
-#endif
-/*---------------------------------------------------------------------------*/
 const struct uip_fallback_interface rpl_interface = {
   init, output
 };
-- 
GitLab