import socket import struct import serial import time from enum import Enum from GAME_METHODS import * COM_PORT = 'COM5' UDP_IP = "127.0.0.1" BEAMNG_UDP_PORT = 4444 FORZA_UDP_PORT= 4843 class GameType(Enum): NONE=0, BEAMNG = 1, FORZA = 2 connectedArduino = False connectedWebSocket = False gameSelected = False portToConnect= 0 gameType= GameType.NONE carData = 0 #code runs from here<----------------------------------------------------------------------------------------------------------- #select game while gameSelected == False: gameNo = input("1:BEAMNG\n2:FORZA\n") if gameNo == "1": portToConnect = BEAMNG_UDP_PORT gameSelected = True gameType=GameType.BEAMNG print("BeamNG Selected") elif gameNo == "2": portToConnect = FORZA_UDP_PORT gameType=GameType.FORZA gameSelected=True print("Forza Selected") else: print("please select a number from the list") #check everything is connected while connectedWebSocket == False: try: sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.bind((UDP_IP,portToConnect)) connectedWebSocket = True except: print("please check you are able to open the socket on this system\ntired to open port: "+portToConnect) exit() while connectedArduino == False: try: toPi=serial.Serial(COM_PORT,115200) #connect to arduino connectedArduino = True except: print("please check connection to arduino and verify the correct COM port") time.sleep(1) print(struct.calcsize(FORZA_METHODS.FORZA_DATA_FORMAT)) print("ready:\n") while True: data, addr = sock.recvfrom(1024) if gameType == GameType.BEAMNG: unpackedData = struct.unpack(BEAMNG_METHODS.BEAMNG_DATA_FORMAT,data) carData = BEAMNG_METHODS.unpackData(unpackedData) kmh=carData["speed"]*3.6 elif gameType == GameType.FORZA: # unpackedData = struct.unpack(FORZA_METHODS.FORZA_DATA_FORMAT,data) carData = FORZA_METHODS.get_data(data) kmh = carData["Speed"]*3.6 toPi.write(str(kmh).encode()+":".encode())