12   imp.find_module(
"sensor_msgs")
 
   14   import roslib; roslib.load_manifest(
'jsk_teleop_joy')
 
   18 from diagnostic_msgs.msg 
import DiagnosticStatus, DiagnosticArray
 
   21 from jsk_rviz_plugins.msg 
import OverlayMenu
 
   24 from diagnostic_updater 
import Updater 
as DiagnosticUpdater
 
   26 AUTO_DETECTED_CLASS = 
None 
   29   global AUTO_DETECTED_CLASS
 
   30   if AUTO_DETECTED_CLASS:
 
   32   if len(msg.axes) == 27 
and len(msg.buttons) == 19:
 
   33     rospy.loginfo(
"auto detected as ps3wired")
 
   34     AUTO_DETECTED_CLASS = PS3WiredStatus
 
   35   elif len(msg.axes) == 8 
and len(msg.buttons) == 11:
 
   36     rospy.loginfo(
"auto detected as xbox")
 
   37     AUTO_DETECTED_CLASS = XBoxStatus
 
   38   elif len(msg.axes) == 20 
and len(msg.buttons) == 17:
 
   39     rospy.loginfo(
"auto detected as ps3")
 
   40     AUTO_DETECTED_CLASS = PS3Status
 
   41   elif len(msg.axes) == 8 
and len(msg.buttons) == 19:
 
   42     rospy.loginfo(
"auto detected as ipega")
 
   43     AUTO_DETECTED_CLASS = IpegaStatus
 
   45     AUTO_DETECTED_CLASS = 
"UNKNOWN" 
   48   STATE_INITIALIZATION = 1
 
   50   STATE_WAIT_FOR_JOY = 3
 
   59       stat.summary(DiagnosticStatus.WARN,
 
   60                    "initializing JoyManager")
 
   62       stat.summary(DiagnosticStatus.OK,
 
   64       stat.add(
"Joy stick type", str(self.
JoyStatus))
 
   66       stat.summary(DiagnosticStatus.WARN,
 
   67                    "waiting for joy message to detect joy stick type")
 
   71         stat.summary(DiagnosticStatus.ERROR, 
"no plugin is loaded")
 
   73         stat.summary(DiagnosticStatus.OK, 
 
   77   def __init__(self, plugin_package="jsk_teleop_joy"):
 
   81     self.
menu_pub = rospy.Publisher(
"/overlay_menu", OverlayMenu)
 
   83     self.
plugins = rospy.get_param(
'~plugins', {})
 
  102       s = rospy.Subscriber(
'/joy', Joy, autoJoyDetect)
 
  104       error_message_published = 
False 
  106       while not rospy.is_shutdown():
 
  108         if AUTO_DETECTED_CLASS == 
"UNKNOWN":
 
  109           if not error_message_published:
 
  110             rospy.logfatal(
"unknown joy type")
 
  111             error_message_published = 
True 
  113         elif AUTO_DETECTED_CLASS:
 
  135     rospy.loginfo(
'switching to next plugin')
 
  141       rospy.logfatal(
'no valid plugins are loaded')
 
  151     menu.current_index = index
 
  152     menu.title = 
"Joystick" 
  154       menu.action = OverlayMenu.ACTION_CLOSE
 
  162     if history.new(status, 
"down") 
or history.new(status, 
"left_analog_down"):
 
  167     elif history.new(status, 
"up") 
or history.new(status, 
"left_analog_up"):
 
  172     elif history.new(status, 
"cross") 
or history.new(status, 
"center"):
 
  175     elif history.new(status, 
"circle"):
 
  186       if self.
history.new(status, 
"center"):
 
  197   rospy.init_node(
'jsk_teleop_joy')
 
  199   result = g_manager.start()
 
  201     rospy.logfatal(
"Fatal Error")
 
  206 if __name__ == 
'__main__':