Compare commits

...

2 commits

Author SHA1 Message Date
cec09d6bcb moved BeamNG methods to its own File 2024-11-10 15:53:21 +13:00
73d7cf6d0b added requirements.txt file 2024-11-10 15:15:53 +13:00
7 changed files with 58 additions and 46 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/build
/dist
OutGaugeInterpreter.spec

View file

@ -0,0 +1,47 @@
BEAMNG_DATA_FORMAT = "I4sHBBfffffffIIfff16s16sxxxx"
def decodeFlag(flag):
flagBin = str(bin(flag))
flags = {"showTurbo":newBool(flagBin[2]),"showKM":not newBool(flagBin[1]),"showBAR":not newBool(flagBin[0])}
return flags
def newBool(string):
if(string == "0"):
return False
if(string == "1"):
return True
def decodeLights(lightsAvailable,lightsActive):
lightsAvBin = str(bin(lightsAvailable))[2:][::-1]
lightsActBin = str(bin(lightsActive))[2:][::-1]
lights = {}
totalLights = ["shift_light","full_beam","handbrake","pit_limiter","tc","left_turn","right_turn","both_turns","oil_warn","battery_warn","abs","spare_light"]
for i in range(0,12):
try:
lights[totalLights[i]] = newBool(lightsActBin[i])
except Exception:
lights[totalLights[i]] = False
return lights
def unpackData(unpackedData):
carData = {"time":unpackedData[0],
"carName":unpackedData[1].decode("utf-8"),
"flags": decodeFlag(unpackedData[2]),
"gear": unpackedData[3],
"PLID": unpackedData[4],
"speed": unpackedData[5],
"rpm": unpackedData[6],
"turboPressure":unpackedData[7],
"engTemp":unpackedData[8],
"fuel":unpackedData[9],
"oilPressure":unpackedData[10],
"oilTemp":unpackedData[11],
"lights":decodeLights(unpackedData[12],unpackedData[13]),
"throttle": unpackedData[14],
"brake": unpackedData[15],
"clutch": unpackedData[16],
"misc1": unpackedData[17],
"misc2": unpackedData[18]
}
return carData

1
GAME_METHODS/__init__.py Normal file
View file

@ -0,0 +1 @@
__all__= ["BEAMNG_METHODS"]

Binary file not shown.

View file

@ -1,33 +1,11 @@
import socket
import struct
import serial
toPi=serial.Serial('COM5',115200)
def decodeFlag(flag):
flagBin = str(bin(flag))
flags = {"showTurbo":newBool(flagBin[2]),"showKM":not newBool(flagBin[1]),"showBAR":not newBool(flagBin[0])}
return flags
def newBool(string):
if(string == "0"):
return False
if(string == "1"):
return True
from GAME_METHODS import *
##import BEAMNG_FILES as BEAM
def decodeLights(lightsAvailable,lightsActive):
lightsAvBin = str(bin(lightsAvailable))[2:][::-1]
lightsActBin = str(bin(lightsActive))[2:][::-1]
lights = {}
totalLights = ["shift_light","full_beam","handbrake","pit_limiter","tc","left_turn","right_turn","both_turns","oil_warn","battery_warn","abs","spare_light"]
for i in range(0,12):
try:
lights[totalLights[i]] = newBool(lightsActBin[i])
except Exception:
lights[totalLights[i]] = False
return lights
toPi=serial.Serial('COM5',115200) #connect to arduino
UDP_IP = "127.0.0.1"
UDP_PORT = 4444
@ -35,29 +13,11 @@ sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((UDP_IP,UDP_PORT))
print("waiting for data:\n")
while True:
data, addr = sock.recvfrom(1024)
unpackedData = struct.unpack("I4sHBBfffffffIIfff16s16sxxxx",data)
carData = {"time":unpackedData[0],
"carName":unpackedData[1].decode("utf-8"),
"flags": decodeFlag(unpackedData[2]),
"gear": unpackedData[3],
"PLID": unpackedData[4],
"speed": unpackedData[5],
"rpm": unpackedData[6],
"turboPressure":unpackedData[7],
"engTemp":unpackedData[8],
"fuel":unpackedData[9],
"oilPressure":unpackedData[10],
"oilTemp":unpackedData[11],
"lights":decodeLights(unpackedData[12],unpackedData[13]),
"throttle": unpackedData[14],
"brake": unpackedData[15],
"clutch": unpackedData[16],
"misc1": unpackedData[17],
"misc2": unpackedData[18]
}
#print("speed: %s" % (carData["speed"]*3.6))
unpackedData = struct.unpack(BEAMNG_METHODS.BEAMNG_DATA_FORMAT,data)
carData = BEAMNG_METHODS.unpackData(unpackedData)
kmh=carData["speed"]*3.6
toPi.write(str(kmh).encode()+":".encode())

1
requirements.txt Normal file
View file

@ -0,0 +1 @@
pyserial==3.5