diff options
Diffstat (limited to 'package/gpioctl')
-rw-r--r-- | package/gpioctl/Makefile | 43 | ||||
-rw-r--r-- | package/gpioctl/src/Makefile | 24 | ||||
-rw-r--r-- | package/gpioctl/src/main.c | 76 |
3 files changed, 143 insertions, 0 deletions
diff --git a/package/gpioctl/Makefile b/package/gpioctl/Makefile new file mode 100644 index 000000000..50c4d3c65 --- /dev/null +++ b/package/gpioctl/Makefile @@ -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. +# + +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 + DEPENDS:=@GPIO_SUPPORT +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)) diff --git a/package/gpioctl/src/Makefile b/package/gpioctl/src/Makefile new file mode 100644 index 000000000..467697410 --- /dev/null +++ b/package/gpioctl/src/Makefile @@ -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 + diff --git a/package/gpioctl/src/main.c b/package/gpioctl/src/main.c new file mode 100644 index 000000000..8ad27749b --- /dev/null +++ b/package/gpioctl/src/main.c @@ -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", gpio_pin, (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; +} |