ipro_le_audio_headset¶
LE Audio ユニキャストヘッドセット:BAP unicast server、PACS、ASCS、CAP、CSIP、VCP。LC3 をデコードして DAC に出力します。チュートリアル:LE Audio 入門
| 項目 | 内容 |
|---|---|
| ソースコード | apps/bluetooth/le_audio/ipro_le_audio_headset |
| ボードと設定 | Reef(defconfig_reef:DAC 出力をヘッドセットジャックとスピーカーへ)、.config、DAC.config、UAC.config は IPRO7 EVB 用 |
| コンソール | UART 115200 |
| ビルド | Reef:make -C apps/bluetooth/le_audio/ipro_le_audio_headset DEFCONFIG=defconfig_reef |
Reef で動かす¶
-
ビルド
イメージは
apps/bluetooth/le_audio/ipro_le_audio_headset/build_reef/build_out/ipro_le_audio_headset_IPRO7.binです。 -
書き込み:ダウンロードモードに入り、IntelProCube のディレクトリで次を実行します。
./ipro_iot_tool_macos --chipname ipro7 --chip-variant IPRO7AI \ --port /dev/cu.usbserial-XXXX --baudrate 921600 \ --firmware <SDK>/apps/bluetooth/le_audio/ipro_le_audio_headset/build_reef/build_out/ipro_le_audio_headset_IPRO7.bin[All Success]を確認してから SW2 を押します。 -
実行:115200 baud でコンソールを開きます。ボードは
IPRO-LE-Audioとしてアドバタイズします。LE Audio 対応のスマートフォンからペアリングします(数値比較はボード側で自動的に承認されます)。コンソールでleaudio_statusと入力すると、接続とストリームの状態が表示されます。SW3、SW4、SW5 は VCP による音量ダウン、音量アップ、ミュートです。
本リリースでの状態
アプリケーションの README には、スマートフォンからの接続、サービス探索、セキュリティレベル 4 でのボンディングまで動作すると記載されています。スマートフォンからのメディアストリーミングはまだ検証されていません。
README¶
README の原文
以下はアプリケーションに付属する README(SDK V2.2.1)を原文のまま掲載したものです。翻訳はしておらず、公開に適さない内容だけを置き換えています。
Overview¶
LE Audio Unicast Headset bring-up application for the new IPRO BLE controller component and unified Zephyr-derived host.
Current validated status is profile/HCI ISO payload bring-up, not a finished customer audio product:
- peripheral advertising as
IPRO-LE-Audio - SMP/settings/bonding enabled
- BAP unicast server, PACS, ASCS, CAS and VCP Volume Renderer enabled
- CIS setup and ISO RX payload path validated with the two-board central test
- UART shell enabled at
115200 - controller config:
link1_periph, feature profilebt54_iso2, EM32 KiB - audio output/render is currently disabled; LC3 decode/render and acoustic validation remain open
The two-board automated peer used for this validation
(ipro_ble_controller_central_test) is an internal test app and is not part of
the SDK package; any LE Audio unicast client can act as the peer.
Android phone basic status:
- Pixel 10 Pro / Android 17 can scan/connect to
IPRO-LE-Audio. - Android GATT service discovery has found
1801,1853,1850,184e,1844. - Android system Bluetooth reports LE Audio connected and Volume Control connected.
- Actual LE Audio media streaming is not yet validated; Android currently reports zero connected audio channels with this firmware.
Architecture¶
┌─────────────────────────────────────────────────────────────────┐
│ PC/Smartphone (LE Audio Source) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Music App │ │ Volume Ctrl │ │ Media Ctrl │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ BLE LE Audio Unicast Client (CAP) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ BAP │ │ VCP │ │ MCP │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────────┬─────────────────────────────────┘
│ BLE Link (CIS)
│ LC3 Encoded Audio
▼
┌─────────────────────────────────────────────────────────────────┐
│ IPRO7 LE Audio Unicast Headset │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ BLE LE Audio Server Stack │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────┐ │ │
│ │ │ BAP │ │ VCP │ │ MCP │ │ CCP │ │ │
│ │ │ Unicast │ │ Server │ │ Server │ │ │ │ │
│ │ │ Server │ │ │ │ │ │ │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └──────┘ │ │
│ └───────┼─────────────┼─────────────┼───────────────────┘ │
│ │ │ │ │
│ ┌───────▼─────────────▼─────────────▼───────────────────┐ │
│ │ GAF (Generic Audio Framework) │ │
│ └────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────────────▼───────────────────────────────┐ │
│ │ Audio Data Path │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ ISOOHCI │→ │ LC3 │→ │ Ring │ │ │
│ │ │ Receive │ │ Decoder │ │ Buffer │ │ │
│ │ └──────────┘ └──────────┘ └────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────▼─────┐ │ │
│ │ │ ISOOHCI │← │ LC3 │← │ Ring │ │ │
│ │ │ Transmit │ │ Encoder │ │ Buffer │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌────────────────────────▼───────────────────────────────┐ │
│ │ USB Audio Class (UAC) │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ UAC Playback │ │ UAC Capture │ │ │
│ │ │ (Speaker Out) │ │ (Mic In) │ │ │
│ │ └────────┬─────────┘ └────────▲─────────┘ │ │
│ └───────────┼──────────────────────────┼─────────────────┘ │
└──────────────┼──────────────────────────┼───────────────────────┘
│ │
▼ │
┌─────────────┐ ┌───────┴──────┐
│ Speaker │ │ Microphone │
└─────────────┘ └──────────────┘
Key Features¶
Audio Profiles¶
- BAP (Basic Audio Profile): Unicast audio streaming with CIS (Connected Isochronous Stream)
- VCP (Volume Control Profile): Remote volume control from source device
- MCP (media control) and CCP (call control) are not enabled in the shipped
.config(noCONFIG_BT_MCC/CONFIG_BT_MCS)
Audio Capabilities¶
- Codec: LC3 (Low Complexity Communications Codec)
- Sample Rates: 16kHz, 24kHz, 32kHz, 48kHz
- Frame Duration: 7.5ms, 10ms
- Bitrates: 32kbps - 96kbps (configurable)
- Bidirectional Audio: Simultaneous playback and capture
Advanced Features¶
- Auto-reconnection: Automatically reconnect to paired devices
- Battery Service: Report battery level to connected device
- Device Information Service: Expose device info (model, firmware version)
- GATT Caching: Faster reconnection with cached GATT database
- Smart Power Management: Optimized for low power consumption
Shell Commands¶
# Volume Control
volume get # Get current volume
volume set <0-255> # Set volume level
volume mute # Mute audio
volume unmute # Unmute audio
# Media Control
media play # Start playback
media pause # Pause playback
media next # Next track
media prev # Previous track
# Connection Management
gap disconnect # Disconnect from source
gap advertise <on|off> # Control advertising
# Audio Control
audio status # Show audio stream status
DEMO Application Scenarios¶
Scenario 1: Wireless Music Listening¶
Use Case: Listen to music from smartphone/PC wirelessly
Setup:
- Power on IPRO7 headset → auto-start advertising
- On smartphone: Open Bluetooth settings → Connect "IPRO-Headset"
- Open music app → Select IPRO-Headset as audio output
- Play music → Audio streams via BLE LE Audio
User Experience:
- High-quality audio with LC3 codec (better than SBC)
- Low latency (~20-40ms)
- Phone volume controls work seamlessly
- Media play/pause buttons control smartphone playback
Scenario 2: Video Conference with Bidirectional Audio¶
Use Case: Join video conference call with microphone support
Setup:
- Connect IPRO7 headset to PC
- Join Zoom/Teams meeting
- Select "IPRO-Headset" for both speaker and microphone
- Bidirectional audio automatically established
User Experience:
- Clear voice transmission with LC3 encoding
- Echo cancellation enabled
- Low latency for natural conversation
- USB audio seamlessly bridges BLE and PC
Scenario 3: Gaming with Low-Latency Audio¶
Use Case: Play mobile games with minimal audio delay
Setup:
- Connect to gaming smartphone
- Launch game application
- Audio automatically routes to headset with optimized latency
User Experience:
- Fast audio response (<30ms typical)
- Synchronized audio and visual feedback
- Volume adjustable without leaving game
Scenario 4: Smart Home Voice Assistant¶
Use Case: Interact with voice assistant (Siri/Google Assistant)
Setup:
- Connected to smartphone
- Trigger voice assistant with button or wake word
- Audio I/O handled by headset
User Experience:
- Clear voice command capture
- Assistant responses play through headset
- Hands-free operation
Build Instructions¶
Prerequisites¶
- IPRO SDK properly set up
- RISC-V toolchain installed (
/opt/toolchain/riscv_ipro7/)
Build Command¶
cd <SDK root>
PATH=/opt/toolchain/riscv_ipro7/bin:$PATH \
IPRO_SDK_BASE=$(pwd) \
make -C apps/bluetooth/le_audio/ipro_le_audio_headset -j8
Build Output¶
- Binary:
apps/bluetooth/le_audio/ipro_le_audio_headset/build/build_out/ipro_le_audio_headset_IPRO7.bin - Latest recorded basic build:
521080 B, SHA25655074c89ae853bb462af90f3cdd0129a4ccad42cd8163d9774ac2ad20be6473f.
Flash to Device¶
# $CUBE_UTILS is the utils/ directory of your IntelProCube installation.
# The port name changes with the USB adapter - check `ls /dev/cu.*` rather
# than assuming, and use cu.* not tty.* (the latter blocks on carrier detect).
python3 "$CUBE_UTILS/ipro_probe_ctl.py" \
dl --port /dev/cu.usbmodemXXXX
"$CUBE_UTILS/ipro_flash.sh" \
--chipname ipro7 \
--port /dev/cu.usbmodemXXXX \
--firmware apps/bluetooth/le_audio/ipro_le_audio_headset/build/build_out/ipro_le_audio_headset_IPRO7.bin
IPRO7AI Reef board¶
make -C apps/bluetooth/le_audio/ipro_le_audio_headset DEFCONFIG=defconfig_reef
# -> build_reef/build_out/ipro_le_audio_headset_IPRO7.bin
ipro_iot_tool_macos --chipname ipro7 --chip-variant IPRO7AI --port /dev/cu.usbmodemXXXX \
--firmware apps/bluetooth/le_audio/ipro_le_audio_headset/build_reef/build_out/ipro_le_audio_headset_IPRO7.bin
defconfig_reef is the DAC variant with CONFIG_IPRO7AI_REEF instead of
CONFIG_EVB, and CCI analysis off (it claims GPIO0/1/2/11: camera D0-D2 and
SW5 on this board). Board behaviour comes from ipro7ai_reef_board_config.h:
- Output: DAC A feeds both the J2 headphone buffer and the PAM8302A
speaker amp (enable GPIO25). While a plug is in J2 (GPIO26 low) the amp is
off; it follows the jack during playback. The speaker path is trimmed by
-12 dB (
dac spk <dB>), because the PAM8302A's 15-30 V/V gain is far above the EVK amp the volume curve was set on. The EVK speaker EQ is off. - Keys: SW3 volume down, SW4 volume up, SW5 mute, all through the VCP volume renderer, so the phone's slider follows.
- 512 kHz output path (
dac os 1, the Reef default): the GPDAC runs at 512 kHz andsrc/dac_ns.cexpands each 32 kHz sample with interpolation and first-order noise shaping, which takes the 10-bit quantisation hiss out of the audio band.dac os 0is the original 32 kHz path,dac os 2second-order shaping. The expander costs about 8% CPU (ps). It runs at priority 5, below the BLE host threads: at priority 30 the stream lost 4-13% of its ISO packets; at 5, none in 13 000 packets on either path (bench, 2026-10-06).psand longdacprof/dac statusdumps stall it for a moment and can cause a short glitch.
Host test for the shaper: sh test_host/run.sh.
Basic Android phone smoke¶
With the headset app running on A:
cd <SDK root>
PATH=/opt/toolchain/riscv_ipro7/bin:$PATH \
IPRO_SDK_BASE=$(pwd) \
python3 apps/bluetooth/le_audio/ipro_le_audio_headset/tools/verify_le_audio.py \
--port /dev/cu.usbmodemXXXX \
--baud 115200 \
--duration 45 \
--device IPRO-LE-Audio \
--expect-ascs \
--log /tmp/ipro_android_leaudio_smoke_board.log \
--json /tmp/ipro_android_leaudio_smoke.json
Latest recorded r48 result:
- Android found
IPRO-LE-Audio, connected, and discovered1801,1853,1850,184e,1844. - The phone bonded successfully; the DUT reported security level 4.
- This verifies phone visibility/profile connection, not media streaming.
Configuration¶
Kconfig Options¶
Key configuration options in .config (DAC.config and UAC.config switch
the audio output between the on-chip DAC and a USB Audio Class device):
# LE Audio roles (Zephyr host)
CONFIG_BT_AUDIO=y
CONFIG_BT_AUDIO_RX=y
CONFIG_BT_BAP_UNICAST_SERVER=y
CONFIG_BT_PACS=y
CONFIG_BT_ASCS=y
CONFIG_BT_CAP_ACCEPTOR=y
CONFIG_BT_CSIP_SET_MEMBER=y
CONFIG_BT_VCP_VOL_REND=y
# LC3 decoder
CONFIG_COMPONENTS_LC3_ENABLE=y
Audio Parameters¶
Configurable in src/app_audio.h:
#define APP_AUDIO_SAMPLE_RATE 48000 // Hz
#define APP_AUDIO_FRAME_DURATION 10 // ms
#define APP_AUDIO_BITRATE 96 // kbps
#define APP_AUDIO_CHANNELS 2 // Stereo
Development Roadmap¶
Phase 1: Core Features ✅ (Completed)¶
- [x] Basic BAP unicast audio streaming
- [x] LC3 codec integration
- [x] USB audio bridge
- [x] VCP volume control
- [x] Auto-reconnection support
Phase 2: Enhanced User Experience (Q1 2026)¶
- [ ] Multipoint Connection: Connect to 2 devices simultaneously
- [ ] Fast Pair Support: Google Fast Pair for quick pairing
- [ ] AVRCP Fallback: Support classic Bluetooth for older devices
- [ ] Battery Optimization: Extend battery life by 30%
- [ ] Custom EQ: User-configurable audio equalization
Phase 3: Advanced Audio Features (Q2 2026)¶
- [ ] Broadcast Audio Scan: Scan and join Auracast broadcasts
- [ ] Audio Sharing: Share audio with another headset
- [ ] Spatial Audio: 3D audio positioning support
- [ ] Hearing Aid Features: Customizable audio amplification
- [ ] Active Noise Cancellation: ANC integration
Phase 4: Ecosystem Integration (Q3 2026)¶
- [ ] CCP Full Implementation: Complete call control profile
- [ ] HAP Integration: Hearing Access Profile for accessibility
- [ ] TMAP Support: Telephony and Media Audio Profile
- [ ] Multi-language Voice Prompts: Localized user feedback
- [ ] OTA Firmware Update: Over-the-air update via BLE
Phase 5: AI and Smart Features (Q4 2026)¶
- [ ] AI Noise Reduction: Deep learning-based noise cancellation
- [ ] Voice Enhancement: AI-powered voice clarity
- [ ] Context Awareness: Automatic audio mode switching
- [ ] Personalized Audio: Learning user preferences
- [ ] Health Monitoring: Heart rate/activity tracking integration
Technical Specifications¶
Performance Metrics¶
- Audio Latency: 20-40ms (typical)
- Connection Range: Up to 10 meters (Class 2)
- Battery Life: 8+ hours continuous playback
- Standby Time: 200+ hours
- Charging Time: ~2 hours
Memory Usage¶
- Flash: ~550 KB
- RAM: ~140 KB (OCRAM)
- PSRAM: ~2 MB (audio buffers)
Supported Platforms¶
- IPRO7 Development Board
- IPRO7 Commercial Modules
- Future: IPRO8 platform
Troubleshooting¶
Common Issues¶
Issue: Headset not discoverable
- Solution: Check if advertising is enabled:
gap advertise on
Issue: No audio output
- Solution: Verify USB connection and check
audio statuscommand
Issue: Poor audio quality
- Solution: Check RSSI (
gap status) and ensure strong BLE signal
Issue: Volume control not working
- Solution: Ensure VCP is enabled in configuration and source device supports it
Issue: Disconnection during audio playback
- Solution: Check for interference, reduce distance, or update firmware
References¶
- Bluetooth LE Audio Specification
- LC3 Codec Documentation
- IPRO SDK Documentation
- BLE development overview
License¶
Copyright (c) 2024-2026 INTELPRO Inc. All rights reserved.
Contact¶
For technical support or questions:
- Email: support@intelpro.com.tw
- Website: https://www.intelpro.com.tw