add userspace tool for gpio_dev
SVN-Revision: 10267
This commit is contained in:
		
							
								
								
									
										43
									
								
								package/gpioctl/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								package/gpioctl/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2008 OpenWrt.org
 | 
			
		||||
#
 | 
			
		||||
# This is free software, licensed under the GNU General Public License v2.
 | 
			
		||||
# See /LICENSE for more information.
 | 
			
		||||
#
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/rules.mk
 | 
			
		||||
include $(INCLUDE_DIR)/kernel.mk
 | 
			
		||||
 | 
			
		||||
PKG_NAME:=gpioctl
 | 
			
		||||
PKG_RELEASE:=1
 | 
			
		||||
PKG_VERSION:=1.0
 | 
			
		||||
 | 
			
		||||
include $(INCLUDE_DIR)/package.mk
 | 
			
		||||
 | 
			
		||||
define Package/gpioctl
 | 
			
		||||
  SECTION:=utils
 | 
			
		||||
  CATEGORY:=Utilities
 | 
			
		||||
  TITLE:=Tool for controlling gpio pins
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Package/gpioctl/description
 | 
			
		||||
	Tool for controlling gpio pins
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Build/Prepare
 | 
			
		||||
	mkdir -p $(PKG_BUILD_DIR)
 | 
			
		||||
	$(CP) ./src/* $(PKG_BUILD_DIR)/
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Build/Compile
 | 
			
		||||
	$(MAKE) -C $(PKG_BUILD_DIR) \
 | 
			
		||||
		$(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include" 
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Package/gpioctl/install
 | 
			
		||||
	$(INSTALL_DIR) $(1)/usr/bin
 | 
			
		||||
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/gpioctl $(1)/usr/bin/
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(eval $(call BuildPackage,gpioctl))
 | 
			
		||||
							
								
								
									
										24
									
								
								package/gpioctl/src/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								package/gpioctl/src/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
PROGS     = gpioctl
 | 
			
		||||
 | 
			
		||||
INSTDIR   = $(prefix)/usr/bin
 | 
			
		||||
INSTMODE  = 0755
 | 
			
		||||
INSTOWNER = root
 | 
			
		||||
INSTGROUP = root
 | 
			
		||||
 | 
			
		||||
OBJS = main.o
 | 
			
		||||
 | 
			
		||||
all: $(PROGS)
 | 
			
		||||
$(PROGS): $(OBJS)
 | 
			
		||||
	$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
 | 
			
		||||
	$(STRIP) $@
 | 
			
		||||
 | 
			
		||||
%.o: %.c
 | 
			
		||||
	$(CC) -c $(CFLAGS) $^ -o $@
 | 
			
		||||
 | 
			
		||||
install: $(PROGS)
 | 
			
		||||
	$(INSTALL) -d $(INSTDIR)
 | 
			
		||||
	$(INSTALL) -m $(INSTMODE) -o $(INSTOWNER) -g $(INSTGROUP) $(PROGS) $(INSTDIR)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(PROGS) *.o core
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										76
									
								
								package/gpioctl/src/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								package/gpioctl/src/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/*
 | 
			
		||||
* This program is free software; you can redistribute it and/or modify
 | 
			
		||||
* it under the terms of the GNU General Public License as published by
 | 
			
		||||
* the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
* (at your option) any later version.
 | 
			
		||||
*
 | 
			
		||||
* This program is distributed in the hope that it will be useful,
 | 
			
		||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
			
		||||
* GNU General Public License for more details.
 | 
			
		||||
*
 | 
			
		||||
* You should have received a copy of the GNU General Public License
 | 
			
		||||
* along with this program; if not, write to the Free Software
 | 
			
		||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA
 | 
			
		||||
*
 | 
			
		||||
* Feedback, Bugs...  blogic@openwrt.org 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <linux/gpio_dev.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
print_usage()
 | 
			
		||||
{
 | 
			
		||||
	printf("gpioctl dirin|dirout|get|set|clear gpio\n");
 | 
			
		||||
	exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int gpio_pin;
 | 
			
		||||
	int fd;
 | 
			
		||||
	int result = 0;
 | 
			
		||||
 | 
			
		||||
	if (argc != 3)
 | 
			
		||||
	{
 | 
			
		||||
		print_usage();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((fd = open("/dev/gpio", O_RDWR)) < 0)
 | 
			
		||||
	{
 | 
			
		||||
        printf("Error whilst opening /dev/gpio\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	gpio_pin = atoi(argv[2]);
 | 
			
		||||
 | 
			
		||||
	printf("using gpio pin %d\n", gpio_pin);
 | 
			
		||||
 | 
			
		||||
	if (!strcmp(argv[1], "dirin"))
 | 
			
		||||
	{
 | 
			
		||||
		ioctl(fd, GPIO_DIR_IN, gpio_pin);
 | 
			
		||||
	} else if (!strcmp(argv[1], "dirout"))
 | 
			
		||||
	{
 | 
			
		||||
		ioctl(fd, GPIO_DIR_OUT, gpio_pin);
 | 
			
		||||
	} else if (!strcmp(argv[1], "get"))
 | 
			
		||||
	{
 | 
			
		||||
		result = ioctl(fd, GPIO_GET, gpio_pin);
 | 
			
		||||
		printf("Pin %d is %s\n", (result ? "HIGH" : "LOW"));
 | 
			
		||||
	} else if (!strcmp(argv[1], "set"))
 | 
			
		||||
	{
 | 
			
		||||
		ioctl(fd, GPIO_SET, gpio_pin);
 | 
			
		||||
	} else if (!strcmp(argv[1], "clear"))
 | 
			
		||||
	{
 | 
			
		||||
		ioctl(fd, GPIO_CLEAR, gpio_pin);
 | 
			
		||||
	} else print_usage();
 | 
			
		||||
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
@@ -44,7 +44,7 @@ gpio_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned
 | 
			
		||||
{
 | 
			
		||||
	int retval = 0;
 | 
			
		||||
 | 
			
		||||
	if ((arg & gpio_access_mask) != arg)
 | 
			
		||||
	if (((1 << arg) & gpio_access_mask) != (1 << arg))
 | 
			
		||||
	{
 | 
			
		||||
		retval = -EINVAL;
 | 
			
		||||
		goto out;
 | 
			
		||||
@@ -57,7 +57,7 @@ gpio_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case GPIO_SET:
 | 
			
		||||
		gpio_set_value(arg, 0);
 | 
			
		||||
		gpio_set_value(arg, 1);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case GPIO_CLEAR:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user