#!/usr/bin/env python 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# This process publishes joystick events. Such events can be suscribed by 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# mocked car controller scripts. 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### this process needs pygame and can't run on the EON ### 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  pygame   # pylint: disable=import-error 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  cereal . messaging  as  messaging 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  joystick_thread ( ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  joystick_sock  =  messaging . pub_sock ( ' testJoystick ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  pygame . init ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Used to manage how fast the screen updates 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  clock  =  pygame . time . Clock ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Initialize the joysticks 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  pygame . joystick . init ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Get count of joysticks 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  joystick_count  =  pygame . joystick . get_count ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  joystick_count  >  1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    raise  ValueError ( " More than one joystick attached " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  elif  joystick_count  <  1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    raise  ValueError ( " No joystick found " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # -------- Main Program Loop ----------- 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  while  True : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # EVENT PROCESSING STEP 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  event  in  pygame . event . get ( ) :   # User did something 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  event . type  ==  pygame . QUIT :   # If user clicked close 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        pass 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Available joystick events: JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN JOYBUTTONUP JOYHATMOTION 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  event . type  ==  pygame . JOYBUTTONDOWN : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( " Joystick button pressed. " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  event . type  ==  pygame . JOYBUTTONUP : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( " Joystick button released. " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    joystick  =  pygame . joystick . Joystick ( 0 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    joystick . init ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Usually axis run in pairs, up/down for one, and left/right for 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # the other. 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    axes  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    buttons  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  a  in  range ( joystick . get_numaxes ( ) ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      axes . append ( joystick . get_axis ( a ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  b  in  range ( joystick . get_numbuttons ( ) ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      buttons . append ( bool ( joystick . get_button ( b ) ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    dat  =  messaging . new_message ( ' testJoystick ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dat . testJoystick . axes  =  axes 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dat . testJoystick . buttons  =  buttons 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    joystick_sock . send ( dat . to_bytes ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Limit to 100 frames per second 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    clock . tick ( 100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  joystick_thread ( )