1 - Short description
Modify the existing Qt Dashboard (myqtapp) to support dual data ingestion modes: direct CAN Bus (via SocketCAN) and KUKSA Databroker (via gRPC). The application must determine which mode to use at runtime via command-line arguments. This involves linking against native Google gRPC libraries and implementing a threaded KuksaReader class.
2 - Tasks
4 - Implementation Notes
- Architecture: We are using native
libgrpc++ to ensure Apache 2.0 compliance and better compatibility with AGL layers compared to QtGrpc.
- Threading: The gRPC
Read() loop is blocking, so the KuksaReader must be moved to a QThread to keep the GUI responsive.
- Verification: Latency testing logs are included to verify performance differences between direct CAN and KUKSA paths.
1 - Short description
Modify the existing Qt Dashboard (
myqtapp) to support dual data ingestion modes: direct CAN Bus (via SocketCAN) and KUKSA Databroker (via gRPC). The application must determine which mode to use at runtime via command-line arguments. This involves linking against native Google gRPC libraries and implementing a threadedKuksaReaderclass.2 - Tasks
Update
CMakeLists.txtto find and linkgRPC::grpc++,Protobuf::protobuf, andabsllibraries.Configure
CMaketo auto-generate C++ source code fromval.protoandtypes.protousingprotoc.Create
KuksaReaderclass (inheritingQObject) to handle gRPC communication.Implement the gRPC
Subscribeloop in a worker thread to prevent blocking the Qt UI.Implement
QCommandLineParserinmain.cppto handle the--kuksa/-kflag.Wire up
VehicleDataslots to eitherCANReaderorKuksaReadersignals based on the runtime flag.Linking: Application starts on the target without "Symbol Lookup Error" (verifying
abslandgrpclinking).Default Mode: Running the app without arguments (
./myqtapp) starts in CAN Mode (opensvcan0socket).KUKSA Mode: Running the app with
./myqtapp --kuksastarts in KUKSA Mode and attempts to connect tolocalhost:55555.Data Flow: In KUKSA mode, incoming gRPC speed updates successfully trigger the speedometer animation in QML.
4 - Implementation Notes
libgrpc++to ensure Apache 2.0 compliance and better compatibility with AGL layers compared toQtGrpc.Read()loop is blocking, so theKuksaReadermust be moved to aQThreadto keep the GUI responsive.