feat: add DISABLE_SPEAKER_PROC build flag

This commit is contained in:
Antti Pohjola
2026-05-13 13:15:09 +03:00
parent 462ddcb4c7
commit 5e7da1779e
2 changed files with 61 additions and 3 deletions
+57 -2
View File
@@ -23,8 +23,13 @@ if (EXISTS ${picoVscode})
include(${picoVscode}) include(${picoVscode})
endif () endif ()
# ==================================================================================== # ====================================================================================
set(PICO_BOARD pico2_w CACHE STRING "Board type")
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_SUPPORTED 1)
#set(PICO_CYW43_ARCH_THREADSAFE_BACKGROUND 1) #set(PICO_CYW43_ARCH_THREADSAFE_BACKGROUND 1)
@@ -40,6 +45,31 @@ if(ENABLE_VERBOSE)
else() else()
set(ENABLE_VERBOSE_VALUE 0) set(ENABLE_VERBOSE_VALUE 0)
endif () 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(PICO_W_BUILD_VALUE 1)
set(CYW43_PIO_CLOCK_DIV_VALUE 3)
set(SYS_CLOCK_KHZ_VALUE 200000)
set(DISABLE_SPEAKER_PROC_VALUE 1)
else ()
set(PICO_W_BUILD_VALUE 0)
set(CYW43_PIO_CLOCK_DIV_VALUE 5)
set(SYS_CLOCK_KHZ_VALUE 320000)
endif ()
# Pull in Raspberry Pi Pico SDK (must be before project) # Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake) include(pico_sdk_import.cmake)
@@ -61,6 +91,10 @@ add_executable(ds5-bridge
src/cmd.cpp src/cmd.cpp
) )
if (ENABLE_BATT_LED)
target_sources(ds5-bridge PRIVATE src/battery_led.cpp)
endif ()
# Cockos WDLResampler # Cockos WDLResampler
add_library(wdl_resampler STATIC add_library(wdl_resampler STATIC
lib/WDL/WDL/resample.cpp lib/WDL/WDL/resample.cpp
@@ -83,13 +117,34 @@ target_compile_definitions(ds5-bridge PRIVATE
ENABLE_SERIAL=${ENABLE_SERIAL_VALUE} ENABLE_SERIAL=${ENABLE_SERIAL_VALUE}
PICO_FLASH_ASSUME_CORE1_SAFE=1 PICO_FLASH_ASSUME_CORE1_SAFE=1
WDL_RESAMPLE_TYPE=float WDL_RESAMPLE_TYPE=float
CYW43_PIO_CLOCK_DIV_INT=5 CYW43_PIO_CLOCK_DIV_INT=${CYW43_PIO_CLOCK_DIV_VALUE}
PICO_STDIO_USB_USE_DEFAULT_DESCRIPTORS=0 PICO_STDIO_USB_USE_DEFAULT_DESCRIPTORS=0
PICO_STDIO_USB_ENABLE_RESET_VIA_BAUD_RATE=0 PICO_STDIO_USB_ENABLE_RESET_VIA_BAUD_RATE=0
PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0 PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0
ENABLE_VERBOSE=${ENABLE_VERBOSE_VALUE} ENABLE_VERBOSE=${ENABLE_VERBOSE_VALUE}
ENABLE_BATT_LED=${ENABLE_BATT_LED_VALUE}
PICO_W_BUILD=${PICO_W_BUILD_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()
pico_set_program_name(ds5-bridge "ds5-bridge") pico_set_program_name(ds5-bridge "ds5-bridge")
pico_set_program_version(ds5-bridge "0.5.3") pico_set_program_version(ds5-bridge "0.5.3")
+4 -1
View File
@@ -118,6 +118,7 @@ void audio_loop() {
pkt[11] = 0x12 | 0 << 6 | 1 << 7; pkt[11] = 0x12 | 0 << 6 | 1 << 7;
pkt[12] = SAMPLE_SIZE; pkt[12] = SAMPLE_SIZE;
memcpy(pkt + 13, haptic_buf, SAMPLE_SIZE); memcpy(pkt + 13, haptic_buf, SAMPLE_SIZE);
#if !DISABLE_SPEAKER_PROC
pkt[77] = (plug_headset ? 0x16 : 0x13) | 0 << 6 | 1 << 7; // Speaker: 0x13 pkt[77] = (plug_headset ? 0x16 : 0x13) | 0 << 6 | 1 << 7; // Speaker: 0x13
// L Headset Mono: 0x14 // L Headset Mono: 0x14
// L Headset R Speaker: 0x15 // L Headset R Speaker: 0x15
@@ -126,7 +127,7 @@ void audio_loop() {
critical_section_enter_blocking(&opus_cs); critical_section_enter_blocking(&opus_cs);
memcpy(pkt + 79, opus_buf, 200); memcpy(pkt + 79, opus_buf, 200);
critical_section_exit(&opus_cs); critical_section_exit(&opus_cs);
#endif
bt_write(pkt, sizeof(pkt), true); bt_write(pkt, sizeof(pkt), true);
haptic_buf_pos = 0; haptic_buf_pos = 0;
} }
@@ -137,9 +138,11 @@ void audio_init() {
resampler.SetRates(48000, 3000); resampler.SetRates(48000, 3000);
resampler.SetFeedMode(true); resampler.SetFeedMode(true);
resampler.Prealloc(2, 24, 6); resampler.Prealloc(2, 24, 6);
#if !DISABLE_SPEAKER_PROC
queue_init(&audio_fifo, sizeof(audio_raw_element), 2); queue_init(&audio_fifo, sizeof(audio_raw_element), 2);
critical_section_init(&opus_cs); critical_section_init(&opus_cs);
multicore_launch_core1_with_stack(core1_entry, audio_core1_stack, sizeof(audio_core1_stack)); multicore_launch_core1_with_stack(core1_entry, audio_core1_stack, sizeof(audio_core1_stack));
#endif
} }
static OpusEncoder *encoder; static OpusEncoder *encoder;