A SOME/IP-based firmware update system using CommonAPI. The server monitors a file and automatically notifies clients when it changes. Clients download the file with checksum verification.
┌─────────────────┐ SOME/IP Event ┌─────────────────┐
│ PC (Server) │ ──────────────────────────────▶│ RPi (Client) │
│ 192.168.1.1 │ FirmwareAvailable │ 192.168.1.2 │
│ │◀─────────────────────────────── │ │
│ firmware.bin │ RequestDownload/Data │ received_fw.bin │
└─────────────────┘ └─────────────────┘
# Build
mkdir build && cd build && cmake .. && make
# Run
VSOMEIP_APPLICATION_NAME=routing_manager VSOMEIP_CONFIGURATION=config/vsomeip-server.json ./build/SomeIPBlServercd ~/someip-client
LD_LIBRARY_PATH=./lib VSOMEIP_CONFIGURATION=config/vsomeip-client.json ./bin/SomeIPBlClient- crosstool-NG with
aarch64-rpi3-linux-gnutoolchain at/home/abdo/x-tools/ - ARM sysroot with dependencies at
/home/abdo/arm-sysroot/
mkdir build-arm && cd build-arm
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=../aarch64-rpi3-toolchain.cmake \
-DCMAKE_PREFIX_PATH=/home/abdo/arm-sysroot \
-DCommonAPI_DIR=/home/abdo/arm-sysroot/lib/cmake/CommonAPI-3.2.0 \
-DCommonAPI-SomeIP_DIR=/home/abdo/arm-sysroot/lib/cmake/CommonAPI-SomeIP-3.2.0 \
-Dvsomeip3_DIR=/home/abdo/arm-sysroot/lib/cmake/vsomeip3
makescp -r rpi-package/ pi@192.168.1.2:~/someip-client/# PC
sudo ip addr add 192.168.1.1/24 dev enp8s0
sudo ip route add 224.0.0.0/4 dev enp8s0
# RPi
sudo ip addr add 192.168.1.2/24 dev eth0
sudo ip route add 224.0.0.0/4 dev eth0| File | Setting | Description |
|---|---|---|
config/vsomeip-server.json |
unicast |
Server IP address |
config/vsomeip-client.json |
unicast |
Client IP address |
src/server.cpp |
fileToTransfer |
File path to monitor |
aarch64-rpi3-toolchain.cmake |
TOOLCHAIN_PATH |
Your crosstool-NG path |
├── src/
│ ├── server.cpp # Server with file monitoring
│ ├── client.cpp # Client with event subscription
│ └── ServerStubImpl.hpp # Service implementation
├── fidl/
│ ├── someipBL.fidl # Interface definition
│ ├── someipBL.fdepl # SOME/IP deployment
│ └── src-gen/ # Generated code
├── config/
│ ├── vsomeip-server.json
│ └── vsomeip-client.json
└── aarch64-rpi3-toolchain.cmake
- Server monitors
firmware.binfor changes (every 1 second) - When file changes, server fires
FirmwareAvailableevent with file size and checksum - Client receives event and calls
RequestDownload() - Client retrieves data in 256-byte chunks via
RequestData() - Client verifies checksum and saves to
received_firmware.bin