Building cpc-spinel-proxy Locally#
cpc-spinel-proxy is a host daemon that bridges a Unix-domain Spinel socket (as used by the default Android Thread HAL) to a CPCd instance on the Multi-PAN 802.15.4 endpoint. It was added in SiSDK 2026.6 for Android 15 multiprotocol integrations where ot-daemon does not expose multi-PAN Spinel IIDs directly.
For how this proxy fits into the overall Android datapath, see Android 15.
Supported platforms#
cpc-spinel-proxy is generated for host targets using the OpenThread host ARM64 (Android 15 - NDK r27d) platform component. The resulting binary is intended for integration into an Android 15 vendor image.
Other host platform components may be added in future SDK releases; use the platform component that matches your target OS and toolchain.
Prerequisites#
Before building cpc-spinel-proxy:
Build and install CPCd and libcpc for the same target environment, or stage compatible
libcpc.soandsl_cpc.hfor the NDK link step. See Building CPCd Locally.Install NDK r27d (API 35) when cross-compiling for Android outside AOSP. Link to NDK download.
Building in Simplicity Studio#
Create a new project.
Select Custom Board device to indicate a host target.
Select Makefile IDE as the toolchain.
Select Copy Contents if you will build on a separate build host.
Configure the project with a supported host platform component as specified in the Supported platforms section.
Build from the generated project directory:
make -f cpc-spinel-proxy.Makefile
On success, the binary is at ./build/debug/cpc-spinel-proxy.
When cross-compiling for Android with the NDK, set CC, CXX, and LD to the NDK aarch64-linux-android* clang tools and ensure the Makefile links against the staged libcpc.so and include path for sl_cpc.h.
Runtime configuration#
Typical invocation for the Android multiprotocol reference (socket path, CPC instance, endpoint, and IID translation):
cpc-spinel-proxy -s /data/vendor/hardware/spinel-proxy.sock \ -i cpcd_0 -e 12 --iid 2 --iid-list 0
Option | Purpose |
|---|---|
| Unix socket listened on for the Thread HAL ( |
| CPCd instance name ( |
| CPC endpoint for 802.15.4 Spinel on your secondary image (endpoint 12 for 15.4) |
| Spinel IID used on the CPC side for Thread (reference: |
| Spinel IID presented on the HAL socket side (default |
| Additional CPC-side IIDs forwarded to the HAL (include |
The proxy accepts one HAL client at a time. If CPCd resets, the HAL socket session is dropped and the HAL service must reconnect.
Integrating into an Android image#
After building the binary:
Stage the ELF (and
libc++_shared.soif dynamically linked) under your vendor tree.Wrap with
cc_prebuilt_binaryinAndroid.bp, or install via your product prebuilt workflow.Add an
init.rcservice that starts aftercpcdand beforevendor.threadnetwork_hal.Add vendor SELinux policy for the proxy domain, registering the socket with mode 0660.
See Android 15 — Integration for AOSP packaging strategies and startup order.