From 17b2beba299253452ac18f4b3be47e72e000b11b Mon Sep 17 00:00:00 2001 From: Shanil Date: Sat, 27 Oct 2018 13:15:02 +1100 Subject: [PATCH 1/6] OMS-1 Backend: Usb Reset #time 10h Created a publisher and subscriber. Messages are sent to the topic containing the devices attached --- rover/src/owr_usb_reset/usb.py | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 rover/src/owr_usb_reset/usb.py diff --git a/rover/src/owr_usb_reset/usb.py b/rover/src/owr_usb_reset/usb.py new file mode 100644 index 00000000..e031b9cb --- /dev/null +++ b/rover/src/owr_usb_reset/usb.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# license removed for brevity +import rospy +import subprocess +from std_msgs.msg import String,Int16 + +"""in visudo, need to add %ros ALL = NOPASSWD: /home/ros/owr_software/rover/src/owr_usb_reset/usb_reset +after %sudo ALL=(ALL:ALL) ALL. This allows the usb reset program to run without needing a password for +sudo. Eneter password manually while running causes a problem +""" +global devices + +def idmap(device): + if (device[23:27] == "1d6b"): + return "linux" + else: + return device[0:32] + +def callback(data): + print(devices[data.data]) + filepath = "/dev/bus/usb" + devices[data.data][0:32] + rospy.info("Usb reset") + command = "sudo ./usb_reset " + filepath + subprocess.call(command,shell=True) + rospy.loginfo("%s reset", data.data) + +def listener(): + rospy.init_node('usb_reset', anonymous=True) + rospy.Subscriber("rover/usb/reset", Int16, callback) + +def talker(): + pub = rospy.Publisher('/rover/usb', String, queue_size=1) + rospy.init_node('usb_reset', anonymous=True) + rate = rospy.Rate(1) # 1hz + + while not rospy.is_shutdown(): + subprocess.call("cd /dev/bus/usb",shell=True) + devices = subprocess.check_output(["lsusb"]) + devices = devices.split("\n") + device_string = idmap(devices[0]) + for i in range(1,len(devices)): + device_string = device_string + "#/#/" + idmap(devices[i]) + rospy.loginfo(devices) + pub.publish(device_string) + rate.sleep() + +if __name__ == '__main__': + try: + listener() + talker() + except rospy.ROSInterruptException: + pass + + + + + From 55c631a878beea57a992d1f54c7625186947c04c Mon Sep 17 00:00:00 2001 From: Shanil Date: Fri, 23 Nov 2018 17:44:26 +1100 Subject: [PATCH 2/6] OWRS-OMS-1 #time In progress code. Performs usb reset and publishes connected devices --- rover/src/owr_usb_reset/usb.py | 8 +++---- rover/src/owr_usb_reset/usb_reset | Bin 0 -> 8912 bytes rover/src/owr_usb_reset/usb_reset.c | 31 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100755 rover/src/owr_usb_reset/usb_reset create mode 100644 rover/src/owr_usb_reset/usb_reset.c diff --git a/rover/src/owr_usb_reset/usb.py b/rover/src/owr_usb_reset/usb.py index e031b9cb..dd455af6 100644 --- a/rover/src/owr_usb_reset/usb.py +++ b/rover/src/owr_usb_reset/usb.py @@ -17,16 +17,16 @@ def idmap(device): return device[0:32] def callback(data): - print(devices[data.data]) - filepath = "/dev/bus/usb" + devices[data.data][0:32] + print(data.data) + """filepath = "/dev/bus/usb" + devices[data.data][0:32] rospy.info("Usb reset") command = "sudo ./usb_reset " + filepath subprocess.call(command,shell=True) - rospy.loginfo("%s reset", data.data) + rospy.loginfo("%s reset", data.data) """ def listener(): rospy.init_node('usb_reset', anonymous=True) - rospy.Subscriber("rover/usb/reset", Int16, callback) + rospy.Subscriber("rover/usb/reset", String, callback) def talker(): pub = rospy.Publisher('/rover/usb', String, queue_size=1) diff --git a/rover/src/owr_usb_reset/usb_reset b/rover/src/owr_usb_reset/usb_reset new file mode 100755 index 0000000000000000000000000000000000000000..a5bdc87e17df778120efc01d82e8f1d0caf31894 GIT binary patch literal 8912 zcmeHMU2GKB6~4RcKQOEpViE&UnNpA(Di3RFT$3na*7n+CWCQUJaod<-?H$|Ou6M27 zS;t0DKnA2OA+_47LX|3^CT-I;tw>c>Rv!2%2rFtIKq_se=D}@4wN9WVf+9aOY|puK z&+g3Zu7vuKC(df;-1FV@o%=g?=H59L?Cx;8T#UrcUSeo1mMa`GuZ;ONa#LU}Yz0%; zCiX0=0HhrL3eQ1prbsV~(4?z`p9gdq{9D{6(Bf8jg7mW{3?-OCHAIc&f$uDVcLFZK-zk0oip9r%D27*; zz&Dq`8T9uEc5gG&ry~ZN)Dww#f=#B3B#XpHj3`U$hMtOq*+?{=)LDE|k11r$9LpwAEjZnyn77}8i=~58 z)Y&^#>Y4IeD-#nmU#_`4@PS?wKFy! zhYlG~8^%GYv&&vJeS2!-Jchzx{9qHmC3${`2*^SfAIiU9(f>u zn!cxA$?R5L*VUVkjCHwa)fBB}6C1i}mVf-kn=2&7Qfmf)n2ABfhOU=i1ju!tmvl*j z1z4Tk%~Itbe;0VUV4ol%dt+$nFmNypBPgYh-ci%3#YA>YxuY zFN1vv2PX4VNU3Lni|QGrN=*lsA-#MNbJX+#FCe3XM>_am_UMCbs`k?JNFPQzj$>vV zQfGn>-h(u|SPSbNv9g~+iOa|sM1~(3IMSJBlaXG?+yR%l_p$M2e+FI&90;Vdfq_7O z_t~wn3JE&%Yy;}PuJpsM^sVmauw_;1l}|mHSAeXZx@$;{e-)C5)m!(5C+L;VmbH58UoTg^{?iqzw`I1n$Ezf~Edj4T z;H_`Duejej#8b3=ge8;92BGUjKCZJUl>eVc**Mzg+zP7Pp6_jsY12F3 zyxX)_f)C2DsaUnpbwaNbniM{UxxniR3az=9xs`v;;ENRs?ki9R%M`8&SAyPWAn|YbfvA$wt#P>UJS>Vp~xShw(*OS(fK8_dm=V1}&f+PNE?q4`A zKL)&5yGpee-;G^x(s6!;0;#;<)~i@QphvOzzvtAa3g*KHJWk=b-xmJ#oZ%*1mU*IZ zepW*RTt()?=K)^}{g1n26nY*s0xogHe)%QG3+GP{k7M^mO9R{oPetdv`Xcu)yzfR! z#F;69zg`0W1>jh&bDqxwE)`ajEdaj8y`CL%%>O?k4v}abC==X&0FM2J#|bEW4+Q$p z@b|F|Y|;_uUExpX%iE9yavyN?clJ+K_~SVR3g3f)E`tFocCPkx349yi5(aR{OC|jG z1CIURtk0_@;@su+EL@+bO2lU)2_tEwMn~llIF#Gd)~j`Q_4R8S3+oAeERuvBwq{Id zaF`dFDv0Kti`7F0Den%dsWw9f8*t$}WBUq=TV6=?l|*6tvdz|Ss6k}2K;|xhlSvVVAI9RbiM=TERM(Dad#1ErF(ulfp=1)~ z10Df8yfo+$8XW8@nnkvb5@*DADwC5l6Gmtlw2?6NIHe*nn23{1j>QdK4zzYP7@;v? zjm1*(a4G^{0N~JBMr%Bj9A|QPCI<0LZ6wT`DLs*l#A7x?gS>e2&9Xkb8d6`zd|rqJ0j9MqjIZ0gOuc!?MAp->nGERlyoY>#&*2 zSR*8?e0twCM8GZND72H`4){aZi%|LJ+zR(RCjhE{IY;yRHDR*7kifkc@#ozNSa7Z^ zfP36Bzo}u{o%<&Iu7Gzf78m_ zg#Q~dto6_B8$|(wL=>8Mq?a9hdhZ?-e5xmfAs*R}Ab}XQpWZ*m1<~n`b+w8I0L1)O z5YoiQ@4QwaKIt`(No8C8JYwO%Z!lJIn7nMdcdUNrMg9LG2JUl^xgGx09$d>%@ct}T O{ +#include +#include +#include +#include +#include +#include +#include +#include + +void main(int argc, char **argv) +{ + const char *filename; + int fd; + + if (argc < 2) { + printf("Give USB device name as parameter\n"); + exit(1); + } + filename = argv[1]; + fd = open(filename, O_WRONLY); + if (fd == -1) { + perror("USB device open failed"); + exit(2); + } + if (ioctl(fd, USBDEVFS_RESET, 0) == -1) { + perror("USBDEVFS_RESET device ioctl failed"); + exit(3); + } + close(fd); +} From 3cf3afcdb9a7dcf7dda1f509305afe58d90a4645 Mon Sep 17 00:00:00 2001 From: Shanil Date: Sat, 30 Mar 2019 14:51:23 +1100 Subject: [PATCH 3/6] fixed a couple small issues #time 2h --- rover/src/owr_usb_reset/usb.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/rover/src/owr_usb_reset/usb.py b/rover/src/owr_usb_reset/usb.py index dd455af6..cd6556fb 100644 --- a/rover/src/owr_usb_reset/usb.py +++ b/rover/src/owr_usb_reset/usb.py @@ -8,7 +8,7 @@ after %sudo ALL=(ALL:ALL) ALL. This allows the usb reset program to run without needing a password for sudo. Eneter password manually while running causes a problem """ -global devices +#global devices def idmap(device): if (device[23:27] == "1d6b"): @@ -17,16 +17,24 @@ def idmap(device): return device[0:32] def callback(data): - print(data.data) - """filepath = "/dev/bus/usb" + devices[data.data][0:32] - rospy.info("Usb reset") - command = "sudo ./usb_reset " + filepath - subprocess.call(command,shell=True) - rospy.loginfo("%s reset", data.data) """ + subprocess.call("cd /dev/bus/usb",shell=True) + devices = subprocess.check_output(["lsusb"]) + devices = devices.split("\n") + if(data.data < len(devices) - 1): + devices[data.data].replace(' ', '') + print(devices[data.data]) + filepath = "/dev/bus/usb/" + devices[data.data][4:7] + filepath = filepath + "/" + devices[data.data][15:18] + print(filepath) + command = "sudo ./usb_reset " + filepath + subprocess.call(command,shell=True) + rospy.loginfo("%s reset", data.data) + else: + print("Out of range") def listener(): rospy.init_node('usb_reset', anonymous=True) - rospy.Subscriber("rover/usb/reset", String, callback) + rospy.Subscriber("rover/usb/reset", Int16, callback) def talker(): pub = rospy.Publisher('/rover/usb', String, queue_size=1) @@ -40,7 +48,7 @@ def talker(): device_string = idmap(devices[0]) for i in range(1,len(devices)): device_string = device_string + "#/#/" + idmap(devices[i]) - rospy.loginfo(devices) + rospy.loginfo(device_string) pub.publish(device_string) rate.sleep() From a60924b9266f0d2796d5cc50ef171100b15fecf0 Mon Sep 17 00:00:00 2001 From: Shanil Date: Sat, 13 Apr 2019 12:22:54 +1000 Subject: [PATCH 4/6] added to package --- rover/src/owr_messages/msg/devices.msg | 1 + rover/src/owr_usb_reset/CMakeLists.txt | 190 +++++++++++++++++++ rover/src/owr_usb_reset/package.xml | 56 ++++++ rover/src/owr_usb_reset/scripts/usb_reset | Bin 0 -> 8912 bytes rover/src/owr_usb_reset/scripts/usb_reset.py | 66 +++++++ 5 files changed, 313 insertions(+) create mode 100644 rover/src/owr_messages/msg/devices.msg create mode 100644 rover/src/owr_usb_reset/CMakeLists.txt create mode 100644 rover/src/owr_usb_reset/package.xml create mode 100755 rover/src/owr_usb_reset/scripts/usb_reset create mode 100755 rover/src/owr_usb_reset/scripts/usb_reset.py diff --git a/rover/src/owr_messages/msg/devices.msg b/rover/src/owr_messages/msg/devices.msg new file mode 100644 index 00000000..c4195ecb --- /dev/null +++ b/rover/src/owr_messages/msg/devices.msg @@ -0,0 +1 @@ +string[] devices \ No newline at end of file diff --git a/rover/src/owr_usb_reset/CMakeLists.txt b/rover/src/owr_usb_reset/CMakeLists.txt new file mode 100644 index 00000000..652690e9 --- /dev/null +++ b/rover/src/owr_usb_reset/CMakeLists.txt @@ -0,0 +1,190 @@ +cmake_minimum_required(VERSION 2.8.3) +project(owr_usb_reset) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + roscpp + rospy + std_msgs + owr_messages +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +#generate_messages( +# DEPENDENCIES +# std_msgs +# owr_messages +#) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES owr_usb_reset +# CATKIN_DEPENDS roscpp rospy std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(owr_usb_reset +# src/${PROJECT_NAME}/owr_usb_reset.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(owr_usb_reset ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +# add_executable(owr_usb_reset_node src/owr_usb_reset_node.cpp) + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(owr_usb_reset_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(owr_usb_reset_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS owr_usb_reset owr_usb_reset_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_owr_usb_reset.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/rover/src/owr_usb_reset/package.xml b/rover/src/owr_usb_reset/package.xml new file mode 100644 index 00000000..e44276dc --- /dev/null +++ b/rover/src/owr_usb_reset/package.xml @@ -0,0 +1,56 @@ + + + owr_usb_reset + 0.0.0 + The owr_usb_reset package + + + + + ros + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + \ No newline at end of file diff --git a/rover/src/owr_usb_reset/scripts/usb_reset b/rover/src/owr_usb_reset/scripts/usb_reset new file mode 100755 index 0000000000000000000000000000000000000000..a5bdc87e17df778120efc01d82e8f1d0caf31894 GIT binary patch literal 8912 zcmeHMU2GKB6~4RcKQOEpViE&UnNpA(Di3RFT$3na*7n+CWCQUJaod<-?H$|Ou6M27 zS;t0DKnA2OA+_47LX|3^CT-I;tw>c>Rv!2%2rFtIKq_se=D}@4wN9WVf+9aOY|puK z&+g3Zu7vuKC(df;-1FV@o%=g?=H59L?Cx;8T#UrcUSeo1mMa`GuZ;ONa#LU}Yz0%; zCiX0=0HhrL3eQ1prbsV~(4?z`p9gdq{9D{6(Bf8jg7mW{3?-OCHAIc&f$uDVcLFZK-zk0oip9r%D27*; zz&Dq`8T9uEc5gG&ry~ZN)Dww#f=#B3B#XpHj3`U$hMtOq*+?{=)LDE|k11r$9LpwAEjZnyn77}8i=~58 z)Y&^#>Y4IeD-#nmU#_`4@PS?wKFy! zhYlG~8^%GYv&&vJeS2!-Jchzx{9qHmC3${`2*^SfAIiU9(f>u zn!cxA$?R5L*VUVkjCHwa)fBB}6C1i}mVf-kn=2&7Qfmf)n2ABfhOU=i1ju!tmvl*j z1z4Tk%~Itbe;0VUV4ol%dt+$nFmNypBPgYh-ci%3#YA>YxuY zFN1vv2PX4VNU3Lni|QGrN=*lsA-#MNbJX+#FCe3XM>_am_UMCbs`k?JNFPQzj$>vV zQfGn>-h(u|SPSbNv9g~+iOa|sM1~(3IMSJBlaXG?+yR%l_p$M2e+FI&90;Vdfq_7O z_t~wn3JE&%Yy;}PuJpsM^sVmauw_;1l}|mHSAeXZx@$;{e-)C5)m!(5C+L;VmbH58UoTg^{?iqzw`I1n$Ezf~Edj4T z;H_`Duejej#8b3=ge8;92BGUjKCZJUl>eVc**Mzg+zP7Pp6_jsY12F3 zyxX)_f)C2DsaUnpbwaNbniM{UxxniR3az=9xs`v;;ENRs?ki9R%M`8&SAyPWAn|YbfvA$wt#P>UJS>Vp~xShw(*OS(fK8_dm=V1}&f+PNE?q4`A zKL)&5yGpee-;G^x(s6!;0;#;<)~i@QphvOzzvtAa3g*KHJWk=b-xmJ#oZ%*1mU*IZ zepW*RTt()?=K)^}{g1n26nY*s0xogHe)%QG3+GP{k7M^mO9R{oPetdv`Xcu)yzfR! z#F;69zg`0W1>jh&bDqxwE)`ajEdaj8y`CL%%>O?k4v}abC==X&0FM2J#|bEW4+Q$p z@b|F|Y|;_uUExpX%iE9yavyN?clJ+K_~SVR3g3f)E`tFocCPkx349yi5(aR{OC|jG z1CIURtk0_@;@su+EL@+bO2lU)2_tEwMn~llIF#Gd)~j`Q_4R8S3+oAeERuvBwq{Id zaF`dFDv0Kti`7F0Den%dsWw9f8*t$}WBUq=TV6=?l|*6tvdz|Ss6k}2K;|xhlSvVVAI9RbiM=TERM(Dad#1ErF(ulfp=1)~ z10Df8yfo+$8XW8@nnkvb5@*DADwC5l6Gmtlw2?6NIHe*nn23{1j>QdK4zzYP7@;v? zjm1*(a4G^{0N~JBMr%Bj9A|QPCI<0LZ6wT`DLs*l#A7x?gS>e2&9Xkb8d6`zd|rqJ0j9MqjIZ0gOuc!?MAp->nGERlyoY>#&*2 zSR*8?e0twCM8GZND72H`4){aZi%|LJ+zR(RCjhE{IY;yRHDR*7kifkc@#ozNSa7Z^ zfP36Bzo}u{o%<&Iu7Gzf78m_ zg#Q~dto6_B8$|(wL=>8Mq?a9hdhZ?-e5xmfAs*R}Ab}XQpWZ*m1<~n`b+w8I0L1)O z5YoiQ@4QwaKIt`(No8C8JYwO%Z!lJIn7nMdcdUNrMg9LG2JUl^xgGx09$d>%@ct}T O{ Date: Sat, 13 Apr 2019 15:31:21 +1000 Subject: [PATCH 5/6] #time 1d some fixing --- rover/src/owr_usb_reset/scripts/usb_reset.py | 2 +- rover/src/owr_usb_reset/usb.py | 65 ------------------- rover/src/owr_usb_reset/usb_reset | Bin 8912 -> 0 bytes rover/src/owr_usb_reset/usb_reset.c | 31 --------- 4 files changed, 1 insertion(+), 97 deletions(-) delete mode 100644 rover/src/owr_usb_reset/usb.py delete mode 100755 rover/src/owr_usb_reset/usb_reset delete mode 100644 rover/src/owr_usb_reset/usb_reset.c diff --git a/rover/src/owr_usb_reset/scripts/usb_reset.py b/rover/src/owr_usb_reset/scripts/usb_reset.py index 0b6631ab..ee3d9d06 100755 --- a/rover/src/owr_usb_reset/scripts/usb_reset.py +++ b/rover/src/owr_usb_reset/scripts/usb_reset.py @@ -21,7 +21,7 @@ def callback(data): subprocess.call("cd /dev/bus/usb",shell=True) devs = subprocess.check_output(["lsusb"]) devs = devs.split("\n") - if(data.data < len(devices) - 1): + if(data.data < len(devs) - 1): devs[data.data].replace(' ', '') print(devs[data.data]) filepath = "/dev/bus/usb/" + devs[data.data][4:7] diff --git a/rover/src/owr_usb_reset/usb.py b/rover/src/owr_usb_reset/usb.py deleted file mode 100644 index cd6556fb..00000000 --- a/rover/src/owr_usb_reset/usb.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# license removed for brevity -import rospy -import subprocess -from std_msgs.msg import String,Int16 - -"""in visudo, need to add %ros ALL = NOPASSWD: /home/ros/owr_software/rover/src/owr_usb_reset/usb_reset -after %sudo ALL=(ALL:ALL) ALL. This allows the usb reset program to run without needing a password for -sudo. Eneter password manually while running causes a problem -""" -#global devices - -def idmap(device): - if (device[23:27] == "1d6b"): - return "linux" - else: - return device[0:32] - -def callback(data): - subprocess.call("cd /dev/bus/usb",shell=True) - devices = subprocess.check_output(["lsusb"]) - devices = devices.split("\n") - if(data.data < len(devices) - 1): - devices[data.data].replace(' ', '') - print(devices[data.data]) - filepath = "/dev/bus/usb/" + devices[data.data][4:7] - filepath = filepath + "/" + devices[data.data][15:18] - print(filepath) - command = "sudo ./usb_reset " + filepath - subprocess.call(command,shell=True) - rospy.loginfo("%s reset", data.data) - else: - print("Out of range") - -def listener(): - rospy.init_node('usb_reset', anonymous=True) - rospy.Subscriber("rover/usb/reset", Int16, callback) - -def talker(): - pub = rospy.Publisher('/rover/usb', String, queue_size=1) - rospy.init_node('usb_reset', anonymous=True) - rate = rospy.Rate(1) # 1hz - - while not rospy.is_shutdown(): - subprocess.call("cd /dev/bus/usb",shell=True) - devices = subprocess.check_output(["lsusb"]) - devices = devices.split("\n") - device_string = idmap(devices[0]) - for i in range(1,len(devices)): - device_string = device_string + "#/#/" + idmap(devices[i]) - rospy.loginfo(device_string) - pub.publish(device_string) - rate.sleep() - -if __name__ == '__main__': - try: - listener() - talker() - except rospy.ROSInterruptException: - pass - - - - - diff --git a/rover/src/owr_usb_reset/usb_reset b/rover/src/owr_usb_reset/usb_reset deleted file mode 100755 index a5bdc87e17df778120efc01d82e8f1d0caf31894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8912 zcmeHMU2GKB6~4RcKQOEpViE&UnNpA(Di3RFT$3na*7n+CWCQUJaod<-?H$|Ou6M27 zS;t0DKnA2OA+_47LX|3^CT-I;tw>c>Rv!2%2rFtIKq_se=D}@4wN9WVf+9aOY|puK z&+g3Zu7vuKC(df;-1FV@o%=g?=H59L?Cx;8T#UrcUSeo1mMa`GuZ;ONa#LU}Yz0%; zCiX0=0HhrL3eQ1prbsV~(4?z`p9gdq{9D{6(Bf8jg7mW{3?-OCHAIc&f$uDVcLFZK-zk0oip9r%D27*; zz&Dq`8T9uEc5gG&ry~ZN)Dww#f=#B3B#XpHj3`U$hMtOq*+?{=)LDE|k11r$9LpwAEjZnyn77}8i=~58 z)Y&^#>Y4IeD-#nmU#_`4@PS?wKFy! zhYlG~8^%GYv&&vJeS2!-Jchzx{9qHmC3${`2*^SfAIiU9(f>u zn!cxA$?R5L*VUVkjCHwa)fBB}6C1i}mVf-kn=2&7Qfmf)n2ABfhOU=i1ju!tmvl*j z1z4Tk%~Itbe;0VUV4ol%dt+$nFmNypBPgYh-ci%3#YA>YxuY zFN1vv2PX4VNU3Lni|QGrN=*lsA-#MNbJX+#FCe3XM>_am_UMCbs`k?JNFPQzj$>vV zQfGn>-h(u|SPSbNv9g~+iOa|sM1~(3IMSJBlaXG?+yR%l_p$M2e+FI&90;Vdfq_7O z_t~wn3JE&%Yy;}PuJpsM^sVmauw_;1l}|mHSAeXZx@$;{e-)C5)m!(5C+L;VmbH58UoTg^{?iqzw`I1n$Ezf~Edj4T z;H_`Duejej#8b3=ge8;92BGUjKCZJUl>eVc**Mzg+zP7Pp6_jsY12F3 zyxX)_f)C2DsaUnpbwaNbniM{UxxniR3az=9xs`v;;ENRs?ki9R%M`8&SAyPWAn|YbfvA$wt#P>UJS>Vp~xShw(*OS(fK8_dm=V1}&f+PNE?q4`A zKL)&5yGpee-;G^x(s6!;0;#;<)~i@QphvOzzvtAa3g*KHJWk=b-xmJ#oZ%*1mU*IZ zepW*RTt()?=K)^}{g1n26nY*s0xogHe)%QG3+GP{k7M^mO9R{oPetdv`Xcu)yzfR! z#F;69zg`0W1>jh&bDqxwE)`ajEdaj8y`CL%%>O?k4v}abC==X&0FM2J#|bEW4+Q$p z@b|F|Y|;_uUExpX%iE9yavyN?clJ+K_~SVR3g3f)E`tFocCPkx349yi5(aR{OC|jG z1CIURtk0_@;@su+EL@+bO2lU)2_tEwMn~llIF#Gd)~j`Q_4R8S3+oAeERuvBwq{Id zaF`dFDv0Kti`7F0Den%dsWw9f8*t$}WBUq=TV6=?l|*6tvdz|Ss6k}2K;|xhlSvVVAI9RbiM=TERM(Dad#1ErF(ulfp=1)~ z10Df8yfo+$8XW8@nnkvb5@*DADwC5l6Gmtlw2?6NIHe*nn23{1j>QdK4zzYP7@;v? zjm1*(a4G^{0N~JBMr%Bj9A|QPCI<0LZ6wT`DLs*l#A7x?gS>e2&9Xkb8d6`zd|rqJ0j9MqjIZ0gOuc!?MAp->nGERlyoY>#&*2 zSR*8?e0twCM8GZND72H`4){aZi%|LJ+zR(RCjhE{IY;yRHDR*7kifkc@#ozNSa7Z^ zfP36Bzo}u{o%<&Iu7Gzf78m_ zg#Q~dto6_B8$|(wL=>8Mq?a9hdhZ?-e5xmfAs*R}Ab}XQpWZ*m1<~n`b+w8I0L1)O z5YoiQ@4QwaKIt`(No8C8JYwO%Z!lJIn7nMdcdUNrMg9LG2JUl^xgGx09$d>%@ct}T O{ -#include -#include -#include -#include -#include -#include -#include -#include - -void main(int argc, char **argv) -{ - const char *filename; - int fd; - - if (argc < 2) { - printf("Give USB device name as parameter\n"); - exit(1); - } - filename = argv[1]; - fd = open(filename, O_WRONLY); - if (fd == -1) { - perror("USB device open failed"); - exit(2); - } - if (ioctl(fd, USBDEVFS_RESET, 0) == -1) { - perror("USBDEVFS_RESET device ioctl failed"); - exit(3); - } - close(fd); -} From 13dd7e517f72aecceb7d1fe5e44002d436a419ed Mon Sep 17 00:00:00 2001 From: Shanil Date: Sat, 1 Jun 2019 14:01:04 +1000 Subject: [PATCH 6/6] #time 2h ready for pull request --- rover/src/owr_messages/CMakeLists.txt | 1 + rover/src/owr_usb_reset/package.xml | 2 ++ rover/src/owr_usb_reset/scripts/usb_reset.py | 5 +---- rover/{src/owr_usb_reset/scripts => }/usb_reset | Bin 4 files changed, 4 insertions(+), 4 deletions(-) rename rover/{src/owr_usb_reset/scripts => }/usb_reset (100%) diff --git a/rover/src/owr_messages/CMakeLists.txt b/rover/src/owr_messages/CMakeLists.txt index c8233733..6f979f10 100644 --- a/rover/src/owr_messages/CMakeLists.txt +++ b/rover/src/owr_messages/CMakeLists.txt @@ -63,6 +63,7 @@ find_package(catkin REQUIRED COMPONENTS board.msg adc.msg stop.msg + devices.msg ) ## Generate services in the 'srv' folder diff --git a/rover/src/owr_usb_reset/package.xml b/rover/src/owr_usb_reset/package.xml index e44276dc..e0055684 100644 --- a/rover/src/owr_usb_reset/package.xml +++ b/rover/src/owr_usb_reset/package.xml @@ -43,6 +43,8 @@ roscpp rospy std_msgs + owr_messages + owr_messages roscpp rospy std_msgs diff --git a/rover/src/owr_usb_reset/scripts/usb_reset.py b/rover/src/owr_usb_reset/scripts/usb_reset.py index ee3d9d06..2f26f732 100755 --- a/rover/src/owr_usb_reset/scripts/usb_reset.py +++ b/rover/src/owr_usb_reset/scripts/usb_reset.py @@ -9,7 +9,6 @@ after %sudo ALL=(ALL:ALL) ALL. This allows the usb reset program to run without needing a password for sudo. Eneter password manually while running causes a problem """ -#global devs def idmap(device): if (device[23:27] == "1d6b"): @@ -29,7 +28,7 @@ def callback(data): print(filepath) command = "sudo ./usb_reset " + filepath subprocess.call(command,shell=True) - rospy.loginfo("%s reset", data.data) + rospy.loginfo("reset attempted") else: print("Out of range") @@ -46,10 +45,8 @@ def talker(): subprocess.call("cd /dev/bus/usb",shell=True) devs = subprocess.check_output(["lsusb"]) devs = devs.split("\n") - #device_string = idmap(devices[0]) for i in range(0,len(devs)): devs[i] = idmap(devs[i]) - #rospy.loginfo(device_string) pub.publish(devs) rate.sleep() diff --git a/rover/src/owr_usb_reset/scripts/usb_reset b/rover/usb_reset similarity index 100% rename from rover/src/owr_usb_reset/scripts/usb_reset rename to rover/usb_reset