Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# Copyright (c) 2025, Telink
# Copyright (c) 2025-2026, Telink
#
# SPDX-License-Identifier: Apache-2.0
#
Expand All @@ -9,11 +9,11 @@ if(CONFIG_HAS_TELINK_DRIVERS)
# SOC configuration for Telink RISC-V series
string(REGEX REPLACE "^telink_" "" SOC_FAMILY ${CONFIG_SOC_SERIES})

if(CONFIG_SOC_RISCV_TELINK_B91 OR CONFIG_SOC_RISCV_TELINK_B92 OR
CONFIG_SOC_RISCV_TELINK_TL321X)
if(CONFIG_SOC_RISCV_TELINK_B91 OR CONFIG_SOC_RISCV_TELINK_B92)
add_subdirectory(hal_v1)
elseif(CONFIG_SOC_RISCV_TELINK_TL322X OR CONFIG_SOC_RISCV_TELINK_TL323X OR
CONFIG_SOC_RISCV_TELINK_TL721X)
elseif(CONFIG_SOC_RISCV_TELINK_TL321X OR CONFIG_SOC_RISCV_TELINK_TL322X OR
CONFIG_SOC_RISCV_TELINK_TL323X OR CONFIG_SOC_RISCV_TELINK_TL721X OR
CONFIG_SOC_RISCV_TELINK_TL521X OR CONFIG_SOC_RISCV_TELINK_TL523X)
add_subdirectory(hal_v2)
else()
message(FATAL_ERROR "Not supported SOC")
Expand Down
8 changes: 5 additions & 3 deletions Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@

config HAL_TELINK_V1
bool "Telink HAL V1"
depends on SOC_RISCV_TELINK_B91 || SOC_RISCV_TELINK_B92 || SOC_RISCV_TELINK_TL321X
depends on SOC_RISCV_TELINK_B91 || SOC_RISCV_TELINK_B92
default y

config HAL_TELINK_V2
bool "Telink HAL V2"
depends on SOC_RISCV_TELINK_TL322X || SOC_RISCV_TELINK_TL323X || SOC_RISCV_TELINK_TL721X
depends on SOC_RISCV_TELINK_TL321X || SOC_RISCV_TELINK_TL322X || \
SOC_RISCV_TELINK_TL323X || SOC_RISCV_TELINK_TL721X || \
SOC_RISCV_TELINK_TL521X || SOC_RISCV_TELINK_TL523X
default y

if HAL_TELINK_V1
Expand All @@ -17,4 +19,4 @@ endif

if HAL_TELINK_V2
rsource "hal_v2/Kconfig"
endif
endif
39 changes: 31 additions & 8 deletions hal_v2/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# Copyright (c) 2025, Telink
# Copyright (c) 2025-2026, Telink
#
# SPDX-License-Identifier: Apache-2.0
#
Expand All @@ -23,11 +23,28 @@ elseif(CONFIG_SOC_RISCV_TELINK_TL323X)
set(SOC "TL323X")
set(LIB_SOC_NAME "tl323x")
message(STATUS "Configuring for SOC: TELINK_TL323X")
elseif(CONFIG_SOC_RISCV_TELINK_TL521X)
set(SOC "TL521X")
set(LIB_SOC_NAME "tl521x")
message(STATUS "Configuring for SOC: TELINK_TL521X")
elseif(CONFIG_SOC_RISCV_TELINK_TL523X)
set(SOC "TL523X")
set(LIB_SOC_NAME "tl523x")
message(STATUS "Configuring for SOC: TELINK_TL523X")
else()
message(FATAL_ERROR "Not supported SOC")
endif()

set(CONFIG_COMPILE_SDK 1)
# Default to precompiled BLE SDK unless Kconfig disables it.
# A disabled bool Kconfig option is undefined in CMake, so use
# CONFIG_SOC_SERIES as a sentinel to detect that Kconfig has run.
if(NOT DEFINED CONFIG_COMPILE_SDK)
if(DEFINED CONFIG_SOC_SERIES)
set(CONFIG_COMPILE_SDK 0) # Kconfig processed; COMPILE_SDK explicitly disabled.
else()
set(CONFIG_COMPILE_SDK 1) # Kconfig not loaded yet -> default to precompiled SDK.
endif()
endif()

if(CONFIG_COMPILE_SDK)
get_filename_component(
Expand All @@ -51,19 +68,25 @@ if(CONFIG_COMPILE_SDK)
else()
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/zephyr/${LIB_SOC_NAME}/lib_zephyr_${LIB_SOC_NAME}_single_core.a)
endif()
elseif(CONFIG_SOC_RISCV_TELINK_TL323X OR CONFIG_SOC_RISCV_TELINK_TL721X)
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/zephyr/${LIB_SOC_NAME}/lib_zephyr_${LIB_SOC_NAME}.a)
elseif(CONFIG_SOC_RISCV_TELINK_TL321X)
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/lib_zephyr_${LIB_SOC_NAME}.a)
elseif(CONFIG_SOC_RISCV_TELINK_TL321X OR CONFIG_SOC_RISCV_TELINK_TL323X OR CONFIG_SOC_RISCV_TELINK_TL721X OR CONFIG_SOC_RISCV_TELINK_TL521X OR CONFIG_SOC_RISCV_TELINK_TL523X)
if(CONFIG_IEEE802154_TLX_BLE_COEXIST OR CONFIG_BT_TLX_CHANNEL_SOUNDING)
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/zephyr/${LIB_SOC_NAME}/lib_zephyr_${LIB_SOC_NAME}_concurrent.a)
else()
if(CONFIG_COMPILE_TL_LIB_GENERAL)
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/zephyr/${LIB_SOC_NAME}/lib_zephyr_${LIB_SOC_NAME}_general.a)
else()
zephyr_link_libraries(${TELINK_BLE_SDK_DIR}/tl_ble_sdk/proj_lib/zephyr/${LIB_SOC_NAME}/lib_zephyr_${LIB_SOC_NAME}.a)
endif()
endif()
endif()
else()
add_subdirectory(tl_ble_src/tools)
endif()

add_subdirectory(wrapper)

if(CONFIG_MBEDTLS)
add_subdirectory(wrapper/crypto/mbedtls)
if (CONFIG_MBEDTLS OR CONFIG_TINYCRYPT OR CONFIG_BOOT_USE_MBEDTLS OR CONFIG_BOOT_USE_TINYCRYPT)
add_subdirectory(wrapper/crypto)
endif()

if(CONFIG_PM)
Expand Down
160 changes: 143 additions & 17 deletions hal_v2/fetch_sdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,159 @@
#
# Downloading Telink BLE SDK.
#
# Usage: ./fetch_sdk.sh
# Usage: ./fetch_sdk.sh [repo_url] [target]
# Copyright (c) 2026 Telink Semiconductor
# SPDX-License-Identifier: Apache-2.0

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)

REPO_URL="https://github.com/telink-semi/tl_ble_sdk.git"
TARGET_COMMIT="bf886feb6cb78dac40b4fc34c8cc1cec1316bf14"
DEST_DIR="$SCRIPT_DIR/tl_ble_sdk"
# default values
DEFAULT_REPO_URL="https://github.com/telink-semi/tl_ble_sdk_zephyr.git"
DEFAULT_TARGET="9135c8eddb7caf72256c911b0ef113fb4037b1b4"

echo "dest dir: $DEST_DIR"
# parse parameters
REPO_URL="${1:-$DEFAULT_REPO_URL}"
TARGET="${2:-$DEFAULT_TARGET}"
# Place the SDK alongside the hal_telink module (modules/hal/telink_ble_sdk),
# matching the west manifest layout so both methods are interchangeable.
DEST_DIR="$SCRIPT_DIR/../../telink_ble_sdk"

if [ ! -d "$DEST_DIR/.git" ]; then
echo "cloning repo..."
git clone $REPO_URL "$DEST_DIR"
else
echo "repo already exists, updating..."
# show help message
show_help() {
echo "Usage: $0 [repo_url] [target]"
echo ""
echo "Parameters:"
echo " repo_url - Git repository URL (default: $DEFAULT_REPO_URL)"
echo " target - Commit hash, branch name, or tag (default: $DEFAULT_TARGET)"
echo ""
echo "Examples:"
echo " $0 # Use default values"
echo " $0 https://github.com/xxx/sdk.git main # Clone main branch"
echo " $0 https://github.com/xxx/sdk.git v1.2.3 # Clone tag v1.2.3"
echo " $0 https://github.com/xxx/sdk.git abc123 # Clone specific commit"
echo ""
}

# check parameters
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
exit 0
fi

cd "$DEST_DIR" || exit
echo "=========================================="
echo "Fetching Telink BLE SDK"
echo "=========================================="
echo "Repository: $REPO_URL"
echo "Target: $TARGET"
echo "Destination: $DEST_DIR"
echo "=========================================="

# check if target repo exists
if [ -d "$DEST_DIR/.git" ]; then
echo "Repository already exists, updating..."
cd "$DEST_DIR" || exit 1

# acquire latest data
git fetch --all --tags --prune

# check if target commit exists in current remote
TARGET_EXISTS=false

if git rev-parse --quiet --verify "$TARGET^{commit}" >/dev/null 2>&1; then
TARGET_EXISTS=true
else
# Try to fetch from other remotes
echo "Target not found in current remote, trying to add alternative remote..."

# Check if we need to switch to different repository
CURRENT_REMOTE=$(git remote get-url origin 2>/dev/null)
if [ "$CURRENT_REMOTE" != "$REPO_URL" ]; then
echo "Current remote: $CURRENT_REMOTE"
echo "Target remote: $REPO_URL"
echo "Switching remote to target repository..."

# Add new remote
git remote add target_repo "$REPO_URL" 2>/dev/null || git remote set-url target_repo "$REPO_URL"

# Fetch from target remote
git fetch target_repo --tags --prune

echo "fetching latest data and checking out Commit: $TARGET_COMMIT"
git fetch origin
git checkout $TARGET_COMMIT
# Check if target exists in target remote
if git rev-parse --quiet --verify "target_repo/$TARGET^{commit}" >/dev/null 2>&1; then
TARGET_EXISTS=true
# Create a local branch tracking the target remote
git checkout -b "target_$TARGET" "target_repo/$TARGET" 2>/dev/null || git checkout "$TARGET"
fi
fi
fi

CURRENT_COMMIT=$(git rev-parse HEAD)
echo "------------------------------------------"
CURRENT_COMMIT=$(git rev-parse HEAD)

# try to checkout target as commit, branch, or tag
if [ "$TARGET_EXISTS" = true ] || git rev-parse --quiet --verify "$TARGET^{commit}" >/dev/null 2>&1; then
# TARGET is valid commit hash
if [ "$CURRENT_COMMIT" = "$TARGET" ]; then
echo "Already at target commit: $TARGET"
exit 0
fi
git checkout "$TARGET"
elif git show-ref --quiet --verify "refs/heads/$TARGET"; then
# TARGET is local branch
echo "Switching to branch: $TARGET"
git checkout "$TARGET"
git pull origin "$TARGET"
elif git ls-remote --exit-code --heads origin "$TARGET" >/dev/null 2>&1; then
# TARGET is remote branch
echo "Switching to remote branch: $TARGET"
git checkout -B "$TARGET" "origin/$TARGET"
elif git ls-remote --exit-code --tags origin "$TARGET" >/dev/null 2>&1; then
# TARGET is tag
echo "Switching to tag: $TARGET"
git checkout "tags/$TARGET" -b "tag-$TARGET"
elif git ls-remote --exit-code --heads target_repo "$TARGET" >/dev/null 2>&1; then
# TARGET is branch in target remote
echo "Switching to branch from target remote: $TARGET"
git checkout -B "$TARGET" "target_repo/$TARGET"
elif git ls-remote --exit-code --tags target_repo "$TARGET" >/dev/null 2>&1; then
# TARGET is tag in target remote
echo "Switching to tag from target remote: $TARGET"
git checkout "tags/$TARGET" -b "tag-$TARGET"
else
echo "Error: Cannot find target '$TARGET'"
echo "Available commits in current repository:"
git log --oneline -10
exit 1
fi
else
echo "Cloning repository..."
git clone "$REPO_URL" "$DEST_DIR"
cd "$DEST_DIR" || exit 1

# switch to specific target
if git rev-parse --quiet --verify "$TARGET^{commit}" >/dev/null 2>&1; then
git checkout "$TARGET"
elif git ls-remote --exit-code origin "$TARGET" >/dev/null 2>&1; then
git checkout -B "$TARGET" "origin/$TARGET"
elif git ls-remote --exit-code --tags origin "$TARGET" >/dev/null 2>&1; then
git checkout "tags/$TARGET" -b "tag-$TARGET"
else
echo "Warning: Target '$TARGET' not found, using default branch"
fi
fi

# show final status
FINAL_COMMIT=$(git rev-parse HEAD)
FINAL_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "detached HEAD")

echo "=========================================="
echo "Sync complete!"
echo "Current directory: $(pwd)"
echo "Current Commit: $CURRENT_COMMIT"
echo "Current branch: $FINAL_BRANCH"
echo "Current commit: $FINAL_COMMIT"
echo "=========================================="

# show recent commits
echo "Recent commits:"
git log --oneline -3
echo "=========================================="

Loading