Button test can now be built as an NSH command

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4091 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2011-11-14 14:45:30 +00:00
parent 514525e3fe
commit d336bb2958
4 changed files with 83 additions and 8 deletions

View File

@ -127,6 +127,9 @@
6.11 2011-11-12 Gregory Nutt <gnutt@nuttx.org> 6.11 2011-11-12 Gregory Nutt <gnutt@nuttx.org>
(No major changes from 6.10) (No major changes from 6.10)
6.12 2011-xx-xx Gregory Nutt <gnutt@nuttx.org> 6.12 2011-xx-xx Gregory Nutt <gnutt@nuttx.org>
* apps/examples/buttons: The button test can now be executed as an NSH
built in command.

View File

@ -56,12 +56,18 @@ endif
ROOTDEPPATH = --dep-path . ROOTDEPPATH = --dep-path .
# Buttons built-in application info
APPNAME = buttons
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 2048
# Common build # Common build
VPATH = VPATH =
all: .built all: .built
.PHONY: clean depend distclean .PHONY: context clean depend distclean
$(AOBJS): %$(OBJEXT): %.S $(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@) $(call ASSEMBLE, $<, $@)
@ -75,7 +81,13 @@ $(COBJS): %$(OBJEXT): %.c
done ; ) done ; )
@touch .built @touch .built
context: .context:
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
$(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
@touch $@
endif
context: .context
.depend: Makefile $(SRCS) .depend: Makefile $(SRCS)
@$(MKDEP) $(ROOTDEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep @$(MKDEP) $(ROOTDEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep

View File

@ -48,6 +48,7 @@
#include <nuttx/arch.h> #include <nuttx/arch.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <debug.h> #include <debug.h>
@ -129,6 +130,16 @@
#define NUM_BUTTONS (MAX_BUTTON - MIN_BUTTON + 1) #define NUM_BUTTONS (MAX_BUTTON - MIN_BUTTON + 1)
#define BUTTON_INDEX(b) ((b)-MIN_BUTTON) #define BUTTON_INDEX(b) ((b)-MIN_BUTTON)
/* Is this being built as an NSH built-in application? */
#ifdef CONFIG_NSH_BUILTIN_APPS
# define MAIN_NAME buttons_main
# define MAIN_STRING "buttons_main: "
#else
# define MAIN_NAME user_start
# define MAIN_STRING "user_start: "
#endif
/**************************************************************************** /****************************************************************************
* Private Types * Private Types
****************************************************************************/ ****************************************************************************/
@ -254,8 +265,14 @@ static const struct button_info_s g_buttoninfo[NUM_BUTTONS] =
static uint8_t g_oldset; static uint8_t g_oldset;
/* Used to limit the number of button presses */
#ifdef CONFIG_NSH_BUILTIN_APPS
static volatile long g_nbuttons;
#endif
/**************************************************************************** /****************************************************************************
* Public Functions * Private Functions
****************************************************************************/ ****************************************************************************/
static void show_buttons(uint8_t oldset, uint8_t newset) static void show_buttons(uint8_t oldset, uint8_t newset)
@ -263,6 +280,17 @@ static void show_buttons(uint8_t oldset, uint8_t newset)
uint8_t chgset = oldset ^ newset; uint8_t chgset = oldset ^ newset;
int i; int i;
/* Update the count of button presses shown */
#ifdef CONFIG_NSH_BUILTIN_APPS
if ((chgset & newset) != 0)
{
g_nbuttons++;
}
#endif
/* Show each button state change */
for (i = MIN_BUTTON; i <= MAX_BUTTON; i++) for (i = MIN_BUTTON; i <= MAX_BUTTON; i++)
{ {
uint8_t mask = (1 << i); uint8_t mask = (1 << i);
@ -295,7 +323,7 @@ static void button_handler(int id, int irq)
{ {
uint8_t newset = up_buttons(); uint8_t newset = up_buttons();
lib_lowprintf("IRQ:%d Button %d:%s IRQ:%d SET:%02x:\n", lib_lowprintf("IRQ:%d Button %d:%s SET:%02x:\n",
irq, id, g_buttoninfo[BUTTON_INDEX(id)].name, newset); irq, id, g_buttoninfo[BUTTON_INDEX(id)].name, newset);
show_buttons(g_oldset, newset); show_buttons(g_oldset, newset);
g_oldset = newset; g_oldset = newset;
@ -367,15 +395,33 @@ static int button7_handler(int irq, FAR void *context)
#endif /* CONFIG_ARCH_IRQBUTTONS */ #endif /* CONFIG_ARCH_IRQBUTTONS */
/**************************************************************************** /****************************************************************************
* user_start * Public Functions
****************************************************************************/ ****************************************************************************/
int user_start(int argc, char *argv[]) /****************************************************************************
* user_start/buttons_main
****************************************************************************/
int MAIN_NAME(int argc, char *argv[])
{ {
uint8_t newset; uint8_t newset;
irqstate_t flags; irqstate_t flags;
int i; int i;
/* If this example is configured as an NX add-on, then limit the number of
* samples that we collect before returning. Otherwise, we never return
*/
#ifdef CONFIG_NSH_BUILTIN_APPS
long maxbuttons = 1;
g_nbuttons = 0;
if (argc > 1)
{
maxbuttons = strtol(argv[1], NULL, 10);
}
lib_lowprintf("maxbuttons: %d\n", maxbuttons);
#endif
/* Register to recieve button interrupts */ /* Register to recieve button interrupts */
#ifdef CONFIG_ARCH_IRQBUTTONS #ifdef CONFIG_ARCH_IRQBUTTONS
@ -408,7 +454,11 @@ int user_start(int argc, char *argv[])
/* Poll button state */ /* Poll button state */
g_oldset = up_buttons(); g_oldset = up_buttons();
#ifdef CONFIG_NSH_BUILTIN_APPS
while (g_nbuttons < maxbuttons)
#else
for (;;) for (;;)
#endif
{ {
/* Get the set of pressed and release buttons. */ /* Get the set of pressed and release buttons. */
@ -440,6 +490,16 @@ int user_start(int argc, char *argv[])
usleep(150000); /* 150 Milliseconds */ usleep(150000); /* 150 Milliseconds */
} }
/* Un-register button handlers */
#if defined(CONFIG_ARCH_IRQBUTTONS) && defined(CONFIG_NSH_BUILTIN_APPS)
for (i = CONFIG_EXAMPLE_IRQBUTTONS_MIN; i <= CONFIG_EXAMPLE_IRQBUTTONS_MAX; i++)
{
(void)up_irqbutton(i, NULL);
}
#endif
return 0; return 0;
} }

View File

@ -56,7 +56,7 @@ endif
ROOTDEPPATH = --dep-path . ROOTDEPPATH = --dep-path .
# NXHELLO built-in application info # Touchscreen built-in application info
APPNAME = tc APPNAME = tc
PRIORITY = SCHED_PRIORITY_DEFAULT PRIORITY = SCHED_PRIORITY_DEFAULT