From 16392d2926faf60f1a93f26d61d4c62a49f1370a Mon Sep 17 00:00:00 2001 From: matlabbe Date: Fri, 16 Aug 2019 15:52:56 -0400 Subject: [PATCH] DbPlayer: added space keyboard detection to pause/resume for convenience (like a rosbag) --- src/DbPlayerNode.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/DbPlayerNode.cpp b/src/DbPlayerNode.cpp index 3a20f3e2..7718a6b6 100644 --- a/src/DbPlayerNode.cpp +++ b/src/DbPlayerNode.cpp @@ -52,6 +52,44 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include +#include +bool spacehit() +{ + bool charAvailable = true; + bool hit = false; + while(charAvailable) + { + termios term; + tcgetattr(0, &term); + + termios term2 = term; + term2.c_lflag &= ~ICANON; + term2.c_lflag &= ~ECHO; + term2.c_lflag &= ~ISIG; + term2.c_cc[VMIN] = 0; + term2.c_cc[VTIME] = 0; + tcsetattr(0, TCSANOW, &term2); + + int c = getchar(); + if(c != EOF) + { + if(c == ' ') + { + hit = true; + } + } + else + { + charAvailable = false; + } + + tcsetattr(0, TCSANOW, &term); + } + + return hit; +} + bool paused = false; bool pauseCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&) { @@ -597,8 +635,25 @@ int main(int argc, char** argv) ros::spinOnce(); - while(ros::ok() && paused) + while(ros::ok()) { + if (spacehit()) { + paused = !paused; + if(paused) + { + ROS_INFO("paused!"); + } + else + { + ROS_INFO("resumed!"); + } + } + + if(!paused) + { + break; + } + uSleep(100); ros::spinOnce(); }