From fc4fd6222fc5ca0bb843dc2bb0e7e55335138802 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Ignacio=20Alamos?= <jialamos@uc.cl>
Date: Thu, 1 Jun 2017 11:48:23 -0400
Subject: [PATCH] pkg/openthread: Add tests

---
 tests/openthread/Makefile  | 53 ++++++++++++++++++++++++++++++++++++++
 tests/openthread/README.md | 36 ++++++++++++++++++++++++++
 tests/openthread/main.c    | 34 ++++++++++++++++++++++++
 3 files changed, 123 insertions(+)
 create mode 100644 tests/openthread/Makefile
 create mode 100644 tests/openthread/README.md
 create mode 100644 tests/openthread/main.c

diff --git a/tests/openthread/Makefile b/tests/openthread/Makefile
new file mode 100644
index 0000000000..f547007f75
--- /dev/null
+++ b/tests/openthread/Makefile
@@ -0,0 +1,53 @@
+APPLICATION = openthread
+
+# If no BOARD is found in the environment, use this default:
+BOARD ?= samr21-xpro
+
+BOARD_WHITELIST := samr21-xpro iotlab-m3 fox iotlab-a8-m3
+
+# This has to be the absolute path to the RIOT base directory:
+RIOTBASE ?= $(CURDIR)/../..
+
+# Comment this out to disable code in RIOT that does safety checking
+# which is not needed in a production environment but helps in the
+# development process:
+CFLAGS += -DDEVELHELP -Wall
+
+# Change this to 0 show compiler invocation lines by default:
+QUIET ?= 1
+
+USEPKG += openthread
+USEMODULE += openthread_contrib
+USEMODULE += libmbedcrypto
+USEMODULE += libopenthread
+USEMODULE += libopenthread-cli
+USEMODULE += xtimer
+
+ifneq (,$(filter samr21-xpro,$(BOARD)))
+  DRIVER := at86rf233
+endif
+ifneq (,$(filter iotlab-m3 fox iotlab-a8-m3,$(BOARD)))
+  DRIVER := at86rf231
+endif
+
+ifneq (,$(filter at86rf2%,$(DRIVER)))
+  FEATURES_REQUIRED = periph_spi
+  FEATURES_REQUIRED = periph_gpio
+endif
+
+USEMODULE += $(DRIVER)
+
+USEMODULE += random
+USEMODULE += shell
+USEMODULE += shell_commands
+USEMODULE += ps
+USEMODULE += ipv6_addr
+
+#required for C++ compiling
+CXXEXFLAGS += -fno-rtti
+USEMODULE += cpp11-compat
+
+#Define PANID and CHANNEL used by default
+#CFLAGS += -DOPENTHREAD_PANID=0xbeef -DOPENTHREAD_CHANNEL=11
+
+include $(RIOTBASE)/Makefile.include
diff --git a/tests/openthread/README.md b/tests/openthread/README.md
new file mode 100644
index 0000000000..25a79ef83c
--- /dev/null
+++ b/tests/openthread/README.md
@@ -0,0 +1,36 @@
+## OpenThread on RIOT
+
+This test demonstrates the [OpenThread](https://github.com/openthread/openthread) stack running on RIOT. When flashed,
+it will initialize the OpenThread Command Line Interface for interacting with the stack.
+
+## Quick usage
+
+To test OpenThread on RIOT, you can do the following:
+
+1. Flash nodes with `make BOARD=<target> clean all flash`
+2. Write `panid 0x1234`, `ifconfig up` then `thread start` on one node.
+3. Check the state of the node with `state`. In the beggining should be `detached`, but after some seconds it should
+   become `leader`
+4. Write `panid 0x1234`, `ifconfig up` then `thread start` on another node.
+The second node should become `child` or `router` if there's a leader.
+5. Get the mesh IP address of a node with `ipaddr`.
+
+```
+    ipaddr
+   fdde:ad00:beef::ff:fe00:8000
+   fe80::ff:fe00:8000
+   fdde:ad00:beef:0:946a:c722:a5d9:8481
+   fe80::3984:f4eb:d182:5dae
+```
+
+   Addresses starting with `fd` are mesh-local, and addresses starting with `fe80` are link-local.
+   Mesh-local address types that contain `ff:fe00` are classified as Router Locator (RLOC). Mesh-local address types
+   that don't contain `ff:fe00` are Endpoint Identifies (EID).
+6. Ping from another node to a mesh-local address with `ping fdde:ad00:beef:0:946a:c722:a5d9:8481`.
+7. You can try IEEE802.15.4 scan with `scan` command
+8. You can also check other commands with `help`
+9. Enjoy!
+
+## Note
+
+See the [OpenThread CLI Reference](https://github.com/openthread/openthread/blob/master/src/cli/README.md) for more information about OpenThread CLI commands
diff --git a/tests/openthread/main.c b/tests/openthread/main.c
new file mode 100644
index 0000000000..591abb3cef
--- /dev/null
+++ b/tests/openthread/main.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 Baptiste CLENET
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @file
+ * @brief       OpenThread test application
+ *
+ * @author      Baptiste Clenet <baptiste.clenet@xsoen.com>
+ */
+
+#include <stdio.h>
+
+#include "net/ipv6/addr.h"
+#include "openthread/ip6.h"
+#include "openthread/thread.h"
+#include "openthread/udp.h"
+#include "ot.h"
+#include "shell.h"
+#include "shell_commands.h"
+int main(void)
+{
+    printf("Get PANID\n");
+    uint16_t panid = 0;
+    uint8_t res = ot_call_command("panid", NULL, (void*)&panid);
+    printf("Current panid: 0x%x (res:%x)\n", panid, res);
+
+    openthread_uart_run();
+    return 0;
+}
-- 
GitLab