Files
DS5Dongle-OLED-Edition-stea…/CMakeLists.txt
T
5425b21f00 feat(cpu): smoothed RP2350 CPU/Clock telemetry + 0xfc HID report
Add cpu_temp_raw_smoothed() (cmd.cpp/cmd.h): 256-sample average over a
slow EMA (alpha=0.15) so the RP2350 on-die temperature converges to the
true value instead of chasing per-sample 12-bit ADC noise (~1 LSB =
0.47 C). Single source of truth, ADC initialised in one place.

Also export CPU/Clock telemetry on HID feature report 0xfc (set_khz,
cached real_khz, vreg code, ADC ch4 raw). The handler is dormant: live
read over WebHID is not feasible (Chrome requires the report declared
in the HID descriptor, and declaring the OLED Edition vendor reports
breaks DualSense enumeration on Windows). It is harmless and left for a
possible future non-WebHID consumer. Link hardware_adc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 07:31:13 -06:00

187 lines
5.1 KiB
CMake

# Generated Cmake Pico project file
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
if (WIN32)
set(USERHOME $ENV{USERPROFILE})
else ()
set(USERHOME $ENV{HOME})
endif ()
set(sdkVersion 2.2.0)
set(toolchainVersion 14_2_Rel1)
set(picotoolVersion 2.2.0-a4)
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
if (EXISTS ${picoVscode})
include(${picoVscode})
endif ()
# ====================================================================================
if (PICO_W_BUILD)
set(PICO_BOARD pico_w CACHE STRING "Board type")
set(PICO_RP2350 OFF CACHE BOOL "Not using RP2350")
else ()
set(PICO_BOARD pico2_w CACHE STRING "Board type")
endif ()
#set(PICO_CYW43_SUPPORTED 1)
#set(PICO_CYW43_ARCH_THREADSAFE_BACKGROUND 1)
option(ENABLE_SERIAL "Enable USB CDC serial printf output" OFF)
if (ENABLE_SERIAL)
set(ENABLE_SERIAL_VALUE 1)
else ()
set(ENABLE_SERIAL_VALUE 0)
endif ()
option(ENABLE_VERBOSE "Enable Log Verbose" OFF)
if(ENABLE_VERBOSE)
set(ENABLE_VERBOSE_VALUE 1)
else()
set(ENABLE_VERBOSE_VALUE 0)
endif ()
option(ENABLE_BATT_LED "Blink Pico LED when DualSense battery is low (<=10%)" ON)
if (ENABLE_BATT_LED)
set(ENABLE_BATT_LED_VALUE 1)
else ()
set(ENABLE_BATT_LED_VALUE 0)
endif ()
option(DISABLE_SPEAKER_PROC "Disable Speaker in controller" OFF)
if (DISABLE_SPEAKER_PROC)
set(DISABLE_SPEAKER_PROC_VALUE 1)
else ()
set(DISABLE_SPEAKER_PROC_VALUE 0)
endif ()
option(PICO_W_BUILD "Build for Rasberry Pi Pico W, audio is missing" OFF)
if (PICO_W_BUILD)
set(CYW43_PIO_CLOCK_DIV_VALUE 3)
set(SYS_CLOCK_KHZ_VALUE 200000)
set(DISABLE_SPEAKER_PROC_VALUE 1)
else ()
set(CYW43_PIO_CLOCK_DIV_VALUE 5)
set(SYS_CLOCK_KHZ_VALUE 320000)
endif ()
# Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake)
project(ds5-bridge C CXX ASM)
# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()
# Add executable. Default name is the project name, version 0.1
add_executable(ds5-bridge
src/usb_descriptors.cpp
src/main.cpp
src/usb.cpp
src/audio.cpp
src/bt.cpp
src/config.cpp
src/cmd.cpp
src/state_mgr.cpp
src/oled.cpp
src/slots.cpp
)
if (ENABLE_BATT_LED)
target_sources(ds5-bridge PRIVATE src/battery_led.cpp)
endif ()
# Cockos WDLResampler
add_library(wdl_resampler STATIC
lib/WDL/WDL/resample.cpp
)
target_include_directories(wdl_resampler PUBLIC
lib/WDL/WDL
)
# Opus
#set(OPUS_FIXED_POINT ON)
add_subdirectory(lib/opus)
target_compile_options(wdl_resampler PRIVATE -fsigned-char)
target_compile_options(ds5-bridge PRIVATE -fsigned-char)
target_compile_definitions(wdl_resampler PRIVATE
WDL_RESAMPLE_TYPE=float
)
target_compile_definitions(ds5-bridge PRIVATE
CYW43_LWIP=0
ENABLE_SERIAL=${ENABLE_SERIAL_VALUE}
PICO_FLASH_ASSUME_CORE1_SAFE=1
WDL_RESAMPLE_TYPE=float
CYW43_PIO_CLOCK_DIV_INT=${CYW43_PIO_CLOCK_DIV_VALUE}
PICO_STDIO_USB_USE_DEFAULT_DESCRIPTORS=0
PICO_STDIO_USB_ENABLE_RESET_VIA_BAUD_RATE=0
PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0
ENABLE_VERBOSE=${ENABLE_VERBOSE_VALUE}
ENABLE_BATT_LED=${ENABLE_BATT_LED_VALUE}
SYS_CLOCK_KHZ=${SYS_CLOCK_KHZ_VALUE}
DISABLE_SPEAKER_PROC=${DISABLE_SPEAKER_PROC_VALUE}
)
option(ENABLE_WAKE_HID "Wake the Windows host on PS-button press" OFF)
if(ENABLE_WAKE_HID)
target_compile_definitions(ds5-bridge PRIVATE
ENABLE_WAKE_HID
)
target_sources(ds5-bridge PRIVATE
src/wake.cpp
)
endif()
option(WAKE_DEBUG "Print wake-FSM transitions to UART (developer use)" OFF)
if(WAKE_DEBUG)
target_compile_definitions(ds5-bridge PRIVATE
WAKE_DEBUG
)
endif()
set(VERSION "dev" CACHE STRING "Program version string")
set_target_properties(ds5-bridge PROPERTIES OUTPUT_NAME "ds5-bridge-oled")
pico_set_program_name(ds5-bridge "ds5-bridge-oled")
pico_set_program_version(ds5-bridge "${VERSION}")
# Modify the below lines to enable/disable output over UART/USB
pico_enable_stdio_uart(ds5-bridge 1)
pico_enable_stdio_usb(ds5-bridge ${ENABLE_SERIAL_VALUE})
# Add the standard include files to the build
#target_include_directories(ds5-bridge PRIVATE
# ${CMAKE_CURRENT_LIST_DIR}
#)
target_include_directories(${PROJECT_NAME} PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Add any user requested libraries
target_link_libraries(ds5-bridge
pico_stdlib
pico_multicore
hardware_watchdog
hardware_timer
hardware_flash
hardware_spi
hardware_adc
pico_btstack_classic
# pico_cyw43_arch_threadsafe_background
pico_cyw43_arch_poll
pico_btstack_cyw43
tinyusb_device
tinyusb_board
wdl_resampler
opus
)
pico_add_extra_outputs(ds5-bridge)