add usbreset - a small simple utility to send port rests to selected usb devices (#10394)
SVN-Revision: 29611
This commit is contained in:
parent
9fa33ceee2
commit
250ef0cb72
2 changed files with 120 additions and 0 deletions
44
package/usbreset/Makefile
Normal file
44
package/usbreset/Makefile
Normal file
|
@ -0,0 +1,44 @@
|
|||
#
|
||||
# Copyright (C) 2011 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=usbreset
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/usbreset
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=Utility to send a USB port reset to a USB device
|
||||
MAINTAINER:=Jo-Philipp Wich <xm@subsignal.org>
|
||||
endef
|
||||
|
||||
define Package/usbreset/description
|
||||
This package contains the small usbreset utility which
|
||||
can be used to send a USB port reset to a USB device -
|
||||
useful for debugging or to force re-detection of particular
|
||||
devices.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
$(INSTALL_DIR) $(PKG_BUILD_DIR)
|
||||
$(INSTALL_DATA) ./src/usbreset.c $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) -Wall \
|
||||
-o $(PKG_BUILD_DIR)/usbreset $(PKG_BUILD_DIR)/usbreset.c
|
||||
endef
|
||||
|
||||
define Package/usbreset/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/usbreset $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,usbreset))
|
76
package/usbreset/src/usbreset.c
Normal file
76
package/usbreset/src/usbreset.c
Normal file
|
@ -0,0 +1,76 @@
|
|||
/* usbreset -- send a USB port reset to a USB device */
|
||||
|
||||
/*
|
||||
|
||||
http://marc.info/?l=linux-usb-users&m=116827193506484&w=2
|
||||
|
||||
and needs mounted usbfs filesystem
|
||||
|
||||
sudo mount -t usbfs none /proc/bus/usb
|
||||
|
||||
There is a way to suspend a USB device. In order to use it,
|
||||
you must have a kernel with CONFIG_PM_SYSFS_DEPRECATED turned on. To
|
||||
suspend a device, do (as root):
|
||||
|
||||
echo -n 2 >/sys/bus/usb/devices/.../power/state
|
||||
|
||||
where the "..." is the ID for your device. To unsuspend, do the same
|
||||
thing but with a "0" instead of the "2" above.
|
||||
|
||||
Note that this mechanism is slated to be removed from the kernel within
|
||||
the next year. Hopefully some other mechanism will take its place.
|
||||
|
||||
> To reset a
|
||||
> device?
|
||||
|
||||
Here's a program to do it. You invoke it as either
|
||||
|
||||
usbreset /proc/bus/usb/BBB/DDD
|
||||
or
|
||||
usbreset /dev/usbB.D
|
||||
|
||||
depending on how your system is set up, where BBB and DDD are the bus and
|
||||
device address numbers.
|
||||
|
||||
Alan Stern
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <linux/usbdevice_fs.h>
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *filename;
|
||||
int fd;
|
||||
int rc;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: usbreset device-filename\n");
|
||||
return 1;
|
||||
}
|
||||
filename = argv[1];
|
||||
|
||||
fd = open(filename, O_WRONLY);
|
||||
if (fd < 0) {
|
||||
perror("Error opening output file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Resetting USB device %s\n", filename);
|
||||
rc = ioctl(fd, USBDEVFS_RESET, 0);
|
||||
if (rc < 0) {
|
||||
perror("Error in ioctl");
|
||||
return 1;
|
||||
}
|
||||
printf("Reset successful\n");
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue