diff --git a/examples/gcoap_fileserver/Makefile b/examples/gcoap_fileserver/Makefile new file mode 100644 index 0000000000000..364ebfa52fb72 --- /dev/null +++ b/examples/gcoap_fileserver/Makefile @@ -0,0 +1,35 @@ +# name of your application +APPLICATION = gcoap_fileserver + +# If no BOARD is found in the environment, use this default: +BOARD ?= native + +# 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: +DEVELHELP ?= 1 + +# Change this to 0 show compiler invocation lines by default: +QUIET ?= 1 + +# Modules to include: +USEMODULE += shell +USEMODULE += shell_commands + +# enable the fileserver module +USEMODULE += gcoap_fileserver + +# select network modules +USEMODULE += gnrc_ipv6_default +USEMODULE += auto_init_gnrc_netif +USEMODULE += netdev_default +USEMODULE += gnrc_icmpv6_echo + +# enable default file system mount points +USEMODULE += vfs_default +# USEMODULE += vfs_auto_format + +include $(RIOTBASE)/Makefile.include diff --git a/examples/gcoap_fileserver/main.c b/examples/gcoap_fileserver/main.c new file mode 100644 index 0000000000000..069c94c653efb --- /dev/null +++ b/examples/gcoap_fileserver/main.c @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2022 ML!PA Consulting GmbH + * + * 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. + */ + +/** + * @ingroup examples + * @{ + * + * @file + * @brief Example application for demonstrating the GCoAP file server + * + * @author Benjamin Valentin + * @} + */ + +#include "net/gcoap.h" +#include "net/gcoap/fileserver.h" +#include "shell.h" +#include "vfs_default.h" + +#define MAIN_QUEUE_SIZE (4) +static msg_t _main_msg_queue[MAIN_QUEUE_SIZE]; + +static const gcoap_fileserver_entry_t _vfs_entry = { + .root = VFS_DEFAULT_DATA, + .resource = "/vfs", +}; + +/* CoAP resources. Must be sorted by path (ASCII order). */ +static const coap_resource_t _resources[] = { + { "/vfs", COAP_GET | COAP_MATCH_SUBTREE, gcoap_fileserver_handler, (void *)&_vfs_entry }, +}; + +static gcoap_listener_t _listener = { + .resources = _resources, + .resources_len = ARRAY_SIZE(_resources), +}; + +int main(void) +{ + msg_init_queue(_main_msg_queue, MAIN_QUEUE_SIZE); + gcoap_register_listener(&_listener); + + char line_buf[SHELL_DEFAULT_BUFSIZE]; + shell_run(NULL, line_buf, SHELL_DEFAULT_BUFSIZE); + + return 0; +}