Relay example from Darcy Gong

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5306 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-11-04 16:08:02 +00:00
parent f561a5ab03
commit 9583fa1abd
12 changed files with 357 additions and 23 deletions

View File

@ -399,3 +399,4 @@
Qiang Yu and the RGMP team.
* apps/netutils/webclient, apps/netutils.codes, and apps/examples/wgetjson:
Add support for wget POST interface. Contributed by Darcy Gong.
* apps/examples/relays: A relay example contributed by Darcy Gong.

View File

@ -39,6 +39,7 @@ source "$APPSDIR/examples/pipe/Kconfig"
source "$APPSDIR/examples/poll/Kconfig"
source "$APPSDIR/examples/pwm/Kconfig"
source "$APPSDIR/examples/qencoder/Kconfig"
source "$APPSDIR/examples/relays/Kconfig"
source "$APPSDIR/examples/rgmp/Kconfig"
source "$APPSDIR/examples/romfs/Kconfig"
source "$APPSDIR/examples/sendmail/Kconfig"

View File

@ -178,6 +178,10 @@ ifeq ($(CONFIG_EXAMPLES_QENCODER),y)
CONFIGURED_APPS += examples/qencoder
endif
ifeq ($(CONFIG_EXAMPLES_RELAYS),y)
CONFIGURED_APPS += examples/relays
endif
ifeq ($(CONFIG_EXAMPLES_RGMP),y)
CONFIGURED_APPS += examples/rgmp
endif

View File

@ -40,9 +40,9 @@
SUBDIRS = adc buttons can cdcacm composite cxxtest dhcpd discover elf ftpc
SUBDIRS += ftpd hello helloxx hidkbd igmp json lcdrw mm modbus mount
SUBDIRS += nettest nsh null nx nxconsole nxffs nxflat nxhello nximage
SUBDIRS += nxlines nxtext ostest pashello pipe poll pwm qencoder rgmp
SUBDIRS += romfs serloop telnetd thttpd tiff touchscreen udp uip usbserial
SUBDIRS += sendmail usbstorage usbterm watchdog wget wgetjson wlan
SUBDIRS += nxlines nxtext ostest pashello pipe poll pwm qencoder relays
SUBDIRS += rgmp romfs serloop telnetd thttpd tiff touchscreen udp uip
SUBDIRS += usbserial sendmail usbstorage usbterm watchdog wget wgetjson wlan
# Sub-directories that might need context setup. Directories may need
# context setup for a variety of reasons, but the most common is because
@ -58,7 +58,7 @@ CNTXTDIRS = pwm
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
CNTXTDIRS += adc can cdcacm composite cxxtestdhcpd discover ftpd json
CNTXTDIRS += modbus nettest qencoder telnetd watchdog wgetjson
CNTXTDIRS += modbus nettest relays qencoder telnetd watchdog wgetjson
endif
ifeq ($(CONFIG_EXAMPLES_HELLO_BUILTIN),y)

View File

@ -1208,17 +1208,23 @@ examples/qencoder
Specific configuration options for this example include:
CONFIG_EXAMPLES_QENCODER_DEVPATH - The path to the QE device. Default:
/dev/qe0
CONFIG_EXAMPLES_QENCODER_NSAMPLES - If CONFIG_NSH_BUILTIN_APPS
is defined, then the number of samples is provided on the command line
and this value is ignored. Otherwise, this number of samples is
collected and the program terminates. Default: Samples are collected
indefinitely.
CONFIG_EXAMPLES_QENCODER_DELAY - This value provides the delay (in
milliseonds) between each sample. If CONFIG_NSH_BUILTIN_APPS
is defined, then this value is the default delay if no other delay is
provided on the command line. Default: 100 milliseconds
CONFIG_EXAMPLES_QENCODER_DEVPATH - The path to the QE device. Default:
/dev/qe0
CONFIG_EXAMPLES_QENCODER_NSAMPLES - If CONFIG_NSH_BUILTIN_APPS
is defined, then the number of samples is provided on the command line
and this value is ignored. Otherwise, this number of samples is
collected and the program terminates. Default: Samples are collected
indefinitely.
CONFIG_EXAMPLES_QENCODER_DELAY - This value provides the delay (in
milliseonds) between each sample. If CONFIG_NSH_BUILTIN_APPS
is defined, then this value is the default delay if no other delay is
provided on the command line. Default: 100 milliseconds
examples/relays
^^^^^^^^^^^^^^^
Requires CONFIG_ARCH_RELAYS.
Contributed by Darcy Gong.
examples/rgmp
^^^^^^^^^^^^^

View File

@ -0,0 +1,20 @@
#
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
config EXAMPLES_RELAYS
bool "wget JSON Example"
default n
depends on NETUTILS_JSON
---help---
Enable the wget JSON example
if EXAMPLES_RELAYS
config EXAMPLES_RELAYS_NRELAYS
int "Number of Relays"
default 2
depends on ARCH_RELAYS
endif

View File

@ -0,0 +1,105 @@
############################################################################
# apps/examples/relays/Makefile
#
# Copyright (C) 2012 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
# relays Example
ASRC =
CSRC = relays_main.c
AOBJ = $(ASRCS:.S=$(OBJEXT))
COBJ = $(CSRCS:.c=$(OBJEXT))
SRC = $(ASRCS) $(CSRCS)
OBJ = $(AOBJS) $(COBJS)
ifeq ($(WINTOOL),y)
BIN = "${shell cygpath -w $(APPDIR)/libapps$(LIBEXT)}"
else
BIN = "$(APPDIR)/libapps$(LIBEXT)"
endif
ROOTDEPPATH = --dep-path .
# Buttons built-in application info
APPNAME = relays
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 2048
# Common build
VPATH =
all: .built
.PHONY: context clean depend distclean
$(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
$(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
.built: $(OBJS)
@( for obj in $(OBJS) ; do \
$(call ARCHIVE, $(BIN), $${obj}); \
done ; )
@touch .built
.context:
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
$(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
@touch $@
endif
context: .context
.depend: Makefile $(SRCS)
@$(MKDEP) $(ROOTDEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
@touch $@
depend: .depend
clean:
@rm -f *.o *~ .*.swp .built
$(call CLEAN)
distclean: clean
@rm -f Make.dep .depend
-include Make.dep

View File

@ -0,0 +1,154 @@
/****************************************************************************
* examples/relays/relays_main.c
*
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
* Author: Darcy Gong
*
* 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 <nuttx/config.h>
#include <nuttx/arch.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <debug.h>
#include <nuttx/arch.h>
#ifdef CONFIG_ARCH_RELAYS
/****************************************************************************
* Definitions
****************************************************************************/
#ifndef CONFIG_EXAMPLES_RELAYS_NRELAYS
# define CONFIG_EXAMPLES_RELAYS_NRELAYS 2
#endif
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: relays_main
****************************************************************************/
int relays_main(int argc, char *argv[])
{
char *stat = NULL;
char *no = NULL;
bool badarg = false;
bool set_stat = false;
uint32_t r_stat;
int option;
int n = -1;
int ret = -1;
int i;
while ((option = getopt(argc, argv, ":n:")) != ERROR)
{
switch (option)
{
case 'n':
no = optarg;
n = atoi(no);
break;
case ':':
badarg = true;
break;
case '?':
default:
badarg = true;
break;
}
}
if (badarg)
{
printf("usage: relays [ -n <relay id> ] <switch-status>\n");
return -1;
}
if (optind == argc - 1)
{
stat = argv[optind];
set_stat = (!strcmp(stat,"on") || !strcmp(stat,"ON")) ? true : false ;
}
up_relaysinit();
if (n >= 0)
{
printf("set RELAY ID %d to %s\n", n , set_stat ? "ON" : "OFF");
relays_setstat(n,set_stat);
}
else
{
r_stat = 0;
for (i = 0; i < CONFIG_EXAMPLES_RELAYS_NRELAYS; i++)
{
printf("set RELAY ID %d to %s\n", i , set_stat ? "ON" : "OFF");
r_stat |= (set_stat ? 1 : 0) << i;
}
relays_setstats(r_stat);
}
return 0;
}
#endif /* CONFIG_ARCH_RELAYS */

View File

@ -49,6 +49,8 @@
#include "stm32_sdio.h"
#include "stm32_internal.h"
#include <nuttx/arch.h>
/************************************************************************************
* Pre-processor Definitions
************************************************************************************/
@ -174,6 +176,10 @@
#define BUTTON_TAMPER_BIT BUTTON_KEY3_BIT
#define BUTTON_WAKEUP_BIT BUTTON_KEY4_BIT
/* Relays */
#define NUM_RELAYS 2
/* Pin selections ******************************************************************/
/* Ethernet
*
@ -426,18 +432,20 @@ EXTERN void stm32_lcdclear(uint16_t color);
* Relay control functions
*
* Description:
* Non-standard fucntions for relay control from the Shenzhou board.
* Non-standard functions for relay control from the Shenzhou board.
*
* NOTE: These must match the prototypes in include/nuttx/arch.h
*
************************************************************************************/
#ifdef CONFIG_ARCH_RELAYS
EXTERN void up_relaysinit(void);
EXTERN void relays_setstat(int relays,bool stat);
EXTERN void relays_setstat(int relays, bool stat);
EXTERN bool relays_getstat(int relays);
EXTERN void relays_setstats(uint32_t relays_stat);
EXTERN uint32_t relays_getstats(void);
EXTERN void relays_onoff(int relays,uint32_t mdelay);
EXTERN void relays_onoffs(uint32_t relays_stat,uint32_t mdelay);
EXTERN void relays_onoff(int relays, uint32_t mdelay);
EXTERN void relays_onoffs(uint32_t relays_stat, uint32_t mdelay);
EXTERN void relays_resetmode(int relays);
EXTERN void relays_powermode(int relays);
EXTERN void relays_resetmodes(uint32_t relays_stat);

View File

@ -393,9 +393,11 @@
/* Relays */
#define NUM_RELAYS 1
#define NUM_RELAYS 2
#define GPIO_RELAYS_R00 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN0)
#define GPIO_RELAYS_R01 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN1)
/****************************************************************************************************
* Public Types

View File

@ -42,11 +42,13 @@
#include <stdint.h>
#include <unistd.h>
#include <arch/board/board.h>
#include "shenzhou-internal.h"
#include <debug.h>
#include <nuttx/arch.h>
#include <arch/board/board.h>
#include "shenzhou-internal.h"
#ifdef CONFIG_ARCH_RELAYS
/****************************************************************************
@ -62,6 +64,7 @@
****************************************************************************/
static uint32_t g_relays_stat = 0;
static bool g_relays_init = false;
static const uint16_t g_relays[NUM_RELAYS] =
{
@ -173,6 +176,11 @@ void up_relaysinit(void)
{
int i;
if (g_relays_init)
{
return;
}
/* Configure the GPIO pins as inputs. NOTE that EXTI interrupts are
* configured for some pins but NOT used in this file
*/
@ -180,7 +188,10 @@ void up_relaysinit(void)
for (i = 0; i < NUM_RELAYS; i++)
{
stm32_configgpio(g_relays[i]);
stm32_gpiowrite(g_relays[i], false);
}
g_relays_init = true;
}
void relays_setstat(int relays,bool stat)

View File

@ -616,6 +616,28 @@ EXTERN uint8_t up_buttons(void);
EXTERN xcpt_t up_irqbutton(int id, xcpt_t irqhandler);
#endif
/************************************************************************************
* Relay control functions
*
* Description:
* Non-standard functions for relay control.
*
************************************************************************************/
#ifdef CONFIG_ARCH_RELAYS
EXTERN void up_relaysinit(void);
EXTERN void relays_setstat(int relays, bool stat);
EXTERN bool relays_getstat(int relays);
EXTERN void relays_setstats(uint32_t relays_stat);
EXTERN uint32_t relays_getstats(void);
EXTERN void relays_onoff(int relays, uint32_t mdelay);
EXTERN void relays_onoffs(uint32_t relays_stat, uint32_t mdelay);
EXTERN void relays_resetmode(int relays);
EXTERN void relays_powermode(int relays);
EXTERN void relays_resetmodes(uint32_t relays_stat);
EXTERN void relays_powermodes(uint32_t relays_stat);
#endif
/****************************************************************************
* Debug interfaces exported by the architecture-specific logic
****************************************************************************/