standard keypad inteface and apps/examples/keypadtest from Denis Carikli

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5403 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2012-12-01 15:43:51 +00:00
parent f63b1d9296
commit 7f7356cdc9
14 changed files with 358 additions and 5 deletions
+2
View File
@@ -428,3 +428,5 @@
From Freddie Chopin. From Freddie Chopin.
* Rename CONFIG_PCODE and CONFIG_FICL as CONFIG_INTERPRETERS_PCODE and * Rename CONFIG_PCODE and CONFIG_FICL as CONFIG_INTERPRETERS_PCODE and
CONFIG_INTERPRETERS_FICL for consistency with other configuration naming. CONFIG_INTERPRETERS_FICL for consistency with other configuration naming.
* apps/examples/keypadtest: A keypad test example contributed by Denis
Carikli
+1
View File
@@ -17,6 +17,7 @@ source "$APPSDIR/examples/hello/Kconfig"
source "$APPSDIR/examples/helloxx/Kconfig" source "$APPSDIR/examples/helloxx/Kconfig"
source "$APPSDIR/examples/json/Kconfig" source "$APPSDIR/examples/json/Kconfig"
source "$APPSDIR/examples/hidkbd/Kconfig" source "$APPSDIR/examples/hidkbd/Kconfig"
source "$APPSDIR/examples/keypadtest/Kconfig"
source "$APPSDIR/examples/igmp/Kconfig" source "$APPSDIR/examples/igmp/Kconfig"
source "$APPSDIR/examples/lcdrw/Kconfig" source "$APPSDIR/examples/lcdrw/Kconfig"
source "$APPSDIR/examples/mm/Kconfig" source "$APPSDIR/examples/mm/Kconfig"
+4
View File
@@ -98,6 +98,10 @@ ifeq ($(CONFIG_EXAMPLES_JSON),y)
CONFIGURED_APPS += examples/json CONFIGURED_APPS += examples/json
endif endif
ifeq ($(CONFIG_EXAMPLES_KEYPADTEST),y)
CONFIGURED_APPS += examples/keypadtest
endif
ifeq ($(CONFIG_EXAMPLES_LCDRW),y) ifeq ($(CONFIG_EXAMPLES_LCDRW),y)
CONFIGURED_APPS += examples/lcdrw CONFIGURED_APPS += examples/lcdrw
endif endif
+2 -2
View File
@@ -38,7 +38,7 @@
# Sub-directories # Sub-directories
SUBDIRS = adc buttons can cdcacm composite cxxtest dhcpd discover elf ftpc SUBDIRS = adc buttons can cdcacm composite cxxtest dhcpd discover elf ftpc
SUBDIRS += ftpd hello helloxx hidkbd igmp json lcdrw mm modbus mount SUBDIRS += ftpd hello helloxx hidkbd igmp json keypadtest lcdrw mm modbus mount
SUBDIRS += nettest nsh null nx nxconsole nxffs nxflat nxhello nximage SUBDIRS += nettest nsh null nx nxconsole nxffs nxflat nxhello nximage
SUBDIRS += nxlines nxtext ostest pashello pipe poll pwm qencoder relays SUBDIRS += nxlines nxtext ostest pashello pipe poll pwm qencoder relays
SUBDIRS += rgmp romfs serloop telnetd thttpd tiff touchscreen udp uip SUBDIRS += rgmp romfs serloop telnetd thttpd tiff touchscreen udp uip
@@ -57,7 +57,7 @@ SUBDIRS += usbserial sendmail usbstorage usbterm watchdog wget wgetjson wlan
CNTXTDIRS = pwm CNTXTDIRS = pwm
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y) ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
CNTXTDIRS += adc can cdcacm composite cxxtestdhcpd discover ftpd json CNTXTDIRS += adc can cdcacm composite cxxtest dhcpd discover ftpd json keypadtest
CNTXTDIRS += modbus nettest nxlines relays qencoder telnetd watchdog wgetjson CNTXTDIRS += modbus nettest nxlines relays qencoder telnetd watchdog wgetjson
endif endif
+13
View File
@@ -580,6 +580,19 @@ examples/json
on 2011-10-10 so I presume that the code is stable and there is no risk on 2011-10-10 so I presume that the code is stable and there is no risk
of maintaining duplicate logic in the NuttX repository. of maintaining duplicate logic in the NuttX repository.
examples/keypadtest
^^^^^^^^^^^^^^^^^^^
This is a generic keypad test example. It is similar to the USB hidkbd
example, but makes no assumptions about the underlying keyboard interface.
It uses the interfaces of include/nuttx/input/keypad.h.
CONFIG_EXAMPLES_KEYPADTEST - Selects the keypadtest example (only need
if the mconf/Kconfig tool is used.
CONFIG_EXAMPLES_KEYPAD_DEVNAME - The name of the keypad device that will
be opened in order to perform the keypad test. Default: "/dev/keypad"
examples/lcdrw examples/lcdrw
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
+21
View File
@@ -0,0 +1,21 @@
#
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
config EXAMPLES_KEYPADTEST
bool "Keypad test example program"
default n
---help---
Enable the Keypad test example programe
if EXAMPLES_KEYPADTEST
config EXAMPLES_KEYPAD_DEVNAME
string "Keypad Device Name"
default "/dev/keypad"
---help---
The name of the keypad device that will be opened in order to perform
the keypad test. Default: "/dev/keypad"
endif
+108
View File
@@ -0,0 +1,108 @@
############################################################################
# apps/examples/keypadtest/Makefile
#
# Copyright (C) 2011-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
# Keypad Test Example
ASRCS =
CSRCS = keypadtest_main.c
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS)
OBJS = $(AOBJS) $(COBJS)
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
BIN = ..\..\libapps$(LIBEXT)
else
ifeq ($(WINTOOL),y)
BIN = ..\\..\\libapps$(LIBEXT)
else
BIN = ../../libapps$(LIBEXT)
endif
endif
# helloxx built-in application info
APPNAME = keypadtest
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 2048
ROOTDEPPATH = --dep-path .
# Common build
VPATH =
all: .built
.PHONY: clean depend distclean
$(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
$(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
.built: $(OBJS)
$(call ARCHIVE, $(BIN), $(OBJS))
@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:
$(call DELFILE, .built)
$(call CLEAN)
distclean: clean
$(call DELFILE, Make.dep)
$(call DELFILE, .depend)
-include Make.dep
+138
View File
@@ -0,0 +1,138 @@
/****************************************************************************
* examples/keypadtest/keypadtest_main.c
*
* Copyright (C) 2011 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 <nuttx/config.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sched.h>
#include <errno.h>
#include <nuttx/input/keypad.h>
/****************************************************************************
* Definitions
****************************************************************************/
/* Configuration ************************************************************/
/* Sanity checking */
/* Provide some default values for other configuration settings */
#ifndef CONFIG_EXAMPLES_KEYPAD_DEVNAME
# define CONFIG_EXAMPLES_KEYPAD_DEVNAME "/dev/keypad"
#endif
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: keypadtest_main
****************************************************************************/
int keypadtest_main(int argc, char *argv[])
{
char buffer[256];
ssize_t nbytes;
int fd;
int ret;
/* First, register the keyboard device(s) */
printf("keypadtest_main: Register keyboard device\n");
ret = keypad_kbdinit();
if (ret != OK)
{
printf("keypadtest_main: Failed to register the KBD class\n");
fflush(stdout);
return 1;
}
/* Open the configured keyboard device. */
printf("keypadtest_main: Opening device %s\n", CONFIG_EXAMPLES_KEYPAD_DEVNAME);
fd = open(CONFIG_EXAMPLES_KEYPAD_DEVNAME, O_RDONLY);
if (fd < 0)
{
printf("keypadtest_main: open() failed: %d\n", errno);
fflush(stdout);
return 1;
}
printf("keypadtest_main: Device %s opened\n", CONFIG_EXAMPLES_KEYPAD_DEVNAME);
fflush(stdout);
/* Loop until there is a read failure */
do
{
/* Read a buffer of data */
nbytes = read(fd, buffer, 256);
if (nbytes > 0)
{
/* On success, echo the buffer to stdout */
(void)write(1, buffer, nbytes);
}
}
while (nbytes >= 0);
printf("keypadtest_main: Closing device %s: %d\n", CONFIG_EXAMPLES_KEYPAD_DEVNAME, (int)nbytes);
fflush(stdout);
close(fd);
return 0;
}
+3
View File
@@ -3719,3 +3719,6 @@
* configs/z16f2800100zcog/ostest - Now supports a native Windows build * configs/z16f2800100zcog/ostest - Now supports a native Windows build
(other ZNEO configs may also support the native build, but this has not (other ZNEO configs may also support the native build, but this has not
been verfiied). been verfiied).
* include/nuttx/input/keypad.h, arch/arm/src/calypso/calypso_keypad.c, and
configs/compal_e99/nsh_highram: First cut at a standard keypad interface
definition. Contributed by Denis Carikli.
@@ -369,3 +369,11 @@ void up_keypad(void)
(void)register_driver("/dev/keypad", &keypad_ops, 0444, NULL); (void)register_driver("/dev/keypad", &keypad_ops, 0444, NULL);
} }
int keypad_kbdinit(void)
{
calypso_armio();
up_keypad();
return OK;
}
@@ -40,9 +40,8 @@ CONFIGURED_APPS += nshlib
# Path to example in apps/examples # Path to example in apps/examples
#CONFIGURED_APPS += examples/hello #fails not finding hello_main despite of good config
CONFIGURED_APPS += system/poweroff CONFIGURED_APPS += system/poweroff
CONFIGURED_APPS += examples/ostest CONFIGURED_APPS += examples/keypadtest
CONFIGURED_APPS += examples/nxtext CONFIGURED_APPS += examples/nxtext
CONFIGURED_APPS += examples/nxhello CONFIGURED_APPS += examples/nxhello
CONFIGURED_APPS += examples/nxlines CONFIGURED_APPS += examples/nxlines
@@ -245,6 +245,7 @@ CONFIG_EXAMPLES_NETTEST_CLIENTIP=0x0a000001
# Settings for examples/nsh # Settings for examples/nsh
CONFIG_NSH_CONSOLE=y CONFIG_NSH_CONSOLE=y
CONFIG_NSH_TELNET=n CONFIG_NSH_TELNET=n
CONFIG_NSH_DISABLE_HEXDUMP=n
CONFIG_NSH_IOBUFFER_SIZE=512 CONFIG_NSH_IOBUFFER_SIZE=512
CONFIG_NSH_CMD_SIZE=40 CONFIG_NSH_CMD_SIZE=40
CONFIG_NSH_STACKSIZE=4096 CONFIG_NSH_STACKSIZE=4096
+2 -1
View File
@@ -197,7 +197,8 @@ int nxgl_splitline(FAR struct nxgl_vector_s *vector,
abs(line.pt2.x - line.pt1.x) < (line.pt2.y - line.pt1.y)) abs(line.pt2.x - line.pt1.x) < (line.pt2.y - line.pt1.y))
{ {
/* A close to vertical line of width 1 is basically /* A close to vertical line of width 1 is basically
* a single parallelogram of width 1 */ * a single parallelogram of width 1.
*/
traps[1].top.x1 = itob16(line.pt1.x); traps[1].top.x1 = itob16(line.pt1.x);
traps[1].top.x2 = traps[1].top.x1; traps[1].top.x2 = traps[1].top.x1;
+54
View File
@@ -0,0 +1,54 @@
/************************************************************************************
* include/nuttx/input/keypad.h
*
* Copyright (C) 2012 Denis Carikli.
* Author: Denis Carikli <GNUtoo@no-log.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 __INCLUDE_NUTTX_INPUT_KEYPAD_H
#define __INCLUDE_NUTTX_INPUT_KEYPAD_H
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
int keypad_kbdinit(void);
#ifdef __cplusplus
}
#endif
#endif /* __INCLUDE_NUTTX_INPUT_KEYPAD_H */