00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright (c) 2012, Southwest Research Institute 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are met: 00009 * 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * * Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in the 00014 * documentation and/or other materials provided with the distribution. 00015 * * Neither the name of the Southwest Research Institute, nor the names 00016 * of its contributors may be used to endorse or promote products derived 00017 * from this software without specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00029 * POSSIBILITY OF SUCH DAMAGE. 00030 */ 00031 00032 #include "industrial_robot_client/robot_status_relay_handler.h" 00033 #include "industrial_msgs/RobotStatus.h" 00034 #include "simple_message/log_wrapper.h" 00035 00036 using namespace industrial::shared_types; 00037 using namespace industrial::smpl_msg_connection; 00038 using namespace industrial::simple_message; 00039 using namespace industrial::robot_status; 00040 using namespace industrial::robot_status_message; 00041 00042 namespace industrial_robot_client 00043 { 00044 namespace robot_status_relay_handler 00045 { 00046 00047 bool RobotStatusRelayHandler::init(SmplMsgConnection* connection) 00048 { 00049 this->pub_robot_status_ = this->node_.advertise<industrial_msgs::RobotStatus>("robot_status", 1); 00050 return init((int)StandardMsgTypes::STATUS, connection); 00051 } 00052 00053 bool RobotStatusRelayHandler::internalCB(SimpleMessage& in) 00054 { 00055 RobotStatusMessage status_msg; 00056 00057 if (!status_msg.init(in)) 00058 { 00059 LOG_ERROR("Failed to initialize status message"); 00060 return false; 00061 } 00062 00063 return internalCB(status_msg); 00064 } 00065 00066 bool RobotStatusRelayHandler::internalCB(RobotStatusMessage & in) 00067 { 00068 industrial_msgs::RobotStatus status; 00069 bool rtn = true; 00070 00071 status.drives_powered.val = TriStates::toROSMsgEnum(in.status_.getDrivesPowered()); 00072 status.e_stopped.val = TriStates::toROSMsgEnum(in.status_.getEStopped()); 00073 status.error_code = in.status_.getErrorCode(); 00074 status.in_error.val = TriStates::toROSMsgEnum(in.status_.getInError()); 00075 status.in_motion.val = TriStates::toROSMsgEnum(in.status_.getInMotion()); 00076 status.mode.val = RobotModes::toROSMsgEnum(in.status_.getMode()); 00077 status.motion_possible.val = TriStates::toROSMsgEnum(in.status_.getMotionPossible()); 00078 00079 this->pub_robot_status_.publish(status); 00080 00081 // Reply back to the controller if the sender requested it. 00082 if (CommTypes::SERVICE_REQUEST == in.getMessageType()) 00083 { 00084 SimpleMessage reply; 00085 in.toReply(reply, rtn ? ReplyTypes::SUCCESS : ReplyTypes::FAILURE); 00086 this->getConnection()->sendMsg(reply); 00087 } 00088 00089 return rtn; 00090 } 00091 00092 } 00093 } 00094