You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				#!/usr/bin/env python3
 | 
						|
import time
 | 
						|
import threading
 | 
						|
from flask import Flask
 | 
						|
 | 
						|
import cereal.messaging as messaging
 | 
						|
 | 
						|
app = Flask(__name__)
 | 
						|
pm = messaging.PubMaster(['testJoystick'])
 | 
						|
 | 
						|
index = """
 | 
						|
<html>
 | 
						|
<head>
 | 
						|
<script src="https://github.com/bobboteck/JoyStick/releases/download/v1.1.6/joy.min.js"></script>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
<div id="joyDiv" style="width:100%;height:100%"></div>
 | 
						|
<script type="text/javascript">
 | 
						|
// Create JoyStick object into the DIV 'joyDiv'
 | 
						|
var joy = new JoyStick('joyDiv');
 | 
						|
setInterval(function(){
 | 
						|
  var x = -joy.GetX()/100;
 | 
						|
  var y = joy.GetY()/100;
 | 
						|
  let xhr = new XMLHttpRequest();
 | 
						|
  xhr.open("GET", "/control/"+x+"/"+y);
 | 
						|
  xhr.send();
 | 
						|
}, 50);
 | 
						|
</script>
 | 
						|
"""
 | 
						|
 | 
						|
@app.route("/")
 | 
						|
def hello_world():
 | 
						|
  return index
 | 
						|
 | 
						|
last_send_time = time.monotonic()
 | 
						|
@app.route("/control/<x>/<y>")
 | 
						|
def control(x, y):
 | 
						|
  global last_send_time
 | 
						|
  x,y = float(x), float(y)
 | 
						|
  x = max(-1, min(1, x))
 | 
						|
  y = max(-1, min(1, y))
 | 
						|
  dat = messaging.new_message('testJoystick')
 | 
						|
  dat.testJoystick.axes = [y,x]
 | 
						|
  dat.testJoystick.buttons = [False]
 | 
						|
  pm.send('testJoystick', dat)
 | 
						|
  last_send_time = time.monotonic()
 | 
						|
  return ""
 | 
						|
 | 
						|
def handle_timeout():
 | 
						|
  while 1:
 | 
						|
    this_time = time.monotonic()
 | 
						|
    if (last_send_time+0.5) < this_time:
 | 
						|
      #print("timeout, no web in %.2f s" % (this_time-last_send_time))
 | 
						|
      dat = messaging.new_message('testJoystick')
 | 
						|
      dat.testJoystick.axes = [0,0]
 | 
						|
      dat.testJoystick.buttons = [False]
 | 
						|
      pm.send('testJoystick', dat)
 | 
						|
    time.sleep(0.1)
 | 
						|
 | 
						|
def main():
 | 
						|
  threading.Thread(target=handle_timeout, daemon=True).start()
 | 
						|
  app.run(host="0.0.0.0")
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
  main()
 | 
						|
 |