- Seat Service Example
This represents the example seat control service. More elaborate or completely differing implementations are target of particular projects providing a vehicle abstraction layer.
For aarch64 hosts or for quickly testing a pull request it is easier to use Github codespaces.
- Create a codespace from here
- Choose:
Configure and create codespace - Choose a branch to run on. If you just see
mainand need to test a PR, you can selectFiles changedin the PR, thenReview in codespace - Wait several minutes for building codespace devcontainer.
- If everything is OK, you'll see several
vscodetasks running sequentially (e.grun-<component>) run-seatservicewill build the Seat Service from sources using build-release.sh- If you need to start another
vscodetask / or stop them all, useF1,Tasks: Run Task, select desired task - There are 2
integration-testtasks for testing local versions or released containers
-
Install and configure (if needed) local authentication proxy e.g. CNTLM or Px
-
Install and configure docker: Get Docker
-
Build base development docker. Go to the top-level of the repo
cd .. docker build -t oci_kuksa-val-services-ci:latest -f tools/Dockerfile . # NOTE: If you need to cross compile for different arch: DOCKER_BUILDKIT=1 docker buildx build --platform linux/arm64 -t oci_kuksa-val-services-ci:arm64 -f tools/Dockerfile --load .
NOTE: Building Seat Service on aarch64 host is not supported at the moment.
You can use dedicated build docker script docker-build.sh if host environment matches target (Ubuntu 20.04):
# Linux: [Ubuntu 20.04]
./seat_service/docker-build.sh
USAGE: ./docker-build.sh [OPTIONS] TARGETS
Standalone build helper for seat_service docker image.
OPTIONS:
-l, --local local docker import (does not export tar)
-v, --verbose enable plain docker output and disable cache
--help show help
TARGETS:
x86_64|amd64, aarch64|amd64 Target arch to build for, if not set - defaults to multiarchIf you are using different distro / version, you may use the devcontainer to compile seat service binaries.
From the checked-out git folder, to enter a shell execute:
# Linux: [x86_64, any version]
docker run --rm -it -v $(pwd):/workspace oci_kuksa-val-services-ci:latest <build-command>
# Windows (cmd)
docker run --rm -it -v %cd%:/workspace oci_kuksa-val-services-ci:latest <build-command>
# Windows (Powershell)
docker run --rm -it -v ${PWD}:/workspace oci_kuksa-val-services-ci:latest <build-command>Building the seat service via dev container must be triggered from the project root folder (seat service is referencing kuksa_data_broker/proto), e.g.:
# Linux
# Cleanup any build artifacts
rm -rf seat_service/bin_vservice-seat_*.tar.gz seat_service/target/
# Generate seat_service/bin_vservice-seat_*.tar.gz files for packing seat service container
docker run --rm -it -v $(pwd):/workspace oci_kuksa-val-services-ci:latest /bin/bash -c \
"cd seat_service/; ./build-release.sh --pack"
# Check if release package is build
ls -la seat_service/bin_vservice-seat_*.tar.gzBuild the container using pre-built binaries: seat_service/bin_vservice-seat_*.tar.gz
# Linux
docker build -t seat_service -f seat_service/Dockerfile .It is also possible to open the repo as a remote container in VScode using the approach Developing inside a Container. All needed tools for VScode are automatically installed in this case
- Install VScode extension with ID
ms-vscode-remote.remote-containers - Hit
F1and typeRemote-Containers: Reopen in Container
./seat_service can_if_name [listen_address [listen_port]]| cli parameter | default value | description |
|---|---|---|
| can_if_name | - | Use socketCAN device |
| listen_address | "localhost" |
Listen address for grpc calls |
| listen_port | 50051 |
Listen port for grpc calls |
| Environment variable | default value | description |
|---|---|---|
BROKER_ADDR |
"localhost:55555" |
Connect to databroker host:port |
VSS |
4 |
VSS compatibility mode [3, 4] |
DAPR_GRPC_PORT |
55555 |
Dapr mode: override databroker port replacing port value in $BROKER_ADDR |
VEHICLEDATABROKER_DAPR_APP_ID |
"vehicledatabroker" |
Dapr app id for databroker |
SEAT_DEBUG |
1 |
Seat Service debug: 0=ERR, 1=INFO, ... |
DBF_DEBUG |
1 |
DatabrokerFeeder debug: 0=ERR, 1=INFO, ... |
There is dedicated entry point script val_start.sh that runs seat service with additional Environment variable configuration:
| Environment variable | default value | description |
|---|---|---|
CAN |
"can0" |
Overrides can_if_name cli argument |
SERVICE_HOST |
"0.0.0.0" |
Overrides listen_address cli argument |
SERVICE_PORT |
50051 |
Overrides listen_port cli argument |
SC_RESET |
- | If != "0", executes ecu-reset script to calibrate seat motors |
NOTE: Check val_start.sh script comments for less-important Environment variables.
Further configuration of the seat controller see Seat Controller Documentation.
Seat Controller module handles SocketCAN messaging and provides Control Loop for moving a seat to desired position.
It also provides cansim module for simulating a HW Seat ECU even without vcan support (e.g. CI pipeline).
For more details about Seat Controller, Seat CAN Simulator and related tools, check SeatController README
-
Run Doxygen: doxygen is able to run with the following command from the main directory:
doxygen ./docs/doxygen/doxyfile
or using:
build-docu.sh
-
The output will be stored to
./docs/out. You can watch the documentation with open the following file in the browser:./docs/doxygen/out/html/index.html