Squashed commit of the following:
apps/examples/flowc: Adds the necessary termios controls to enable hardware flow control apps/examples/flowc: Add a simple test of serial hardware flow control. This commit just defines the frame work. Hardware flow control is not yet enabled.
This commit is contained in:
parent
27773d570b
commit
267521af9b
@ -428,6 +428,11 @@ examples/flash_test
|
||||
internal OS interfaces and so is not available in the NUTTX kernel
|
||||
builds
|
||||
|
||||
examples/flowc
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
A simple test of serial hardware flow control.
|
||||
|
||||
examples/fstest
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
16
examples/flowc/.gitignore
vendored
Normal file
16
examples/flowc/.gitignore
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/Make.dep
|
||||
/.depend
|
||||
/.built
|
||||
/host
|
||||
/config.h
|
||||
/*.asm
|
||||
/*.obj
|
||||
/*.rel
|
||||
/*.lst
|
||||
/*.sym
|
||||
/*.adb
|
||||
/*.lib
|
||||
/*.src
|
||||
/*.exe
|
||||
/*.dSYM
|
||||
/*.hobj
|
93
examples/flowc/Kconfig
Normal file
93
examples/flowc/Kconfig
Normal file
@ -0,0 +1,93 @@
|
||||
#
|
||||
# For a description of the syntax of this configuration file,
|
||||
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||
#
|
||||
|
||||
config EXAMPLES_FLOWC
|
||||
bool "Serial flow control example"
|
||||
default n
|
||||
depends on SERIAL_TERMIOS
|
||||
---help---
|
||||
Enable the serial hardware flow control test
|
||||
|
||||
if EXAMPLES_FLOWC
|
||||
|
||||
config EXAMPLES_FLOWC_INPUT
|
||||
bool "Verify input flow control"
|
||||
default y
|
||||
# depends on SERIAL_IFLOWCONTROL
|
||||
|
||||
config EXAMPLES_FLOWC_OUTPUT
|
||||
bool "Verify output flow control"
|
||||
default y
|
||||
# depends on SERIAL_OFLOWCONTROL
|
||||
|
||||
config EXAMPLES_FLOWC_SENDER1
|
||||
bool "Target1 is the sender"
|
||||
default n
|
||||
---help---
|
||||
By default Target1 is the receiver and the host PC (or Target2) is
|
||||
the sender. That is the configuration you would to test RX flow
|
||||
control on the target.
|
||||
|
||||
config EXAMPLES_FLOWC_PROGNAME1
|
||||
string "Target1 program name"
|
||||
default "receiver" if !EXAMPLES_FLOWC_SENDER1
|
||||
default "sender" if EXAMPLES_FLOWC_SENDER1
|
||||
depends on BUILD_KERNEL
|
||||
---help---
|
||||
This is the name of the Target1 program that will be use when the
|
||||
NSH ELF program is installed.
|
||||
|
||||
config EXAMPLES_FLOWC_PRIORITY1
|
||||
int "Target1 task priority"
|
||||
default 100
|
||||
|
||||
config EXAMPLES_FLOWC_STACKSIZE1
|
||||
int "Target1 stack size"
|
||||
default 2048
|
||||
|
||||
config EXAMPLES_FLOWC_TARGET2
|
||||
bool "Second endpoint is a target"
|
||||
default n
|
||||
---help---
|
||||
By default, the host PC is configured as the second endpoint of the
|
||||
FLOWC test. If this option is selected, then the second endpoint
|
||||
will be built into the FLASH image as well. This means that you
|
||||
can use two target boards to run the test with no host PC
|
||||
involvement.
|
||||
|
||||
if EXAMPLES_FLOWC_TARGET2
|
||||
|
||||
config EXAMPLES_FLOWC_PROGNAME2
|
||||
string "Target2 program name"
|
||||
default "receiver" if !EXAMPLES_FLOWC_RECEIVER2
|
||||
default "sender" if EXAMPLES_FLOWC_RECEIVER2
|
||||
depends on BUILD_KERNEL
|
||||
---help---
|
||||
This is the name of the Target2 program that will be use when the
|
||||
NSH ELF program is installed.
|
||||
|
||||
config EXAMPLES_FLOWC_PRIORITY2
|
||||
int "Target2 task priority"
|
||||
default 100
|
||||
|
||||
config EXAMPLES_FLOWC_STACKSIZE2
|
||||
int "Target2 stack size"
|
||||
default 2048
|
||||
|
||||
endif # EXAMPLES_FLOWC_TARGET2
|
||||
|
||||
config EXAMPLES_FLOWC_RECEIVER_BUFSIZE
|
||||
int "Receiver buffer size"
|
||||
default 64
|
||||
|
||||
config EXAMPLES_FLOWC_RECEVER_DEVNAME
|
||||
string "Default TTY device for receiver"
|
||||
default "/dev/ttyACM0"
|
||||
|
||||
config EXAMPLES_FLOWC_SENDER_DEVNAME
|
||||
string "Default TTY device for sender"
|
||||
default "/dev/ttyACM0"
|
||||
|
||||
endif # EXAMPLES_FLOWC
|
39
examples/flowc/Make.defs
Normal file
39
examples/flowc/Make.defs
Normal file
@ -0,0 +1,39 @@
|
||||
############################################################################
|
||||
# apps/examples/flowc/Make.defs
|
||||
# Adds selected applications to apps/ build
|
||||
#
|
||||
# Copyright (C) 2015 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# 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 NuttX 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 OWNER 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.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
ifeq ($(CONFIG_EXAMPLES_FLOWC),y)
|
||||
CONFIGURED_APPS += examples/flowc
|
||||
endif
|
235
examples/flowc/Makefile
Normal file
235
examples/flowc/Makefile
Normal file
@ -0,0 +1,235 @@
|
||||
############################################################################
|
||||
# apps/examples/flowc/Makefile
|
||||
#
|
||||
# Copyright (C) 2007-2008, 2011-2012, 2014, 2017 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# 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 NuttX 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 OWNER 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 $(TOPDIR)/.config
|
||||
-include $(TOPDIR)/Make.defs
|
||||
include $(APPDIR)/Make.defs
|
||||
|
||||
# FLOWC Test
|
||||
|
||||
# Target 1
|
||||
|
||||
TARG1_CRCS =
|
||||
ifeq ($(CONFIG_!EXAMPLES_FLOWC_SENDER1),y)
|
||||
TARG1_CRCS += flowc_sender.c
|
||||
else
|
||||
TARG1_CRCS += flowc_receiver.c
|
||||
endif
|
||||
TARG1_MAINSRC = flowc_target1.c
|
||||
|
||||
TARG1_COBJS = $(TARG1_CRCS:.c=$(OBJEXT))
|
||||
TARG1_MAINOBJ = $(TARG1_MAINSRC:.c=$(OBJEXT))
|
||||
|
||||
ifeq ($(CONFIG_!EXAMPLES_FLOWC_SENDER1),y)
|
||||
CONFIG_EXAMPLES_FLOWC_PROGNAME1 ?= sender
|
||||
APPNAME1 = sender
|
||||
else
|
||||
CONFIG_EXAMPLES_FLOWC_PROGNAME1 ?= receiver
|
||||
APPNAME1 = receiver
|
||||
endif
|
||||
CONFIG_EXAMPLES_FLOWC_PRIORITY1 ?= 100
|
||||
CONFIG_EXAMPLES_FLOWC_STACKSIZE1 ?= 2048
|
||||
|
||||
PROGNAME1 = $(CONFIG_EXAMPLES_FLOWC_PROGNAME1)
|
||||
PRIORITY1 = $(CONFIG_EXAMPLES_FLOWC_PRIORITY1)
|
||||
STACKSIZE1 = $(CONFIG_EXAMPLES_FLOWC_STACKSIZE1)
|
||||
|
||||
# Target 2
|
||||
|
||||
ifeq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
|
||||
TARG2_CSRCS =
|
||||
ifeq ($(CONFIG_!EXAMPLES_FLOWC_SENDER1),y)
|
||||
TARG2_CSRCS += flowc_receiver.c
|
||||
else
|
||||
TARG2_CSRCS += flowc_sender.c
|
||||
endif
|
||||
TARG2_MAINSRC = flowc_target2.c
|
||||
|
||||
TARG2_COBJS = $(TARG2_CSRCS:.c=$(OBJEXT))
|
||||
TARG2_MAINOBJ = $(TARG2_MAINSRC:.c=$(OBJEXT))
|
||||
|
||||
ifeq ($(CONFIG_!EXAMPLES_FLOWC_SENDER1),y)
|
||||
CONFIG_EXAMPLES_FLOWC_PROGNAME2 ?= receiver
|
||||
APPNAME2 = receiver
|
||||
else
|
||||
CONFIG_EXAMPLES_FLOWC_PROGNAME2 ?= sender
|
||||
APPNAME2 = sender
|
||||
endif
|
||||
CONFIG_EXAMPLES_FLOWC_PRIORITY2 ?= 100
|
||||
CONFIG_EXAMPLES_FLOWC_STACKSIZE2 ?= 2048
|
||||
|
||||
PROGNAME2 = $(CONFIG_EXAMPLES_FLOWC_PROGNAME2)
|
||||
PRIORITY2 = $(CONFIG_EXAMPLES_FLOWC_PRIORITY2)
|
||||
STACKSIZE2 = $(CONFIG_EXAMPLES_FLOWC_STACKSIZE2)
|
||||
|
||||
endif
|
||||
|
||||
TARG_SRCS = $(TARG1_CRCS) $(TARG1_MAINSRC) $(TARG2_CSRCS) $(TARG2_MAINSRC)
|
||||
TARG_OBJS = $(TARG1_COBJS) $(TARG2_COBJS)
|
||||
|
||||
ifneq ($(CONFIG_BUILD_KERNEL),y)
|
||||
TARG_OBJS += $(TARG1_MAINOBJ) $(TARG2_MAINOBJ)
|
||||
endif
|
||||
|
||||
# Host
|
||||
|
||||
ifneq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
|
||||
HOSTCFLAGS += -DEXAMPLES_FLOWC_HOST=1
|
||||
HOSTOBJSEXT ?= hobj
|
||||
|
||||
HOST_SRCS = flowc_host.c
|
||||
ifeq ($(CONFIG_!EXAMPLES_FLOWC_SENDER1),y)
|
||||
HOST_SRCS += flowc_receiver.c
|
||||
HOST_BIN = receiver$(EXEEXT)
|
||||
else
|
||||
HOST_SRCS += flowc_sender.c
|
||||
HOST_BIN = sender$(EXEEXT)
|
||||
endif
|
||||
|
||||
HOST_OBJS = $(HOST_SRCS:.c=.$(HOSTOBJSEXT))
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
||||
TARG_BIN = ..\..\libapps$(LIBEXT)
|
||||
else
|
||||
ifeq ($(WINTOOL),y)
|
||||
TARG_BIN = ..\\..\\libapps$(LIBEXT)
|
||||
else
|
||||
TARG_BIN = ../../libapps$(LIBEXT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
MAINNAME1 = flowc1_main
|
||||
MAINNAME2 = flowc2_main
|
||||
else
|
||||
MAINNAME1 = flowc_main
|
||||
endif
|
||||
|
||||
ifeq ($(WINTOOL),y)
|
||||
INSTALL_DIR = "${shell cygpath -w $(BIN_DIR)}"
|
||||
else
|
||||
INSTALL_DIR = $(BIN_DIR)
|
||||
endif
|
||||
|
||||
ROOTDEPPATH = --dep-path .
|
||||
|
||||
# Common build
|
||||
|
||||
VPATH =
|
||||
|
||||
all: .built
|
||||
.PHONY: clean depend distclean preconfig
|
||||
.PRECIOUS: ../../libapps$(LIBEXT)
|
||||
|
||||
$(TARG1_COBJS) $(TARG1_MAINOBJ) $(TARG2_COBJS) $(TARG2_MAINOBJ): %$(OBJEXT): %.c
|
||||
$(call COMPILE, $<, $@)
|
||||
|
||||
$(TARG_BIN): $(TARG_OBJS) $(HOST_BIN)
|
||||
$(call ARCHIVE, $@, $(TARG_OBJS))
|
||||
|
||||
ifneq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
$(HOST_OBJS): %.$(HOSTOBJSEXT): %.c
|
||||
@echo "CC: $<"
|
||||
$(Q) $(HOSTCC) -c $(HOSTCFLAGS) $< -o $@
|
||||
endif
|
||||
|
||||
config.h: $(TOPDIR)/include/nuttx/config.h
|
||||
@echo "CP: $<"
|
||||
$(Q) cp $< $@
|
||||
|
||||
ifneq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
$(HOST_BIN): config.h $(HOST_OBJS)
|
||||
$(Q) $(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS) -o $@
|
||||
endif
|
||||
|
||||
.built: config.h $(TARG_BIN) $(HOST_BIN)
|
||||
$(Q) touch .built
|
||||
|
||||
ifeq ($(CONFIG_BUILD_KERNEL),y)
|
||||
$(BIN_DIR)$(DELIM)$(PROGNAME1): $(OBJS) $(TARG1_MAINOBJ)
|
||||
@echo "LD: $(PROGNAME1)"
|
||||
$(Q) $(LD) $(LDELFFLAGS) $(LDLIBPATH) -o $(INSTALL_DIR)$(DELIM)$(PROGNAME1) $(ARCHCRT0OBJ) $(TARG1_MAINOBJ) $(LDLIBS)
|
||||
$(Q) $(NM) -u $(INSTALL_DIR)$(DELIM)$(PROGNAME1)
|
||||
|
||||
install: $(BIN_DIR)$(DELIM)$(PROGNAME1)
|
||||
|
||||
else
|
||||
install:
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
|
||||
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat: $(DEPCONFIG) Makefile
|
||||
$(call REGISTER,$(APPNAME1),$(PRIORITY1),$(STACKSIZE1),$(MAINNAME1))
|
||||
|
||||
ifeq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME2)_main.bdat: $(DEPCONFIG) Makefile
|
||||
$(call REGISTER,$(APPNAME2),$(PRIORITY2),$(STACKSIZE2),$(MAINNAME2))
|
||||
|
||||
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat \
|
||||
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME2)_main.bdat
|
||||
else
|
||||
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat
|
||||
endif
|
||||
else
|
||||
context:
|
||||
endif
|
||||
|
||||
.depend: Makefile config.h $(TARG_SRCS)
|
||||
@$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(TARG_SRCS) >Make.dep
|
||||
@touch $@
|
||||
|
||||
depend: .depend
|
||||
|
||||
clean:
|
||||
$(call DELFILE, .built)
|
||||
ifneq ($(CONFIG_EXAMPLES_FLOWC_TARGET2),y)
|
||||
$(call DELFILE, $(HOST_BIN))
|
||||
$(call DELFILE, *.$(HOSTOBJSEXT))
|
||||
endif
|
||||
$(call DELFILE, *.dSYM)
|
||||
$(call DELFILE, config.h)
|
||||
$(call CLEAN)
|
||||
|
||||
distclean: clean
|
||||
$(call DELFILE, Make.dep)
|
||||
$(call DELFILE, .depend)
|
||||
|
||||
preconfig:
|
||||
|
||||
-include Make.dep
|
72
examples/flowc/flowc.h
Normal file
72
examples/flowc/flowc.h
Normal file
@ -0,0 +1,72 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc.h
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 NuttX 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 OWNER 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 __EXAMPLES_FLOWC_FLOWC_H
|
||||
#define __EXAMPLES_FLOWC_FLOWC_H
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef EXAMPLES_FLOWC_HOST
|
||||
#else
|
||||
# include <debug.h>
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef EXAMPLES_FLOWC_HOST
|
||||
# define FAR
|
||||
#endif
|
||||
|
||||
#define MAX_DEVNAME 64
|
||||
#define SENDSIZE (0x7f - 0x20)
|
||||
#define NSENDS 1024
|
||||
#define TOTALSIZE (NSENDS * SENDSIZE)
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
int flowc_sender(int argc, char **argv);
|
||||
int flowc_receiver(int argc, char **argv);
|
||||
|
||||
#endif /* __EXAMPLES_FLOWC_FLOWC_H */
|
60
examples/flowc/flowc_host.c
Normal file
60
examples/flowc/flowc_host.c
Normal file
@ -0,0 +1,60 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc_host.c
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 Gregory Nutt 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 OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
#include "flowc.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* main
|
||||
****************************************************************************/
|
||||
|
||||
int main(int argc, char **argv, char **envp)
|
||||
{
|
||||
/* Run the receiver or sender, depending upon how target1 was configured */
|
||||
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_SENDER1
|
||||
return flowc_receiver(argc, argv);
|
||||
#else
|
||||
return flowc_sender(argc, argv);
|
||||
#endif
|
||||
}
|
198
examples/flowc/flowc_receiver.c
Normal file
198
examples/flowc/flowc_receiver.c
Normal file
@ -0,0 +1,198 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc_receiver.c
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 Gregory Nutt 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 OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "flowc.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
static char g_tty_devname[MAX_DEVNAME] = CONFIG_EXAMPLES_FLOWC_RECEVER_DEVNAME;
|
||||
static char g_expected = 0x20;
|
||||
static unsigned int g_nerrors;
|
||||
static unsigned long g_count;
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
static inline void check_buffer(FAR uint8_t *buf, size_t buflen)
|
||||
{
|
||||
unsigned long count;
|
||||
FAR uint8_t *ptr;
|
||||
size_t i;
|
||||
int ch;
|
||||
|
||||
/* Verfiy the buffer content */
|
||||
|
||||
ch = g_expected;
|
||||
|
||||
for (i = 0, ptr = buf, count = g_count; i < buflen; i++, ptr++, count++)
|
||||
{
|
||||
if (*ptr != ch)
|
||||
{
|
||||
printf("receiver: ERROR: Expected %c (%02x), found %c (%02x) at count=%lu\n",
|
||||
isprint(ch) ? ch : '.', ch,
|
||||
isprint(*ptr) ? *ptr : '.', *ptr,
|
||||
count);
|
||||
g_nerrors++;
|
||||
ch = *ptr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update globals */
|
||||
|
||||
g_expected = ch + 1;
|
||||
if (g_expected > 0x7e)
|
||||
{
|
||||
g_expected = 0x20;
|
||||
}
|
||||
|
||||
g_count = count;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* flowc_cmdline
|
||||
****************************************************************************/
|
||||
|
||||
static int flowc_cmdline(int argc, char **argv)
|
||||
{
|
||||
/* Currently only a single command line option is supported: The receiver
|
||||
* IP address.
|
||||
*/
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
strncpy(g_tty_devname, argv[1], MAX_DEVNAME);
|
||||
}
|
||||
else if (argc != 1)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Too many arguments\n");
|
||||
fprintf(stderr, "USAGE: %s [<tty-devname>]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
int flowc_receiver(int argc, char **argv)
|
||||
{
|
||||
uint8_t inbuf[CONFIG_EXAMPLES_FLOWC_RECEIVER_BUFSIZE];
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_INPUT
|
||||
struct termios term;
|
||||
#endif
|
||||
ssize_t nread;
|
||||
int ret;
|
||||
int fd;
|
||||
|
||||
/* Parse the command line */
|
||||
|
||||
ret = flowc_cmdline(argc, argv);
|
||||
if (ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Open the serial device */
|
||||
|
||||
fd = open(g_tty_devname, O_RDONLY);
|
||||
if (fd < 0)
|
||||
{
|
||||
printf("sender ERROR: Failed to open %s: %d\n", g_tty_devname, errno);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_INPUT
|
||||
/* Set input flow control */
|
||||
|
||||
tcgetattr(fd, &term);
|
||||
#ifdef CRTS_IFLOW
|
||||
term.c_cflag |= CRTS_IFLOW;
|
||||
#else
|
||||
term.c_cflag |= CRTSCTS;
|
||||
#endif
|
||||
tcsetattr(fd, TCSANOW, &term);
|
||||
#endif
|
||||
|
||||
/* Then receive until all data has been received correctly (possibly
|
||||
* hanging if data is lost).
|
||||
*/
|
||||
|
||||
while (g_count < TOTALSIZE)
|
||||
{
|
||||
nread = read(fd, inbuf, CONFIG_EXAMPLES_FLOWC_RECEIVER_BUFSIZE);
|
||||
if (nread < 0)
|
||||
{
|
||||
printf("receiver: %lu. recv failed: %d\n", g_count, errno);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
check_buffer(inbuf, nread);
|
||||
if (g_nerrors > 25)
|
||||
{
|
||||
printf("receiver: %lu. Too many errors: %u\n", g_count, g_nerrors);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
171
examples/flowc/flowc_sender.c
Normal file
171
examples/flowc/flowc_sender.c
Normal file
@ -0,0 +1,171 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc_sender.c
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 Gregory Nutt 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 OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "flowc.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
static char g_tty_devname[MAX_DEVNAME] = CONFIG_EXAMPLES_FLOWC_SENDER_DEVNAME;
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
static inline void fill_buffer(FAR uint8_t *buf)
|
||||
{
|
||||
FAR uint8_t *ptr;
|
||||
int ch;
|
||||
|
||||
for (ch = 0x20; ch < 0x7f; ch++)
|
||||
{
|
||||
*ptr++ = ch;
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* flowc_cmdline
|
||||
****************************************************************************/
|
||||
|
||||
static int flowc_cmdline(int argc, char **argv)
|
||||
{
|
||||
/* Currently only a single command line option is supported: The receiver
|
||||
* IP address.
|
||||
*/
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
strncpy(g_tty_devname, argv[1], MAX_DEVNAME);
|
||||
}
|
||||
else if (argc != 1)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Too many arguments\n");
|
||||
fprintf(stderr, "USAGE: %s [<tty-devname>]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
int flowc_sender(int argc, char **argv)
|
||||
{
|
||||
uint8_t outbuf[SENDSIZE];
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_OUTPUT
|
||||
struct termios term;
|
||||
#endif
|
||||
ssize_t nsent;
|
||||
int ret;
|
||||
int fd;
|
||||
int i;
|
||||
|
||||
/* Parse the command line */
|
||||
|
||||
ret = flowc_cmdline(argc, argv);
|
||||
if (ret != 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Open the serial device */
|
||||
|
||||
fd = open(g_tty_devname, O_WRONLY);
|
||||
if (fd < 0)
|
||||
{
|
||||
printf("sender ERROR: Failed to open %s: %d\n", g_tty_devname, errno);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_OUTPUT
|
||||
/* Set output flow control */
|
||||
|
||||
tcgetattr(fd, &term);
|
||||
#ifdef CCTS_OFLOW
|
||||
term.c_cflag |= CCTS_OFLOW;
|
||||
#else
|
||||
term.c_cflag |= CRTSCTS;
|
||||
#endif
|
||||
tcsetattr(fd, TCSANOW, &term);
|
||||
#endif
|
||||
|
||||
/* Set up the output buffer */
|
||||
|
||||
fill_buffer(outbuf);
|
||||
|
||||
/* Then send the buffer multiple times as fast as possible */
|
||||
|
||||
for (i = 0; i < NSENDS; i++)
|
||||
{
|
||||
/* Send the message */
|
||||
|
||||
nsent = write(fd, outbuf, SENDSIZE);
|
||||
if (nsent < 0)
|
||||
{
|
||||
printf("sender: %lu. write failed: %d\n",
|
||||
(unsigned long)i*SENDSIZE, errno);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
else if (nsent != SENDSIZE)
|
||||
{
|
||||
printf("sender: %lu. Bad send length: %ld Expected: %d\n",
|
||||
(unsigned long)i*SENDSIZE, (long)nsent, SENDSIZE);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
66
examples/flowc/flowc_target1.c
Normal file
66
examples/flowc/flowc_target1.c
Normal file
@ -0,0 +1,66 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc_target1.c
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 NuttX 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 OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
#include "flowc.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* flowc1_main
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_BUILD_KERNEL)
|
||||
int main(int argc, FAR char *argv[])
|
||||
#elif defined(CONFIG_EXAMPLES_FLOWC_TARGET2)
|
||||
int flowc1_main(int argc, char *argv[])
|
||||
#else
|
||||
int flowc_main(int argc, char *argv[])
|
||||
#endif
|
||||
{
|
||||
/* Run the receiver or sender, depending upon how we are configured */
|
||||
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_SENDER1
|
||||
return flowc_sender(argc, argv);
|
||||
#else
|
||||
return flowc_receiver(argc, argv);
|
||||
#endif
|
||||
}
|
64
examples/flowc/flowc_target2.c
Normal file
64
examples/flowc/flowc_target2.c
Normal file
@ -0,0 +1,64 @@
|
||||
/****************************************************************************
|
||||
* examples/flowc/flowc_target2.c
|
||||
*
|
||||
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* 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 NuttX 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 OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
#include "flowc.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* flowc2_main
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_BUILD_KERNEL)
|
||||
int main(int argc, FAR char *argv[])
|
||||
#else
|
||||
int flowc2_main(int argc, char *argv[])
|
||||
#endif
|
||||
{
|
||||
/* Run the receiver or sender, depending upon how target1 was configured */
|
||||
|
||||
#ifdef CONFIG_EXAMPLES_FLOWC_SENDER1
|
||||
return flowc_receiver(argc, argv);
|
||||
#else
|
||||
return flowc_sender(argc, argv);
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue
Block a user