From cec09d6bcbf69e6e80e45389b688a787a5ed2910 Mon Sep 17 00:00:00 2001 From: Seth Samuel Date: Sun, 10 Nov 2024 15:53:21 +1300 Subject: [PATCH] moved BeamNG methods to its own File --- GAME_METHODS/BEAMNG_METHODS.py | 47 ++++++++++++++++ GAME_METHODS/__init__.py | 1 + .../BEAMNG_METHODS.cpython-311.pyc | Bin 0 -> 3029 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 206 bytes OutGaugeInterpreter.py | 52 ++---------------- 5 files changed, 54 insertions(+), 46 deletions(-) create mode 100644 GAME_METHODS/BEAMNG_METHODS.py create mode 100644 GAME_METHODS/__init__.py create mode 100644 GAME_METHODS/__pycache__/BEAMNG_METHODS.cpython-311.pyc create mode 100644 GAME_METHODS/__pycache__/__init__.cpython-311.pyc diff --git a/GAME_METHODS/BEAMNG_METHODS.py b/GAME_METHODS/BEAMNG_METHODS.py new file mode 100644 index 0000000..7b8eecd --- /dev/null +++ b/GAME_METHODS/BEAMNG_METHODS.py @@ -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 \ No newline at end of file diff --git a/GAME_METHODS/__init__.py b/GAME_METHODS/__init__.py new file mode 100644 index 0000000..0d920bf --- /dev/null +++ b/GAME_METHODS/__init__.py @@ -0,0 +1 @@ +__all__= ["BEAMNG_METHODS"] \ No newline at end of file diff --git a/GAME_METHODS/__pycache__/BEAMNG_METHODS.cpython-311.pyc b/GAME_METHODS/__pycache__/BEAMNG_METHODS.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..949e053dac1ef5ad1f84a9c511ada2bb44524292 GIT binary patch literal 3029 zcmbVO&2JmW6`$oUNs(NBh?Hb2rfhx0QfMow9ScdD2oA)`a^&hGvFQRz)hbKwiln_F z>Di@a2NXgS4L}1lK%fq+Lk>jIrV4V&B|r{6r1=ZPVuJ_+s0h&0-WKr1$fbR6DT-XX z28s^3kMI57$IQ;W_lAEB2K@wv=k$f_Ki!1<3x&?$j+iIoz&s{0`GCmWAIJxs>;meN zd7!*302O5S4U+J%_~MNAZZf&q9*c|cd+`kozV~2cI`J^92Ob`tC*J~jO!OX|j`-22 zkk3K$<+0W&?QlA*xic!9%nf&hXZ)VAbG^t;B+pp#FSeA0&-fiz#RYHfUNK!Tvx)08 zaR~{Y`LtYdJ5{FXBJ&{ot7YcJ-{jnN(DIs28K2GwkbxqN8>m^#erDSw%eYLD#mC9LVv7jroL=~Xx$t!cqD_1ub z7MHHv=m^VKQtz(L-*~NbpZR4aQ0 zheIQ~*{1Z_t=3S&7)pG-{mu5bcmDQK>&)osKGb;+=wAoItva04>W-ebmHSYX`6 z)E6Yd!Jg_gU&v~><)bu$zG8>;0i&G-QY8n1zn1y^a&`H@7pe{RNWt2G#S?e5x=f>B znX#t_2FG!7ehAV3-{h1znS9cdXfnKp?E0i9p>|v^Onc6m=uYW>h|K57j*x|I{1dn1 z?oDYKO7(Mi*DsIXcb@!qcE{r*y0`uENGp8B^PH}wrQpUvsaw^>%zjkF?dF<(w9 z$Z0CwR#>2vM}w_Aq&joy8Rk)kN9*^&)KZT`igmVV_O0XF)iufc)u<2 zQd)yKOA=Mub5cBg6LV=H;ilLfX#fawQ>l?C8pEB7)=NzWGx2`>xVOV#G?N_kaE zs|pj3fQ+8M3ybZjv81~ylss(}3+P2%QkQVy8sqXBo&;1p4m-1%*sj;M1-$_3FgzLq z0u>vMetN0#aVs`u#HL!|SB&s0d;NRSy{HkM-b=xU?xl?I>(x_-k=Uod+!b2`XN`fg zt;nPinQY!^(k3+`=k{jcbA4~dh+L?~5By?v$a0a$?_3t?Qi$LWH@L?5gY)(C77<+I zHmSaExp;p3Fh0>-`l|oWtF8Eq5ud5PQ9Iv|>aVr<;eCGi>7g%b5sn9s4mpUAIc>nq z;z9fL>C+$kLe&us>+lXBKvh75?nMKB9_K|Qd%H27v+aX9d|f?w`vD0!5D}1|0|@~Vb|4Wz`W;9V zkeCA*0A$dC3;}Y&ft&OjT-8FwHP zfV}KL&H^&oMe^KVxE-#-K?j&xVS=9DQtZ-W-i$<7B#`iK|Hxg|H(&iZ#eBEh1QW7~ zL`^(&CcL+_IB#O}U~a9XD6)wzjHjh76RVg7p(Uh??@>k5%2Y8iTbNfVWK+sk$;5sI zS8iERO&_uW=n%)ISoh2eh;51ufWC?ZFDx^N%04|ui@L5VW(Y;M-I`2XC-Y>~vYyGA zcq=jYR$j|oH1V2k^RJtj*l^u@+Es1ez;;n5Tudw%N>b*wBF{^@WN!sB8g}bWGw`=f z5T_}?Pr;-82C}zGELSw_uH9{@&5MtU76IXa7i;UgWA%+6f)oD;PBgE!g40HD+Tua? zBkzBBtx;*tJ^HvMP8s5q5GLGi?kf_NKq0#<{mz;@gJ!wl$3UmxvImRd$m`_>6T5fp~j~QA3Pd zBM6*^2(Sh_{}EOaZWcZIXEi^Un%h`dy}mq` zYM-C|=L0*leI|4WIXq{(f&bJuyH%9Ss&bkB8ZbC3qP-6U`W?p|3|`tNQA^;tkVTG( YUqJDgg#29CBFE(902i~!^TeL=KV#~*0{{R3 literal 0 HcmV?d00001 diff --git a/GAME_METHODS/__pycache__/__init__.cpython-311.pyc b/GAME_METHODS/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce1cb9b55e377a1f29673ba643197ef41fc54aaa GIT binary patch literal 206 zcmZ3^%ge<81mENh(xrj)V-N=h7@>^MJV3^Dh7^W$#wdmq#$X0brdxbYu8zKb?(x2^ zAs+rN!G4;Ix7g$36LWIn<5x0#25J1|oNN^nTAW%`98;WHk`Yr-l%JKFTv8n4Us~dx zSel;dnOBlpR8W)(BxBqieO+N@#l**F=4F<|$LkeT{^GF7%}*)KNwq6t2bu|TQL!M9 X_`uA_$asTG>H?>913L&7u>wT_FUU4> literal 0 HcmV?d00001 diff --git a/OutGaugeInterpreter.py b/OutGaugeInterpreter.py index 16d94a1..1f8cf4b 100644 --- a/OutGaugeInterpreter.py +++ b/OutGaugeInterpreter.py @@ -1,33 +1,11 @@ import socket import struct import serial +from GAME_METHODS import * +##import BEAMNG_FILES as BEAM -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 - - -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())