135 lines
4.2 KiB
Python
Executable File
135 lines
4.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from typing import Optional
|
|
|
|
RESERVED_PORT = 8022 # sshd
|
|
STARTING_PORT = 8001
|
|
|
|
|
|
def new_port(port: int):
|
|
port += STARTING_PORT
|
|
return port + 1 if port >= RESERVED_PORT else port
|
|
|
|
|
|
class Service:
|
|
def __init__(self, port: int, should_log: bool, frequency: float, decimation: Optional[int] = None):
|
|
self.port = port
|
|
self.should_log = should_log
|
|
self.frequency = frequency
|
|
self.decimation = decimation
|
|
|
|
|
|
services: dict[str, tuple] = {
|
|
# service: (should_log, frequency, qlog decimation (optional))
|
|
# note: the "EncodeIdx" packets will still be in the log
|
|
"gyroscope": (True, 104., 104),
|
|
"gyroscope2": (True, 100., 100),
|
|
"accelerometer": (True, 104., 104),
|
|
"accelerometer2": (True, 100., 100),
|
|
"magnetometer": (True, 25., 25),
|
|
"lightSensor": (True, 100., 100),
|
|
"temperatureSensor": (True, 2., 200),
|
|
"temperatureSensor2": (True, 2., 200),
|
|
"gpsNMEA": (True, 9.),
|
|
"deviceState": (True, 2., 1),
|
|
"can": (True, 100., 1223), # decimation gives ~5 msgs in a full segment
|
|
"controlsState": (True, 100., 10),
|
|
"pandaStates": (True, 10., 1),
|
|
"peripheralState": (True, 2., 1),
|
|
"radarState": (True, 20., 5),
|
|
"roadEncodeIdx": (False, 20., 1),
|
|
"liveTracks": (True, 20.),
|
|
"sendcan": (True, 100., 139),
|
|
"logMessage": (True, 0.),
|
|
"errorLogMessage": (True, 0., 1),
|
|
"liveCalibration": (True, 4., 4),
|
|
"liveTorqueParameters": (True, 4., 1),
|
|
"androidLog": (True, 0.),
|
|
"carState": (True, 100., 10),
|
|
"carControl": (True, 100., 10),
|
|
"longitudinalPlan": (True, 20., 5),
|
|
"procLog": (True, 0.5, 15),
|
|
"gpsLocationExternal": (True, 10., 10),
|
|
"gpsLocation": (True, 1., 1),
|
|
"ubloxGnss": (True, 10.),
|
|
"qcomGnss": (True, 2.),
|
|
"gnssMeasurements": (True, 10., 10),
|
|
"clocks": (True, 0.1, 1),
|
|
"ubloxRaw": (True, 20.),
|
|
"liveLocationKalman": (True, 20., 5),
|
|
"liveParameters": (True, 20., 5),
|
|
"cameraOdometry": (True, 20., 5),
|
|
"thumbnail": (True, 0.2, 1),
|
|
"onroadEvents": (True, 1., 1),
|
|
"carParams": (True, 0.02, 1),
|
|
"roadCameraState": (True, 20., 20),
|
|
"driverCameraState": (True, 20., 20),
|
|
"driverEncodeIdx": (False, 20., 1),
|
|
"driverStateV2": (True, 20., 10),
|
|
"driverMonitoringState": (True, 20., 10),
|
|
"wideRoadEncodeIdx": (False, 20., 1),
|
|
"wideRoadCameraState": (True, 20., 20),
|
|
"modelV2": (True, 20., 40),
|
|
"managerState": (True, 2., 1),
|
|
"uploaderState": (True, 0., 1),
|
|
"navInstruction": (True, 1., 10),
|
|
"navRoute": (True, 0.),
|
|
"navThumbnail": (True, 0.),
|
|
"navModel": (True, 2., 4.),
|
|
"mapRenderState": (True, 2., 1.),
|
|
"uiPlan": (True, 20., 40.),
|
|
"qRoadEncodeIdx": (False, 20.),
|
|
"userFlag": (True, 0., 1),
|
|
"microphone": (True, 10., 10),
|
|
|
|
# FrogPilot
|
|
"frogpilotCarControl": (True, 100., 10),
|
|
"frogpilotDeviceState": (True, 2., 1),
|
|
"frogpilotNavigation": (True, 1., 10),
|
|
"frogpilotPlan": (True, 20., 5),
|
|
|
|
# debug
|
|
"uiDebug": (True, 0., 1),
|
|
"testJoystick": (True, 0.),
|
|
"roadEncodeData": (False, 20.),
|
|
"driverEncodeData": (False, 20.),
|
|
"wideRoadEncodeData": (False, 20.),
|
|
"qRoadEncodeData": (False, 20.),
|
|
"livestreamWideRoadEncodeIdx": (False, 20.),
|
|
"livestreamRoadEncodeIdx": (False, 20.),
|
|
"livestreamDriverEncodeIdx": (False, 20.),
|
|
"livestreamWideRoadEncodeData": (False, 20.),
|
|
"livestreamRoadEncodeData": (False, 20.),
|
|
"livestreamDriverEncodeData": (False, 20.),
|
|
"customReservedRawData0": (True, 0.),
|
|
"customReservedRawData1": (True, 0.),
|
|
"customReservedRawData2": (True, 0.),
|
|
}
|
|
SERVICE_LIST = {name: Service(new_port(idx), *vals) for
|
|
idx, (name, vals) in enumerate(services.items())}
|
|
|
|
|
|
def build_header():
|
|
h = ""
|
|
h += "/* THIS IS AN AUTOGENERATED FILE, PLEASE EDIT services.py */\n"
|
|
h += "#ifndef __SERVICES_H\n"
|
|
h += "#define __SERVICES_H\n"
|
|
|
|
h += "#include <map>\n"
|
|
h += "#include <string>\n"
|
|
|
|
h += "struct service { std::string name; int port; bool should_log; int frequency; int decimation; };\n"
|
|
h += "static std::map<std::string, service> services = {\n"
|
|
for k, v in SERVICE_LIST.items():
|
|
should_log = "true" if v.should_log else "false"
|
|
decimation = -1 if v.decimation is None else v.decimation
|
|
h += ' { "%s", {"%s", %d, %s, %d, %d}},\n' % \
|
|
(k, k, v.port, should_log, v.frequency, decimation)
|
|
h += "};\n"
|
|
|
|
h += "#endif\n"
|
|
return h
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(build_header())
|