mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-07 05:54:11 +08:00
Merge branch 'master' into src/portable/synopsys/dwc2/fix_sof_int_handling
This commit is contained in:
commit
d692d77834
@ -1 +0,0 @@
|
|||||||
return USB0.INTSTS1.BIT.ATTCH ? true : false;
|
|
@ -2,9 +2,9 @@
|
|||||||
[codespell]
|
[codespell]
|
||||||
# In the event of a false positive, add the problematic word, in all lowercase, to 'ignore-words.txt' (one word per line).
|
# In the event of a false positive, add the problematic word, in all lowercase, to 'ignore-words.txt' (one word per line).
|
||||||
# Or copy & paste the whole problematic line to 'exclude-file.txt'
|
# Or copy & paste the whole problematic line to 'exclude-file.txt'
|
||||||
ignore-words = .codespell/ignore-words.txt
|
ignore-words = tools/codespell/ignore-words.txt
|
||||||
exclude-file = .codespell/exclude-file.txt
|
exclude-file = tools/codespell/exclude-file.txt
|
||||||
check-filenames =
|
check-filenames =
|
||||||
check-hidden =
|
check-hidden =
|
||||||
count =
|
count =
|
||||||
skip = .cproject,./.git,./hw/mcu,./lib,./examples/*/*/_build,./examples/*/*/ses,./examples/*/*/ozone,./hw/mcu,./test/unit-test/vendor,./tests_obsolete,./tools/uf2
|
skip = *.rb,.cproject,.git,./lib,./examples/*/*/_build,./examples/*/*/ses,./examples/*/*/ozone,./hw/mcu,./tests_obsolete
|
||||||
|
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -60,15 +60,15 @@ body:
|
|||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Debug Log as txt file
|
label: Debug Log as txt file (LOG/CFG_TUSB_DEBUG=2)
|
||||||
placeholder: |
|
placeholder: |
|
||||||
Attach your debug log txt file here, where the issue occurred, best with comments to explain the actual events.
|
Attach your debug log txt file here, where the issue occurred, best with comments to explain the actual events.
|
||||||
|
|
||||||
Note1: Please DO NOT paste your lengthy log contents here since it hurts the readability.
|
Note1: Please DO NOT paste your lengthy log contents here since it hurts the readability.
|
||||||
Note2: To enable logging, add `LOG=3` to to the make command if building with stock examples or set `CFG_TUSB_DEBUG=3` in your tusb_config.h.
|
Note2: To enable logging, add `LOG=2` to to the make command if building with stock examples or set `CFG_TUSB_DEBUG=2` in your tusb_config.h.
|
||||||
More information can be found at [example's readme](https://github.com/hathach/tinyusb/blob/master/docs/getting_started.md)
|
More information can be found at [example's readme](https://github.com/hathach/tinyusb/blob/master/docs/getting_started.md)
|
||||||
validations:
|
validations:
|
||||||
required: false
|
required: true
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
26
.github/workflows/build_aarch64.yml
vendored
26
.github/workflows/build_aarch64.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build AArch64
|
name: Build AArch64
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
@ -35,21 +36,12 @@ jobs:
|
|||||||
- 'broadcom_64bit'
|
- 'broadcom_64bit'
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip lib/sct_neopixel
|
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Set Toolchain URL
|
- name: Set Toolchain URL
|
||||||
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
|
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
|
||||||
@ -72,15 +64,7 @@ jobs:
|
|||||||
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
||||||
|
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: python3 tools/get_dependencies.py ${{ matrix.family }}
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }}
|
run: python3 tools/build_make.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Linker Map
|
|
||||||
run: |
|
|
||||||
pip install linkermap/
|
|
||||||
for ex in `ls -d examples/device/*/`; do \
|
|
||||||
find ${ex} -name *.map -print -quit | \
|
|
||||||
xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
|
|
||||||
done
|
|
||||||
|
256
.github/workflows/build_arm.yml
vendored
256
.github/workflows/build_arm.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: Build ARM
|
name: Build ARM
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_arm.yml'
|
- '.github/workflows/build_arm.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +17,7 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_arm.yml'
|
- '.github/workflows/build_arm.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -33,32 +36,17 @@ jobs:
|
|||||||
family:
|
family:
|
||||||
# Alphabetical order
|
# Alphabetical order
|
||||||
- 'broadcom_32bit'
|
- 'broadcom_32bit'
|
||||||
- 'imxrt'
|
- 'kinetis_k32l2'
|
||||||
- 'lpc15'
|
- 'lpc11 lpc13 lpc15'
|
||||||
- 'lpc18'
|
- 'lpc51'
|
||||||
- 'lpc54'
|
- 'mm32 msp432e4'
|
||||||
- 'lpc55'
|
- 'samd11 same5x saml2x'
|
||||||
- 'mm32'
|
- 'stm32f2 stm32f3'
|
||||||
- 'msp432e4'
|
- 'stm32l0 stm32wb'
|
||||||
- 'nrf'
|
- 'tm4c123 xmc4000'
|
||||||
- 'rp2040'
|
|
||||||
- 'samd11'
|
|
||||||
- 'samd21'
|
|
||||||
- 'samd51'
|
|
||||||
- 'saml2x'
|
|
||||||
- 'stm32f0'
|
|
||||||
- 'stm32f1'
|
|
||||||
- 'stm32f4'
|
|
||||||
- 'stm32f7'
|
|
||||||
- 'stm32g4'
|
|
||||||
- 'stm32h7'
|
|
||||||
- 'stm32l4'
|
|
||||||
- 'stm32wb'
|
|
||||||
- 'tm4c123'
|
|
||||||
- 'xmc4000'
|
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
@ -68,224 +56,10 @@ jobs:
|
|||||||
release: '11.2-2022.02'
|
release: '11.2-2022.02'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip lib/sct_neopixel
|
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Checkout pico-sdk for rp2040
|
|
||||||
if: matrix.family == 'rp2040'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b develop https://github.com/raspberrypi/pico-sdk ~/pico-sdk
|
|
||||||
echo >> $GITHUB_ENV PICO_SDK_PATH=~/pico-sdk
|
|
||||||
|
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: python3 tools/get_dependencies.py ${{ matrix.family }}
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }}
|
run: python3 tools/build_make.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Linker Map
|
|
||||||
run: |
|
|
||||||
pip install linkermap/
|
|
||||||
# find -quit to only print linkermap of 1 board per example
|
|
||||||
for ex in `ls -d examples/*/*/`
|
|
||||||
do
|
|
||||||
find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'
|
|
||||||
done
|
|
||||||
|
|
||||||
# Upload binaries for rp2040 hardware test with self-hosted
|
|
||||||
- name: Prepare rp2040 Artifacts
|
|
||||||
if: matrix.family == 'rp2040' && github.repository_owner == 'hathach'
|
|
||||||
run: find examples/ -name "*.elf" -exec mv {} . \;
|
|
||||||
|
|
||||||
- name: Upload rp2040 Artifacts
|
|
||||||
if: matrix.family == 'rp2040' && github.repository_owner == 'hathach'
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.family }}
|
|
||||||
path: |
|
|
||||||
*.elf
|
|
||||||
|
|
||||||
# Upload binaries for stm32l412nucleo hardware test with self-hosted
|
|
||||||
- name: Prepare stm32l412nucleo Artifacts
|
|
||||||
if: matrix.family == 'stm32l4'
|
|
||||||
run: find examples/ -path "*stm32l412nucleo/*.elf" -exec mv {} . \;
|
|
||||||
|
|
||||||
- name: Upload stm32l412nucleo Artifacts
|
|
||||||
if: matrix.family == 'stm32l4'
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: stm32l412nucleo
|
|
||||||
path: |
|
|
||||||
*.elf
|
|
||||||
|
|
||||||
# ---------------------------------------
|
|
||||||
# Build all no-family (orphaned) boards
|
|
||||||
# disable this workflow since it is often failed randomly
|
|
||||||
# ---------------------------------------
|
|
||||||
build-board:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: false
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
example:
|
|
||||||
# Alphabetical order, a group of 4
|
|
||||||
- 'device/audio_test device/board_test device/cdc_dual_ports device/cdc_msc'
|
|
||||||
- 'device/cdc_msc_freertos device/dfu_runtime device/hid_composite device/hid_composite_freertos'
|
|
||||||
- 'device/hid_generic_inout device/hid_multiple_interface device/midi_test device/msc_dual_lun'
|
|
||||||
- 'device/net_lwip_webserver'
|
|
||||||
- 'device/uac2_headset device/usbtmc device/webusb_serial host/cdc_msc_hid'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: '3.x'
|
|
||||||
|
|
||||||
- name: Install ARM GCC
|
|
||||||
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
|
||||||
with:
|
|
||||||
release: '11.2-2022.02'
|
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: python3 tools/build_board.py ${{ matrix.example }}
|
|
||||||
|
|
||||||
# ---------------------------------------
|
|
||||||
# Hardware in the loop (HIL)
|
|
||||||
# Current self-hosted instance is running on an RPI4 with
|
|
||||||
# - pico + pico-probe connected via USB
|
|
||||||
# - pico-probe is /dev/ttyACM0
|
|
||||||
# ---------------------------------------
|
|
||||||
hw-rp2040-test:
|
|
||||||
# run only with hathach's commit due to limited resource on RPI4
|
|
||||||
if: github.repository_owner == 'hathach'
|
|
||||||
needs: build-arm
|
|
||||||
runs-on: [self-hosted, Linux, ARM64, rp2040]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Clean workspace
|
|
||||||
run: |
|
|
||||||
echo "Cleaning up previous run"
|
|
||||||
rm -rf "${{ github.workspace }}"
|
|
||||||
mkdir -p "${{ github.workspace }}"
|
|
||||||
|
|
||||||
- name: Download rp2040 Artifacts
|
|
||||||
uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: rp2040
|
|
||||||
|
|
||||||
- name: Create flash.sh
|
|
||||||
run: |
|
|
||||||
#echo > flash.sh 'cmdout=$(openocd -f "interface/picoprobe.cfg" -f "target/rp2040.cfg" -c "program $1 reset exit")'
|
|
||||||
echo > flash.sh 'pyocd flash -t rp2040 $1'
|
|
||||||
echo >> flash.sh 'if (( $? )) ; then echo $cmdout ; fi'
|
|
||||||
chmod +x flash.sh
|
|
||||||
|
|
||||||
- name: Test cdc_dual_ports
|
|
||||||
run: |
|
|
||||||
./flash.sh cdc_dual_ports.elf
|
|
||||||
while (! ([ -e /dev/ttyACM1 ] && [ -e /dev/ttyACM2 ])) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
test -e /dev/ttyACM1 && echo "ttyACM1 exists"
|
|
||||||
test -e /dev/ttyACM2 && echo "ttyACM2 exists"
|
|
||||||
|
|
||||||
- name: Test cdc_msc
|
|
||||||
run: |
|
|
||||||
./flash.sh cdc_msc.elf
|
|
||||||
readme='/media/pi/TinyUSB MSC/README.TXT'
|
|
||||||
while (! ([ -e /dev/ttyACM1 ] && [ -f "$readme" ])) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
test -e /dev/ttyACM1 && echo "ttyACM1 exists"
|
|
||||||
test -f "$readme" && echo "$readme exists"
|
|
||||||
cat "$readme"
|
|
||||||
|
|
||||||
- name: Test dfu
|
|
||||||
run: |
|
|
||||||
./flash.sh dfu.elf
|
|
||||||
while (! (dfu-util -l | grep "Found DFU")) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
dfu-util -d cafe -a 0 -U dfu0
|
|
||||||
dfu-util -d cafe -a 1 -U dfu1
|
|
||||||
grep "TinyUSB DFU! - Partition 0" dfu0
|
|
||||||
grep "TinyUSB DFU! - Partition 1" dfu1
|
|
||||||
|
|
||||||
- name: Test dfu_runtime
|
|
||||||
run: |
|
|
||||||
./flash.sh dfu_runtime.elf
|
|
||||||
while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
|
|
||||||
# ---------------------------------------
|
|
||||||
# Hardware in the loop (HIL)
|
|
||||||
# Current self-hosted instance is running on an EPYC 7232 server hosted by HiFiPhile user
|
|
||||||
# - STM32L412 Nucleo with on-board jlink as ttyACM0
|
|
||||||
# ---------------------------------------
|
|
||||||
hw-stm32l412nucleo-test:
|
|
||||||
needs: build-arm
|
|
||||||
runs-on: [self-hosted, Linux, X64, hifiphile]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Clean workspace
|
|
||||||
run: |
|
|
||||||
echo "Cleaning up previous run"
|
|
||||||
rm -rf "${{ github.workspace }}"
|
|
||||||
mkdir -p "${{ github.workspace }}"
|
|
||||||
|
|
||||||
- name: Download stm32l4 Artifacts
|
|
||||||
uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: stm32l412nucleo
|
|
||||||
|
|
||||||
- name: Create flash.sh
|
|
||||||
run: |
|
|
||||||
echo > flash.sh 'echo halt > flash.jlink'
|
|
||||||
echo >> flash.sh 'echo r >> flash.jlink'
|
|
||||||
echo >> flash.sh 'echo loadfile $1 >> flash.jlink'
|
|
||||||
echo >> flash.sh 'echo r >> flash.jlink'
|
|
||||||
echo >> flash.sh 'echo go >> flash.jlink'
|
|
||||||
echo >> flash.sh 'echo exit >> flash.jlink'
|
|
||||||
echo >> flash.sh 'cmdout=$(JLinkExe -device stm32l412kb -if swd -JTAGConf -1,-1 -speed auto -NoGui 1 -ExitOnError 1 -CommandFile flash.jlink)'
|
|
||||||
echo >> flash.sh 'if (( $? )) ; then echo $cmdout ; fi'
|
|
||||||
chmod +x flash.sh
|
|
||||||
|
|
||||||
- name: Test cdc_dual_ports
|
|
||||||
run: |
|
|
||||||
./flash.sh cdc_dual_ports.elf
|
|
||||||
while (! ([ -e /dev/ttyACM1 ] && [ -e /dev/ttyACM2 ])) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
test -e /dev/ttyACM1 && echo "ttyACM1 exists"
|
|
||||||
test -e /dev/ttyACM2 && echo "ttyACM2 exists"
|
|
||||||
|
|
||||||
# Debian does not auto mount usb drive. skip this test for now
|
|
||||||
- name: Test cdc_msc
|
|
||||||
if: false
|
|
||||||
run: |
|
|
||||||
./flash.sh cdc_msc.elf
|
|
||||||
readme='/media/pi/TinyUSB MSC/README.TXT'
|
|
||||||
while (! ([ -e /dev/ttyACM1 ] && [ -f "$readme" ])) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
test -e /dev/ttyACM1 && echo "ttyACM1 exists"
|
|
||||||
test -f "$readme" && echo "$readme exists"
|
|
||||||
cat "$readme"
|
|
||||||
|
|
||||||
- name: Test dfu
|
|
||||||
run: |
|
|
||||||
./flash.sh dfu.elf
|
|
||||||
while (! (dfu-util -l | grep "Found DFU")) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
dfu-util -d cafe -a 0 -U dfu0
|
|
||||||
dfu-util -d cafe -a 1 -U dfu1
|
|
||||||
grep "TinyUSB DFU! - Partition 0" dfu0
|
|
||||||
grep "TinyUSB DFU! - Partition 1" dfu1
|
|
||||||
|
|
||||||
- name: Test dfu_runtime
|
|
||||||
run: |
|
|
||||||
./flash.sh dfu_runtime.elf
|
|
||||||
while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 10 ]; do :; done
|
|
||||||
|
82
.github/workflows/build_esp.yml
vendored
82
.github/workflows/build_esp.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: Build ESP
|
name: Build ESP
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'test/hil/**'
|
||||||
- '.github/workflows/build_esp.yml'
|
- '.github/workflows/build_esp.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +17,7 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'test/hil/**'
|
||||||
- '.github/workflows/build_esp.yml'
|
- '.github/workflows/build_esp.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -28,16 +31,13 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
board:
|
board:
|
||||||
# Alphabetical order
|
|
||||||
# ESP32-S2
|
# ESP32-S2
|
||||||
- 'espressif_saola_1'
|
- 'espressif_kaluga_1'
|
||||||
# ESP32-S3
|
# ESP32-S3
|
||||||
#- 'espressif_s3_devkitm'
|
- 'espressif_s3_devkitc'
|
||||||
# S3 compile error with "dangerous relocation: call8: call target out of range: memcpy"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
@ -45,22 +45,64 @@ jobs:
|
|||||||
run: docker pull espressif/idf:latest
|
run: docker pull espressif/idf:latest
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32sx.py ${{ matrix.board }}
|
run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32.py ${{ matrix.board }}
|
||||||
|
|
||||||
- name: Linker Map
|
- name: Upload Artifacts for Hardware Testing
|
||||||
|
if: matrix.board == 'espressif_s3_devkitc' && github.repository_owner == 'hathach'
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.board }}
|
||||||
|
path: |
|
||||||
|
cmake-build/cmake-build-${{ matrix.board }}/*/*/bootloader/bootloader.bin
|
||||||
|
cmake-build/cmake-build-${{ matrix.board }}/*/*/*.bin
|
||||||
|
cmake-build/cmake-build-${{ matrix.board }}/*/*/partition_table/partition-table.bin
|
||||||
|
cmake-build/cmake-build-${{ matrix.board }}/*/*/config.env
|
||||||
|
cmake-build/cmake-build-${{ matrix.board }}/*/*/flash_args
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Hardware in the loop (HIL)
|
||||||
|
# Current self-hosted instance is running on an RPI4. For attached hardware checkout hil_pi4.json
|
||||||
|
# ---------------------------------------
|
||||||
|
hil-test:
|
||||||
|
# run only with hathach's commit due to limited resource on RPI4
|
||||||
|
if: github.repository_owner == 'hathach'
|
||||||
|
needs: build-esp
|
||||||
|
runs-on: [self-hosted, esp32s3, hardware-in-the-loop]
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- 'espressif_s3_devkitc'
|
||||||
|
steps:
|
||||||
|
- name: Clean workspace
|
||||||
run: |
|
run: |
|
||||||
pip install linkermap/
|
echo "Cleaning up previous run"
|
||||||
# find -quit to only print linkermap of 1 board per example
|
rm -rf "${{ github.workspace }}"
|
||||||
for ex in `ls -d examples/device/*/`
|
mkdir -p "${{ github.workspace }}"
|
||||||
do
|
|
||||||
find ${ex} -maxdepth 3 -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'
|
# USB bus on rpi4 is not stable, reset it before testing
|
||||||
|
- name: Reset USB bus
|
||||||
|
run: |
|
||||||
|
for port in $(lspci | grep USB | cut -d' ' -f1); do
|
||||||
|
echo -n "0000:${port}"| sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind;
|
||||||
|
sleep 0.1;
|
||||||
|
echo -n "0000:${port}" | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind;
|
||||||
done
|
done
|
||||||
|
|
||||||
|
- name: Checkout test/hil
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: test/hil
|
||||||
|
|
||||||
|
- name: Download Artifacts
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.board }}
|
||||||
|
path: cmake-build/cmake-build-${{ matrix.board }}
|
||||||
|
|
||||||
|
- name: Test on actual hardware
|
||||||
|
run: |
|
||||||
|
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
||||||
|
29
.github/workflows/build_iar.yml
vendored
29
.github/workflows/build_iar.yml
vendored
@ -1,12 +1,15 @@
|
|||||||
name: Build IAR
|
name: Build IAR
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
|
- 'test/hil/**'
|
||||||
- '.github/workflows/build_iar.yml'
|
- '.github/workflows/build_iar.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +18,8 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
|
- 'test/hil/**'
|
||||||
- '.github/workflows/build_iar.yml'
|
- '.github/workflows/build_iar.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -22,7 +27,7 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-arm:
|
cmake:
|
||||||
runs-on: [self-hosted, Linux, X64, hifiphile]
|
runs-on: [self-hosted, Linux, X64, hifiphile]
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@ -31,7 +36,7 @@ jobs:
|
|||||||
# Alphabetical order
|
# Alphabetical order
|
||||||
# Note: bundle multiple families into a matrix since there is only one self-hosted instance can
|
# Note: bundle multiple families into a matrix since there is only one self-hosted instance can
|
||||||
# run IAR build. Too many matrix can hurt due to setup/teardown overhead.
|
# run IAR build. Too many matrix can hurt due to setup/teardown overhead.
|
||||||
- 'stm32f0 stm32f1 stm32f4 stm32f7 stm32g4 stm32h7 stm32l4'
|
- 'lpc43 stm32f0 stm32f1 stm32f7 stm32g0 stm32g4 stm32l4'
|
||||||
steps:
|
steps:
|
||||||
- name: Clean workspace
|
- name: Clean workspace
|
||||||
run: |
|
run: |
|
||||||
@ -40,18 +45,14 @@ jobs:
|
|||||||
mkdir -p "${{ github.workspace }}"
|
mkdir -p "${{ github.workspace }}"
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout submodules and dependencies
|
- name: Get Dependencies
|
||||||
run: |
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
git submodule update --init lib/FreeRTOS-Kernel lib/lwip lib/sct_neopixel
|
|
||||||
python3 tools/get_dependencies.py ${{ matrix.family }}
|
|
||||||
|
|
||||||
#- name: Checkout pico-sdk for rp2040
|
|
||||||
# if: matrix.family == 'rp2040'
|
|
||||||
# run: |
|
|
||||||
# git clone --depth 1 -b develop https://github.com/raspberrypi/pico-sdk ~/pico-sdk
|
|
||||||
# echo >> $GITHUB_ENV PICO_SDK_PATH=~/pico-sdk
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }} CC=iccarm
|
run: python3 tools/build_cmake.py ${{ matrix.family }} -DTOOLCHAIN=iar -DCMAKE_BUILD_TYPE=MinSizeRel
|
||||||
|
|
||||||
|
- name: Test on actual hardware (hardware in the loop)
|
||||||
|
run: |
|
||||||
|
python3 test/hil/hil_test.py hil_hfp.json
|
||||||
|
29
.github/workflows/build_msp430.yml
vendored
29
.github/workflows/build_msp430.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: Build MSP430
|
name: Build MSP430
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_msp430.yml'
|
- '.github/workflows/build_msp430.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +17,7 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_msp430.yml'
|
- '.github/workflows/build_msp430.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -33,21 +36,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
|
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Set Toolchain URL
|
- name: Set Toolchain URL
|
||||||
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2
|
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2
|
||||||
@ -70,16 +64,7 @@ jobs:
|
|||||||
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
||||||
|
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: python3 tools/get_dependencies.py ${{ matrix.family }}
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }}
|
run: python3 tools/build_make.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Linker Map
|
|
||||||
run: |
|
|
||||||
pip install linkermap/
|
|
||||||
# find -quit to only print linkermap of 1 board per example
|
|
||||||
for ex in `ls -d examples/device/*/`
|
|
||||||
do
|
|
||||||
find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'
|
|
||||||
done
|
|
||||||
|
29
.github/workflows/build_renesas.yml
vendored
29
.github/workflows/build_renesas.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: Build Renesas
|
name: Build Renesas
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_renesas.yml'
|
- '.github/workflows/build_renesas.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +17,7 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_renesas.yml'
|
- '.github/workflows/build_renesas.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -32,21 +35,12 @@ jobs:
|
|||||||
- 'rx'
|
- 'rx'
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
|
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Set Toolchain URL
|
- name: Set Toolchain URL
|
||||||
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run
|
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run
|
||||||
@ -70,16 +64,7 @@ jobs:
|
|||||||
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
||||||
|
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: python3 tools/get_dependencies.py ${{ matrix.family }}
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }}
|
run: python3 tools/build_make.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Linker Map
|
|
||||||
run: |
|
|
||||||
pip install linkermap/
|
|
||||||
# find -quit to only print linkermap of 1 board per example
|
|
||||||
for ex in `ls -d examples/device/*/`
|
|
||||||
do
|
|
||||||
find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'
|
|
||||||
done
|
|
||||||
|
29
.github/workflows/build_riscv.yml
vendored
29
.github/workflows/build_riscv.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: Build RISC-V
|
name: Build RISC-V
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_riscv.yml'
|
- '.github/workflows/build_riscv.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -15,6 +17,7 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'hw/**'
|
- 'hw/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
- '.github/workflows/build_riscv.yml'
|
- '.github/workflows/build_riscv.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -34,21 +37,12 @@ jobs:
|
|||||||
- 'gd32vf103'
|
- 'gd32vf103'
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Checkout common submodules in lib
|
|
||||||
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
|
|
||||||
|
|
||||||
- name: Checkout hathach/linkermap
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: hathach/linkermap
|
|
||||||
path: linkermap
|
|
||||||
|
|
||||||
- name: Set Toolchain URL
|
- name: Set Toolchain URL
|
||||||
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v10.1.0-1.1/xpack-riscv-none-embed-gcc-10.1.0-1.1-linux-x64.tar.gz
|
run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v10.1.0-1.1/xpack-riscv-none-embed-gcc-10.1.0-1.1-linux-x64.tar.gz
|
||||||
@ -71,16 +65,7 @@ jobs:
|
|||||||
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
|
||||||
|
|
||||||
- name: Get Dependencies
|
- name: Get Dependencies
|
||||||
run: python3 tools/get_dependencies.py ${{ matrix.family }}
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build_family.py ${{ matrix.family }}
|
run: python3 tools/build_make.py ${{ matrix.family }}
|
||||||
|
|
||||||
- name: Linker Map
|
|
||||||
run: |
|
|
||||||
pip install linkermap/
|
|
||||||
# find -quit to only print linkermap of 1 board per example
|
|
||||||
for ex in `ls -d examples/device/*/`
|
|
||||||
do
|
|
||||||
find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'
|
|
||||||
done
|
|
||||||
|
54
.github/workflows/build_win_mac.yml
vendored
Normal file
54
.github/workflows/build_win_mac.yml
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
name: Build Windows/MacOS
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- '.github/workflows/build_win_mac.yml'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- '.github/workflows/build_win_mac.yml'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# ---------------------------------------
|
||||||
|
# Build ARM family
|
||||||
|
# ---------------------------------------
|
||||||
|
build-arm:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [windows-latest, macos-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install ARM GCC
|
||||||
|
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
||||||
|
with:
|
||||||
|
release: '10.3-2021.10'
|
||||||
|
|
||||||
|
- name: Checkout TinyUSB
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Get Dependencies
|
||||||
|
run: python3 tools/get_deps.py stm32f4
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: python3 tools/build_make.py stm32f4 stm32f411disco
|
1
.github/workflows/cifuzz.yml
vendored
1
.github/workflows/cifuzz.yml
vendored
@ -1,5 +1,6 @@
|
|||||||
name: CIFuzz
|
name: CIFuzz
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
163
.github/workflows/cmake_arm.yml
vendored
Normal file
163
.github/workflows/cmake_arm.yml
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
name: CMake ARM
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- 'test/hil/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
|
- '.github/workflows/cmake_arm.yml'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- 'test/hil/**'
|
||||||
|
- 'tools/get_deps.py'
|
||||||
|
- '.github/workflows/cmake_arm.yml'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# ---------------------------------------
|
||||||
|
# Build ARM family
|
||||||
|
# ---------------------------------------
|
||||||
|
build-arm:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
family:
|
||||||
|
# Alphabetical order
|
||||||
|
- 'imxrt'
|
||||||
|
- 'kinetis_kl'
|
||||||
|
- 'lpc17 lpc18 lpc40 lpc43'
|
||||||
|
- 'lpc54 lpc55'
|
||||||
|
- 'mcx'
|
||||||
|
- 'nrf'
|
||||||
|
- 'ra'
|
||||||
|
- 'rp2040'
|
||||||
|
- 'samd21'
|
||||||
|
- 'samd51'
|
||||||
|
- 'stm32f0'
|
||||||
|
- 'stm32f1'
|
||||||
|
- 'stm32f4'
|
||||||
|
- 'stm32f7'
|
||||||
|
- 'stm32g0'
|
||||||
|
- 'stm32g4'
|
||||||
|
- 'stm32h5'
|
||||||
|
- 'stm32h7'
|
||||||
|
- 'stm32l4'
|
||||||
|
- 'stm32u5'
|
||||||
|
steps:
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install ARM GCC
|
||||||
|
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
||||||
|
with:
|
||||||
|
release: '11.2-2022.02'
|
||||||
|
|
||||||
|
- name: Install Ninja
|
||||||
|
run: sudo apt install -y ninja-build
|
||||||
|
|
||||||
|
- name: Checkout TinyUSB
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Checkout pico-sdk for rp2040
|
||||||
|
if: matrix.family == 'rp2040'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: raspberrypi/pico-sdk
|
||||||
|
ref: develop
|
||||||
|
path: pico-sdk
|
||||||
|
|
||||||
|
- name: Get Dependencies
|
||||||
|
run: python3 tools/get_deps.py ${{ matrix.family }}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: python tools/build_cmake.py ${{ matrix.family }} -DCMAKE_BUILD_TYPE=MinSizeRel
|
||||||
|
env:
|
||||||
|
# for rp2040, there is no harm if defined for other families
|
||||||
|
PICO_SDK_PATH: ${{ github.workspace }}/pico-sdk
|
||||||
|
|
||||||
|
- name: Upload Artifacts for Hardware Testing (rp2040)
|
||||||
|
if: matrix.family == 'rp2040' && github.repository_owner == 'hathach'
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: raspberry_pi_pico
|
||||||
|
path: |
|
||||||
|
cmake-build/cmake-build-raspberry_pi_pico/*/*/*.elf
|
||||||
|
|
||||||
|
- name: Upload Artifacts for Hardware Testing (nRF)
|
||||||
|
if: matrix.family == 'nrf' && github.repository_owner == 'hathach'
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: feather_nrf52840_express
|
||||||
|
path: |
|
||||||
|
cmake-build/cmake-build-feather_nrf52840_express/*/*/*.elf
|
||||||
|
|
||||||
|
- name: Upload Artifacts for Hardware Testing (samd51)
|
||||||
|
if: matrix.family == 'samd51' && github.repository_owner == 'hathach'
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: itsybitsy_m4
|
||||||
|
path: |
|
||||||
|
cmake-build/cmake-build-itsybitsy_m4/*/*/*.bin
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Hardware in the loop (HIL)
|
||||||
|
# Current self-hosted instance is running on an RPI4. For attached hardware checkout hil_pi4.json
|
||||||
|
# ---------------------------------------
|
||||||
|
hil-test:
|
||||||
|
# run only with hathach's commit due to limited resource on RPI4
|
||||||
|
if: github.repository_owner == 'hathach'
|
||||||
|
needs: build-arm
|
||||||
|
runs-on: [self-hosted, rp2040, nrf52840, hardware-in-the-loop]
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- 'feather_nrf52840_express'
|
||||||
|
- 'itsybitsy_m4'
|
||||||
|
- 'raspberry_pi_pico'
|
||||||
|
steps:
|
||||||
|
- name: Clean workspace
|
||||||
|
run: |
|
||||||
|
echo "Cleaning up previous run"
|
||||||
|
rm -rf "${{ github.workspace }}"
|
||||||
|
mkdir -p "${{ github.workspace }}"
|
||||||
|
|
||||||
|
# USB bus on rpi4 is not stable, reset it before testing
|
||||||
|
- name: Reset USB bus
|
||||||
|
run: |
|
||||||
|
for port in $(lspci | grep USB | cut -d' ' -f1); do
|
||||||
|
echo -n "0000:${port}"| sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind;
|
||||||
|
sleep 0.1;
|
||||||
|
echo -n "0000:${port}" | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind;
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Checkout test/hil
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: test/hil
|
||||||
|
|
||||||
|
- name: Download Artifacts
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.board }}
|
||||||
|
path: cmake-build/cmake-build-${{ matrix.board }}
|
||||||
|
|
||||||
|
- name: Test on actual hardware
|
||||||
|
run: |
|
||||||
|
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
5
.github/workflows/codeql-buildscript.sh
vendored
Normal file
5
.github/workflows/codeql-buildscript.sh
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FAMILY=stm32l4
|
||||||
|
python3 tools/get_deps.py $FAMILY
|
||||||
|
python3 tools/build_make.py $FAMILY
|
137
.github/workflows/codeql.yml
vendored
Normal file
137
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ 'master' ]
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- '.github/workflows/codeql.yml'
|
||||||
|
pull_request:
|
||||||
|
branches: [ 'master' ]
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'examples/**'
|
||||||
|
- 'lib/**'
|
||||||
|
- 'hw/**'
|
||||||
|
- '.github/workflows/codeql.yml'
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||||
|
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||||
|
# - https://gh.io/supported-runners-and-hardware-resources
|
||||||
|
# - https://gh.io/using-larger-runners
|
||||||
|
# Consider using larger runners for possible analysis time improvements.
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 360
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'c-cpp' ]
|
||||||
|
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
|
||||||
|
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||||
|
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||||
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install ARM GCC
|
||||||
|
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
||||||
|
with:
|
||||||
|
release: '11.2-2022.02'
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
|
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
queries: security-and-quality
|
||||||
|
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
#- name: Autobuild
|
||||||
|
# uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
||||||
|
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||||
|
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
./.github/workflows/codeql-buildscript.sh
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
|
with:
|
||||||
|
category: "/language:${{matrix.language}}"
|
||||||
|
upload: false
|
||||||
|
id: step1
|
||||||
|
|
||||||
|
# Filter out rules with low severity or high false positive rate
|
||||||
|
# Also filter out warnings in third-party code
|
||||||
|
- name: Filter out unwanted errors and warnings
|
||||||
|
uses: advanced-security/filter-sarif@v1
|
||||||
|
with:
|
||||||
|
patterns: |
|
||||||
|
-**:cpp/path-injection
|
||||||
|
-**:cpp/world-writable-file-creation
|
||||||
|
-**:cpp/poorly-documented-function
|
||||||
|
-**:cpp/potentially-dangerous-function
|
||||||
|
-**:cpp/use-of-goto
|
||||||
|
-**:cpp/integer-multiplication-cast-to-long
|
||||||
|
-**:cpp/comparison-with-wider-type
|
||||||
|
-**:cpp/leap-year/*
|
||||||
|
-**:cpp/ambiguously-signed-bit-field
|
||||||
|
-**:cpp/suspicious-pointer-scaling
|
||||||
|
-**:cpp/suspicious-pointer-scaling-void
|
||||||
|
-**:cpp/unsigned-comparison-zero
|
||||||
|
-**/third*party/**
|
||||||
|
-**/3rd*party/**
|
||||||
|
-**/external/**
|
||||||
|
input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||||
|
output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||||
|
|
||||||
|
- name: Upload SARIF
|
||||||
|
uses: github/codeql-action/upload-sarif@v2
|
||||||
|
with:
|
||||||
|
sarif_file: ${{ steps.step1.outputs.sarif-output }}
|
||||||
|
category: "/language:${{matrix.language}}"
|
||||||
|
|
||||||
|
- name: Archive CodeQL results
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: codeql-results
|
||||||
|
path: ${{ steps.step1.outputs.sarif-output }}
|
||||||
|
retention-days: 5
|
34
.github/workflows/fail_on_error.py
vendored
Executable file
34
.github/workflows/fail_on_error.py
vendored
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Return whether SARIF file contains error-level results
|
||||||
|
def codeql_sarif_contain_error(filename):
|
||||||
|
with open(filename, 'r') as f:
|
||||||
|
s = json.load(f)
|
||||||
|
|
||||||
|
for run in s.get('runs', []):
|
||||||
|
rules_metadata = run['tool']['driver']['rules']
|
||||||
|
if not rules_metadata:
|
||||||
|
rules_metadata = run['tool']['extensions'][0]['rules']
|
||||||
|
|
||||||
|
for res in run.get('results', []):
|
||||||
|
if 'ruleIndex' in res:
|
||||||
|
rule_index = res['ruleIndex']
|
||||||
|
elif 'rule' in res and 'index' in res['rule']:
|
||||||
|
rule_index = res['rule']['index']
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
rule_level = rules_metadata[rule_index]['defaultConfiguration']['level']
|
||||||
|
except IndexError as e:
|
||||||
|
print(e, rule_index, len(rules_metadata))
|
||||||
|
else:
|
||||||
|
if rule_level == 'error':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if codeql_sarif_contain_error(sys.argv[1]):
|
||||||
|
sys.exit(1)
|
18
.github/workflows/pre-commit.yml
vendored
18
.github/workflows/pre-commit.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: pre-commit
|
name: pre-commit
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
@ -14,7 +15,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
@ -24,17 +25,16 @@ jobs:
|
|||||||
ruby-version: '3.0'
|
ruby-version: '3.0'
|
||||||
|
|
||||||
- name: Checkout TinyUSB
|
- name: Checkout TinyUSB
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Run codespell
|
- name: Get Dependencies
|
||||||
uses: codespell-project/actions-codespell@master
|
|
||||||
|
|
||||||
- name: Run Unit Tests
|
|
||||||
run: |
|
run: |
|
||||||
# Install Ceedling
|
|
||||||
gem install ceedling
|
gem install ceedling
|
||||||
cd test/unit-test
|
#cd test/unit-test
|
||||||
ceedling test:all
|
#ceedling test:all
|
||||||
|
|
||||||
|
- name: Run pre-commit
|
||||||
|
uses: pre-commit/action@v3.0.0
|
||||||
|
|
||||||
- name: Build Fuzzer
|
- name: Build Fuzzer
|
||||||
run: |
|
run: |
|
||||||
|
3
.github/workflows/trigger.yml
vendored
3
.github/workflows/trigger.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Trigger Repos
|
name: Trigger Repos
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
branches: master
|
branches: master
|
||||||
release:
|
release:
|
||||||
@ -22,7 +23,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Push to tinyusb_src
|
- name: Push to tinyusb_src
|
||||||
run: |
|
run: |
|
||||||
|
61
.gitignore
vendored
61
.gitignore
vendored
@ -12,7 +12,7 @@ latex
|
|||||||
*.ind
|
*.ind
|
||||||
.env
|
.env
|
||||||
.settings/
|
.settings/
|
||||||
.idea/
|
.vscode/
|
||||||
.gdb_history
|
.gdb_history
|
||||||
/examples/*/*/build*
|
/examples/*/*/build*
|
||||||
test_old/
|
test_old/
|
||||||
@ -21,10 +21,69 @@ _build
|
|||||||
/examples/*/*/ses
|
/examples/*/*/ses
|
||||||
/examples/*/*/ozone
|
/examples/*/*/ozone
|
||||||
/examples/obsolete
|
/examples/obsolete
|
||||||
|
hw/bsp/**/cubemx/*/
|
||||||
|
.mxproject
|
||||||
# coverity intermediate files
|
# coverity intermediate files
|
||||||
cov-int
|
cov-int
|
||||||
# cppcheck build directories
|
# cppcheck build directories
|
||||||
*-build-dir
|
*-build-dir
|
||||||
/_bin/
|
/_bin/
|
||||||
__pycache__
|
__pycache__
|
||||||
|
cmake-build-*
|
||||||
|
sdkconfig
|
||||||
|
|
||||||
|
# submodules
|
||||||
|
hw/mcu/allwinner
|
||||||
|
hw/mcu/bridgetek/ft9xx/ft90x-sdk
|
||||||
|
hw/mcu/broadcom
|
||||||
|
hw/mcu/gd/nuclei-sdk
|
||||||
|
hw/mcu/infineon/mtb-xmclib-cat3
|
||||||
|
hw/mcu/microchip
|
||||||
|
hw/mcu/mindmotion/mm32sdk
|
||||||
|
hw/mcu/nordic/nrfx
|
||||||
|
hw/mcu/nuvoton
|
||||||
|
hw/mcu/nxp/lpcopen
|
||||||
|
hw/mcu/nxp/mcux-sdk
|
||||||
|
hw/mcu/nxp/nxp_sdk
|
||||||
|
hw/mcu/raspberry_pi/Pico-PIO-USB
|
||||||
|
hw/mcu/renesas/rx
|
||||||
|
hw/mcu/silabs/cmsis-dfp-efm32gg12b
|
||||||
|
hw/mcu/sony/cxd56/spresense-exported-sdk
|
||||||
|
hw/mcu/st/cmsis_device_f0
|
||||||
|
hw/mcu/st/cmsis_device_f1
|
||||||
|
hw/mcu/st/cmsis_device_f2
|
||||||
|
hw/mcu/st/cmsis_device_f3
|
||||||
|
hw/mcu/st/cmsis_device_f4
|
||||||
|
hw/mcu/st/cmsis_device_f7
|
||||||
|
hw/mcu/st/cmsis_device_g0
|
||||||
|
hw/mcu/st/cmsis_device_g4
|
||||||
|
hw/mcu/st/cmsis_device_h7
|
||||||
|
hw/mcu/st/cmsis_device_l0
|
||||||
|
hw/mcu/st/cmsis_device_l1
|
||||||
|
hw/mcu/st/cmsis_device_l4
|
||||||
|
hw/mcu/st/cmsis_device_l5
|
||||||
|
hw/mcu/st/cmsis_device_u5
|
||||||
|
hw/mcu/st/cmsis_device_wb
|
||||||
|
hw/mcu/st/stm32f0xx_hal_driver
|
||||||
|
hw/mcu/st/stm32f1xx_hal_driver
|
||||||
|
hw/mcu/st/stm32f2xx_hal_driver
|
||||||
|
hw/mcu/st/stm32f3xx_hal_driver
|
||||||
|
hw/mcu/st/stm32f4xx_hal_driver
|
||||||
|
hw/mcu/st/stm32f7xx_hal_driver
|
||||||
|
hw/mcu/st/stm32g0xx_hal_driver
|
||||||
|
hw/mcu/st/stm32g4xx_hal_driver
|
||||||
|
hw/mcu/st/stm32h7xx_hal_driver
|
||||||
|
hw/mcu/st/stm32l0xx_hal_driver
|
||||||
|
hw/mcu/st/stm32l1xx_hal_driver
|
||||||
|
hw/mcu/st/stm32l4xx_hal_driver
|
||||||
|
hw/mcu/st/stm32l5xx_hal_driver
|
||||||
|
hw/mcu/st/stm32u5xx_hal_driver
|
||||||
|
hw/mcu/st/stm32wbxx_hal_driver
|
||||||
|
hw/mcu/ti
|
||||||
|
hw/mcu/wch/ch32v307
|
||||||
|
hw/mcu/wch/ch32f20x
|
||||||
|
lib/CMSIS_5
|
||||||
|
lib/FreeRTOS-Kernel
|
||||||
|
lib/lwip
|
||||||
|
lib/sct_neopixel
|
||||||
|
tools/uf2
|
||||||
|
160
.gitmodules
vendored
160
.gitmodules
vendored
@ -1,160 +0,0 @@
|
|||||||
[submodule "hw/mcu/nordic/nrfx"]
|
|
||||||
path = hw/mcu/nordic/nrfx
|
|
||||||
url = https://github.com/NordicSemiconductor/nrfx.git
|
|
||||||
[submodule "tools/uf2"]
|
|
||||||
path = tools/uf2
|
|
||||||
url = https://github.com/microsoft/uf2.git
|
|
||||||
[submodule "hw/mcu/sony/cxd56/spresense-exported-sdk"]
|
|
||||||
path = hw/mcu/sony/cxd56/spresense-exported-sdk
|
|
||||||
url = https://github.com/sonydevworld/spresense-exported-sdk.git
|
|
||||||
[submodule "hw/mcu/ti"]
|
|
||||||
path = hw/mcu/ti
|
|
||||||
url = https://github.com/hathach/ti_driver.git
|
|
||||||
[submodule "hw/mcu/microchip"]
|
|
||||||
path = hw/mcu/microchip
|
|
||||||
url = https://github.com/hathach/microchip_driver.git
|
|
||||||
[submodule "hw/mcu/nuvoton"]
|
|
||||||
path = hw/mcu/nuvoton
|
|
||||||
url = https://github.com/majbthrd/nuc_driver.git
|
|
||||||
[submodule "lib/lwip"]
|
|
||||||
path = lib/lwip
|
|
||||||
url = https://github.com/lwip-tcpip/lwip.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f4"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f4
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f4.git
|
|
||||||
[submodule "hw/mcu/st/stm32f4xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f4xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f0"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f0
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f0.git
|
|
||||||
[submodule "hw/mcu/st/stm32f0xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f0xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f1"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f1
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f1.git
|
|
||||||
[submodule "hw/mcu/st/stm32f1xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f1xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f2"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f2
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f2.git
|
|
||||||
[submodule "hw/mcu/st/stm32f2xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f2xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f3"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f3
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f3.git
|
|
||||||
[submodule "hw/mcu/st/stm32f3xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f3xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_f7"]
|
|
||||||
path = hw/mcu/st/cmsis_device_f7
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_f7.git
|
|
||||||
[submodule "hw/mcu/st/stm32f7xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32f7xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32f7xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_h7"]
|
|
||||||
path = hw/mcu/st/cmsis_device_h7
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_h7.git
|
|
||||||
[submodule "hw/mcu/st/stm32h7xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32h7xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_l0"]
|
|
||||||
path = hw/mcu/st/cmsis_device_l0
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_l0.git
|
|
||||||
[submodule "hw/mcu/st/stm32l0xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32l0xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32l0xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_l1"]
|
|
||||||
path = hw/mcu/st/cmsis_device_l1
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_l1.git
|
|
||||||
[submodule "hw/mcu/st/stm32l1xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32l1xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32l1xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_l4"]
|
|
||||||
path = hw/mcu/st/cmsis_device_l4
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_l4.git
|
|
||||||
[submodule "hw/mcu/st/stm32l4xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32l4xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_g0"]
|
|
||||||
path = hw/mcu/st/cmsis_device_g0
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_g0.git
|
|
||||||
[submodule "hw/mcu/st/stm32g0xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32g0xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_g4"]
|
|
||||||
path = hw/mcu/st/cmsis_device_g4
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_g4.git
|
|
||||||
[submodule "hw/mcu/st/stm32g4xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32g4xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_l5"]
|
|
||||||
path = hw/mcu/st/cmsis_device_l5
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_l5.git
|
|
||||||
[submodule "hw/mcu/st/stm32l5xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32l5xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32l5xx_hal_driver.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_wb"]
|
|
||||||
path = hw/mcu/st/cmsis_device_wb
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_wb.git
|
|
||||||
[submodule "hw/mcu/st/stm32wbxx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32wbxx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32wbxx_hal_driver.git
|
|
||||||
[submodule "lib/sct_neopixel"]
|
|
||||||
path = lib/sct_neopixel
|
|
||||||
url = https://github.com/gsteiert/sct_neopixel
|
|
||||||
[submodule "lib/FreeRTOS-Kernel"]
|
|
||||||
path = lib/FreeRTOS-Kernel
|
|
||||||
url = https://github.com/FreeRTOS/FreeRTOS-Kernel.git
|
|
||||||
[submodule "lib/CMSIS_5"]
|
|
||||||
path = lib/CMSIS_5
|
|
||||||
url = https://github.com/ARM-software/CMSIS_5.git
|
|
||||||
[submodule "hw/mcu/silabs/cmsis-dfp-efm32gg12b"]
|
|
||||||
path = hw/mcu/silabs/cmsis-dfp-efm32gg12b
|
|
||||||
url = https://github.com/cmsis-packs/cmsis-dfp-efm32gg12b
|
|
||||||
[submodule "hw/mcu/renesas/rx"]
|
|
||||||
path = hw/mcu/renesas/rx
|
|
||||||
url = https://github.com/kkitayam/rx_device.git
|
|
||||||
[submodule "hw/mcu/nxp/lpcopen"]
|
|
||||||
path = hw/mcu/nxp/lpcopen
|
|
||||||
url = https://github.com/hathach/nxp_lpcopen.git
|
|
||||||
[submodule "hw/mcu/nxp/mcux-sdk"]
|
|
||||||
path = hw/mcu/nxp/mcux-sdk
|
|
||||||
url = https://github.com/NXPmicro/mcux-sdk.git
|
|
||||||
[submodule "hw/mcu/nxp/nxp_sdk"]
|
|
||||||
path = hw/mcu/nxp/nxp_sdk
|
|
||||||
url = https://github.com/hathach/nxp_sdk.git
|
|
||||||
[submodule "hw/mcu/gd/nuclei-sdk"]
|
|
||||||
path = hw/mcu/gd/nuclei-sdk
|
|
||||||
url = https://github.com/Nuclei-Software/nuclei-sdk.git
|
|
||||||
[submodule "hw/mcu/bridgetek/ft9xx/ft90x-sdk"]
|
|
||||||
path = hw/mcu/bridgetek/ft9xx/ft90x-sdk
|
|
||||||
url = https://github.com/BRTSG-FOSS/ft90x-sdk
|
|
||||||
[submodule "hw/mcu/mindmotion/mm32sdk"]
|
|
||||||
path = hw/mcu/mindmotion/mm32sdk
|
|
||||||
url = https://github.com/hathach/mm32sdk.git
|
|
||||||
[submodule "hw/mcu/broadcom"]
|
|
||||||
path = hw/mcu/broadcom
|
|
||||||
url = https://github.com/adafruit/broadcom-peripherals.git
|
|
||||||
branch = main-build
|
|
||||||
[submodule "hw/mcu/infineon/mtb-xmclib-cat3"]
|
|
||||||
path = hw/mcu/infineon/mtb-xmclib-cat3
|
|
||||||
url = https://github.com/Infineon/mtb-xmclib-cat3.git
|
|
||||||
[submodule "hw/mcu/allwinner"]
|
|
||||||
path = hw/mcu/allwinner
|
|
||||||
url = https://github.com/hathach/allwinner_driver.git
|
|
||||||
[submodule "hw/mcu/wch/ch32v307"]
|
|
||||||
path = hw/mcu/wch/ch32v307
|
|
||||||
url = https://github.com/openwch/ch32v307.git
|
|
||||||
[submodule "hw/mcu/raspberry_pi/Pico-PIO-USB"]
|
|
||||||
path = hw/mcu/raspberry_pi/Pico-PIO-USB
|
|
||||||
url = https://github.com/sekigon-gonnoc/Pico-PIO-USB.git
|
|
||||||
[submodule "hw/mcu/st/cmsis_device_u5"]
|
|
||||||
path = hw/mcu/st/cmsis_device_u5
|
|
||||||
url = https://github.com/STMicroelectronics/cmsis_device_u5
|
|
||||||
[submodule "hw/mcu/st/stm32u5xx_hal_driver"]
|
|
||||||
path = hw/mcu/st/stm32u5xx_hal_driver
|
|
||||||
url = https://github.com/STMicroelectronics/stm32u5xx_hal_driver
|
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
86
.idea/cmake.xml
generated
Normal file
86
.idea/cmake.xml
generated
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CMakeSharedSettings">
|
||||||
|
<configurations>
|
||||||
|
<configuration PROFILE_NAME="pico" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico -DLOG=2" />
|
||||||
|
<configuration PROFILE_NAME="feather_rp2040" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pico_sdk -DPICO_BOARD=adafruit_feather_rp2040 -DLOG=2 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="metro_rp2040" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pico_sdk -DPICO_BOARD=adafruit_metro_rp2040 -DLOG=2 -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="feather esp32s2" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_feather_esp32s2 -DMAX3421_HOST=1 -DLOG=2">
|
||||||
|
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
<envs>
|
||||||
|
<env name="ESPBAUD" value="1500000" />
|
||||||
|
</envs>
|
||||||
|
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
</configuration>
|
||||||
|
<configuration PROFILE_NAME="metro esp32s2" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_metro_esp32s2 -DMAX3421_HOST=1 -DLOG=2">
|
||||||
|
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
<envs>
|
||||||
|
<env name="ESPBAUD" value="1500000" />
|
||||||
|
</envs>
|
||||||
|
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
</configuration>
|
||||||
|
<configuration PROFILE_NAME="kaluga" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_kaluga_1 -DMAX3421_HOST=1 -DLOG=2">
|
||||||
|
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
<envs>
|
||||||
|
<env name="ESPBAUD" value="1500000" />
|
||||||
|
</envs>
|
||||||
|
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
</configuration>
|
||||||
|
<configuration PROFILE_NAME="feather esp32s3" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=adafruit_feather_esp32s3 -DMAX3421_HOST=1 -DLOG=2">
|
||||||
|
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
<envs>
|
||||||
|
<env name="ESPBAUD" value="1500000" />
|
||||||
|
</envs>
|
||||||
|
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
</configuration>
|
||||||
|
<configuration PROFILE_NAME="espressif_s3_devkitc" ENABLED="false" TOOLCHAIN_NAME="ESP-IDF" GENERATION_OPTIONS="-DBOARD=espressif_s3_devkitc -DMAX3421_HOST=1 -DLOG=2">
|
||||||
|
<ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
<envs>
|
||||||
|
<env name="ESPBAUD" value="1500000" />
|
||||||
|
</envs>
|
||||||
|
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||||
|
</configuration>
|
||||||
|
<configuration PROFILE_NAME="feather_m0_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_m0_express -DLOG=3 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="metro_m0_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m0_express -DLOG=3 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="feather_m4_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_m4_express -DLOG=3 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="metro_m4_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m4_express -DLOG=3 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="feather_nrf52840_express" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=feather_nrf52840_express -DLOG=3 -DLOGGER=RTT -DMAX3421_HOST=1" />
|
||||||
|
<configuration PROFILE_NAME="pca10056" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pca10056 -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="pca10095" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=pca10095 -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="metro m7 1011 sd" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m7_1011_sd -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="metro m7 1011" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=metro_m7_1011 -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="rt1010 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1010_evk -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="rt1060 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1060_evk -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="rt1170 evkb" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1170_evkb -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="mcb1800" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mcb1800 -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="ea4088 quickstart" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ea4088_quickstart -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="ea4357" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ea4357 -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="lpc54628" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso54628 -DLOG=4 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="lpc55s69" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso55s69 -DLOG=4 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="mcxn947" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mcxn947brk -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="frdm_kl25z" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=frdm_kl25z -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="stm32f072disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f072disco" />
|
||||||
|
<configuration PROFILE_NAME="stm32f103_mini_2" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f103_mini_2" />
|
||||||
|
<configuration PROFILE_NAME="stm32f411disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f411disco -DLOG=2 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="stm32f769disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32f769disco -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="stm32h563nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h563nucleo -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="stm32h743eval" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743eval -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="stm32h743nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32h743nucleo -DLOG=3" />
|
||||||
|
<configuration PROFILE_NAME="stm32l476disco" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32l476disco" />
|
||||||
|
<configuration PROFILE_NAME="stm32g0b1nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32g0b1nucleo" />
|
||||||
|
<configuration PROFILE_NAME="stm32g474nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32g474nucleo" />
|
||||||
|
<configuration PROFILE_NAME="b_g474e_dpow1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=b_g474e_dpow1 -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="b_g474e_dpow1 iar" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=b_g474e_dpow1 -DTOOLCHAIN=iar" />
|
||||||
|
<configuration PROFILE_NAME="stm32u575nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32u575nucleo -DLOG=3" />
|
||||||
|
<configuration PROFILE_NAME="stm32u5a5nucleo" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=stm32u5a5nucleo -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="ra2a1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra2a1_ek -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="ra4m1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra4m1_ek -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="ra6m1" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m1_ek -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="ra6m5" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m5_ek -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1" />
|
||||||
|
<configuration PROFILE_NAME="ra6m5 PORT0" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=ra6m5_ek -DLOG=3 -DLOGGER=RTT -DTRACE_ETM=1 -DPORT=0" />
|
||||||
|
<configuration PROFILE_NAME="uno_r4" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=uno_r4 -DLOG=4 -DLOGGER=RTT" />
|
||||||
|
<configuration PROFILE_NAME="portenta_c33" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=portenta_c33 -DLOG=3" />
|
||||||
|
<configuration PROFILE_NAME="lpcxpresso1769" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=lpcxpresso1769 -DLOG=3 -DLOGGER=RTT" />
|
||||||
|
</configurations>
|
||||||
|
</component>
|
||||||
|
</project>
|
10
.idea/runConfigurations/kl25.xml
generated
Normal file
10
.idea/runConfigurations/kl25.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="kl25" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-device "MKL25Z128xxx4" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/lpc1857.xml
generated
Normal file
10
.idea/runConfigurations/lpc1857.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="lpc1857" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="lpc" PROGRAM_PARAMS="-device "lpc1857" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/lpc4088.xml
generated
Normal file
10
.idea/runConfigurations/lpc4088.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="lpc4088" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="lpc" PROGRAM_PARAMS="-device "lpc4088" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/lpc54628.xml
generated
Normal file
10
.idea/runConfigurations/lpc54628.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="lpc54628" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="lpc" PROGRAM_PARAMS="-device "LPC54628J512" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/lpc55s69.xml
generated
Normal file
10
.idea/runConfigurations/lpc55s69.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="lpc55s69" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="lpc" PROGRAM_PARAMS="-device "lpc55s69" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/mcx947.xml
generated
Normal file
10
.idea/runConfigurations/mcx947.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="mcx947" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-device "MCXN947_M33_0" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $ProjectFileDir$/hw/bsp/mcx/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/nrf52840.xml
generated
Normal file
10
.idea/runConfigurations/nrf52840.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="nrf52840" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-select usb=752001685 -device "nrf52840_xxaa" -if swd -speed 8000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/nrf5340.xml
generated
Normal file
10
.idea/runConfigurations/nrf5340.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="nrf5340" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-select usb=752001685 -device "nrf5340_xxaa_app" -if swd -speed 16000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/ra4m1.xml
generated
Normal file
10
.idea/runConfigurations/ra4m1.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="ra4m1" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA4M1AB" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/ra6m1.xml
generated
Normal file
10
.idea/runConfigurations/ra6m1.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="ra6m1" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA6M1AD" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/ra6m5.xml
generated
Normal file
10
.idea/runConfigurations/ra6m5.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="ra6m5" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA6M5BH" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/rp2040.xml
generated
Normal file
10
.idea/runConfigurations/rp2040.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="rp2040" type="com.jetbrains.cidr.embedded.openocd.conf.type" factoryName="com.jetbrains.cidr.embedded.openocd.conf.factory" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="rp2040" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<openocd version="1" gdb-port="3333" telnet-port="4444" board-config="$PROJECT_DIR$/hw/bsp/rp2040/rp2040-openocd.cfg" reset-type="INIT" download-type="UPDATED_ONLY">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</openocd>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/rt1010.xml
generated
Normal file
10
.idea/runConfigurations/rt1010.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="rt1010" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="imxrt" PROGRAM_PARAMS="-device "MIMXRT1011xxx5A" -if swd -speed 50000 -port 25321 -nogui -singlerun -jlinkscriptfile $ProjectFileDir$/hw/bsp/imxrt/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/rt1060.xml
generated
Normal file
10
.idea/runConfigurations/rt1060.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="rt1060" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="imxrt" PROGRAM_PARAMS="-device "MIMXRT1062xxx5A" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/samd21g18.xml
generated
Normal file
10
.idea/runConfigurations/samd21g18.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="samd21g18" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-device "ATSAMD21G18" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/samd51j19.xml
generated
Normal file
10
.idea/runConfigurations/samd51j19.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="samd51j19" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" PROGRAM_PARAMS="-device "ATSAMD51J19A" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/stlink.xml
generated
Normal file
10
.idea/runConfigurations/stlink.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="stlink" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-p 28833 -cp "/opt/st/stm32cubeide_1.12.1/plugins/com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.linux64_2.1.100.202311100844/tools/bin" --frequency 8000 --swd" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="stm32h563nucleo" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::28833" executable="/opt/st/stm32cubeide_1.12.1/plugins/com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.linux64_2.1.100.202310302101/tools/bin/ST-LINK_gdbserver" warmup-ms="0" download-type="ALWAYS" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/stm32g474.xml
generated
Normal file
10
.idea/runConfigurations/stm32g474.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="stm32g474" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32g474re" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/stm32h743.xml
generated
Normal file
10
.idea/runConfigurations/stm32h743.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="stm32h743" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="stm32" PROGRAM_PARAMS="-device "stm32h743xi" -if swd -speed 50000 -port 25321 -nogui -singlerun" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc_freertos" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc_freertos">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
10
.idea/runConfigurations/uno_r4.xml
generated
Normal file
10
.idea/runConfigurations/uno_r4.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="uno_r4" type="com.jetbrains.cidr.embedded.customgdbserver.type" factoryName="com.jetbrains.cidr.embedded.customgdbserver.factory" folderName="renesas" PROGRAM_PARAMS="-device "R7FA4M1AB" -if swd -speed 20000 -port 25321 -nogui -singlerun -jlinkscriptfile $PROJECT_DIR$/hw/bsp/ra/debug.jlinkscript" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="tinyusb_examples" TARGET_NAME="cdc_msc" CONFIG_NAME="metro m7 1011 sd" version="1" RUN_TARGET_PROJECT_NAME="tinyusb_examples" RUN_TARGET_NAME="cdc_msc">
|
||||||
|
<custom-gdb-server version="1" gdb-connect="tcp::25321" executable="/usr/bin/JLinkGDBServer" warmup-ms="0" download-type="UPDATED_ONLY" reset-cmd="monitor reset" reset-type="AFTER_DOWNLOAD">
|
||||||
|
<debugger kind="GDB" isBundled="true" />
|
||||||
|
</custom-gdb-server>
|
||||||
|
<method v="2">
|
||||||
|
<option name="CLION.COMPOUND.BUILD" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
42
.pre-commit-config.yaml
Normal file
42
.pre-commit-config.yaml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2020 Diego Elio Pettenò
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Unlicense
|
||||||
|
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.4.0
|
||||||
|
hooks:
|
||||||
|
- id: check-yaml
|
||||||
|
- id: trailing-whitespace
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
hw/bsp/mcx/sdk/
|
||||||
|
)
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
.idea/|
|
||||||
|
hw/bsp/mcx/sdk/
|
||||||
|
)
|
||||||
|
- id: forbid-submodules
|
||||||
|
|
||||||
|
- repo: https://github.com/codespell-project/codespell
|
||||||
|
rev: v2.2.4
|
||||||
|
hooks:
|
||||||
|
- id: codespell
|
||||||
|
args: [-w]
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
lib/|
|
||||||
|
hw/bsp/mcx/sdk/
|
||||||
|
)
|
||||||
|
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: unit-test
|
||||||
|
name: unit-test
|
||||||
|
files: ^(src/|test/unit-test/)
|
||||||
|
entry: sh -c "cd test/unit-test && ceedling test:all"
|
||||||
|
pass_filenames: false
|
||||||
|
types_or: [c, header]
|
||||||
|
language: system
|
@ -4,15 +4,21 @@
|
|||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
|
|
||||||
|
# Set the version of Python and other tools you might need
|
||||||
|
build:
|
||||||
|
os: ubuntu-22.04
|
||||||
|
tools:
|
||||||
|
python: "3.11"
|
||||||
|
|
||||||
|
# Build documentation in the docs/ directory with Sphinx
|
||||||
sphinx:
|
sphinx:
|
||||||
configuration: docs/conf.py
|
configuration: docs/conf.py
|
||||||
|
|
||||||
|
# Optionally declare the Python requirements required to build your docs
|
||||||
python:
|
python:
|
||||||
version: 3.8
|
|
||||||
install:
|
install:
|
||||||
- requirements: docs/requirements.txt
|
- requirements: docs/requirements.txt
|
||||||
|
|
||||||
submodules:
|
submodules:
|
||||||
include: []
|
include: []
|
||||||
recursive: false
|
recursive: false
|
||||||
|
|
@ -119,6 +119,7 @@ Notable contributors
|
|||||||
|
|
||||||
- Port DCD Synopsys to support Silabs EFM32GG12 with SLTB009A board
|
- Port DCD Synopsys to support Silabs EFM32GG12 with SLTB009A board
|
||||||
- Rewrite documentation in rst and setup for readthedocs
|
- Rewrite documentation in rst and setup for readthedocs
|
||||||
|
- Generalize Renesas driver and support RA family with EK-RA4M3 board
|
||||||
|
|
||||||
|
|
||||||
`Raspberry Pi Team <https://github.com/raspberrypi>`__
|
`Raspberry Pi Team <https://github.com/raspberrypi>`__
|
||||||
@ -199,6 +200,8 @@ Notable contributors
|
|||||||
- Add new DCD port for Microchip SAMx7x
|
- Add new DCD port for Microchip SAMx7x
|
||||||
- Add IAR compiler support
|
- Add IAR compiler support
|
||||||
- Improve UAC2, CDC, DFU class driver
|
- Improve UAC2, CDC, DFU class driver
|
||||||
|
- Improve stm32_fsdev, chipidea_ci_hs, lpc_ip3511 DCD
|
||||||
|
- Host IAR Build CI & hardware in the loop (HITL) test
|
||||||
|
|
||||||
|
|
||||||
`Full contributors list <https://github.com/hathach/tinyusb/contributors>`__
|
`Full contributors list <https://github.com/hathach/tinyusb/contributors>`__
|
||||||
|
156
README.rst
156
README.rst
@ -1,14 +1,24 @@
|
|||||||
|
|Build Status| |Documentation Status| |Fuzzing Status| |License|
|
||||||
|
|
||||||
|
Sponsors
|
||||||
|
========
|
||||||
|
|
||||||
|
TinyUSB is funded by: Adafruit. Purchasing products from them helps to support this project.
|
||||||
|
|
||||||
|
.. figure:: docs/assets/adafruit_logo.svg
|
||||||
|
:alt: Adafruit Logo
|
||||||
|
:target: https://www.adafruit.com
|
||||||
|
|
||||||
|
TinyUSB Project
|
||||||
|
===============
|
||||||
|
|
||||||
.. figure:: docs/assets/logo.svg
|
.. figure:: docs/assets/logo.svg
|
||||||
:alt: TinyUSB
|
:alt: TinyUSB
|
||||||
|
|
||||||
|Build Status| |Documentation Status| |Fuzzing Status| |License|
|
|
||||||
|
|
||||||
TinyUSB is an open-source cross-platform USB Host/Device stack for
|
TinyUSB is an open-source cross-platform USB Host/Device stack for
|
||||||
embedded system, designed to be memory-safe with no dynamic allocation
|
embedded system, designed to be memory-safe with no dynamic allocation
|
||||||
and thread-safe with all interrupt events are deferred then handled in
|
and thread-safe with all interrupt events are deferred then handled in
|
||||||
the non-ISR task function.
|
the non-ISR task function. Check out the online `documentation <https://docs.tinyusb.org/>`__ for more details.
|
||||||
|
|
||||||
Please take a look at the online `documentation <https://docs.tinyusb.org/>`__.
|
|
||||||
|
|
||||||
.. figure:: docs/assets/stack.svg
|
.. figure:: docs/assets/stack.svg
|
||||||
:width: 500px
|
:width: 500px
|
||||||
@ -18,45 +28,28 @@ Please take a look at the online `documentation <https://docs.tinyusb.org/>`__.
|
|||||||
|
|
||||||
.
|
.
|
||||||
├── docs # Documentation
|
├── docs # Documentation
|
||||||
├── examples # Sample with Makefile build support
|
├── examples # Examples with make and cmake build system
|
||||||
├── hw
|
├── hw
|
||||||
│ ├── bsp # Supported boards source files
|
│ ├── bsp # Supported boards source files
|
||||||
│ └── mcu # Low level mcu core & peripheral drivers
|
│ └── mcu # Low level mcu core & peripheral drivers
|
||||||
├── lib # Sources from 3rd party such as freeRTOS, fatfs ...
|
├── lib # Sources from 3rd party such as freeRTOS, fatfs ...
|
||||||
├── src # All sources files for TinyUSB stack itself.
|
├── src # All sources files for TinyUSB stack itself.
|
||||||
├── test # Unit tests for the stack
|
├── test # Tests: unit test, fuzzing, hardware test
|
||||||
└── tools # Files used internally
|
└── tools # Files used internally
|
||||||
|
|
||||||
Supported MCUs
|
|
||||||
==============
|
|
||||||
|
|
||||||
The stack supports the following MCUs:
|
Getting started
|
||||||
|
===============
|
||||||
|
|
||||||
- **Allwinner:** F1C100s/F1C200s
|
See the `online documentation <https://docs.tinyusb.org>`_ for information about using TinyUSB and how it is implemented.
|
||||||
- **Broadcom:** BCM2837, BCM2711
|
|
||||||
- **Dialog:** DA1469x
|
|
||||||
- **Espressif:** ESP32-S2, ESP32-S3
|
|
||||||
- **GigaDevice:** GD32VF103
|
|
||||||
- **Infineon:** XMC4500
|
|
||||||
- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x
|
|
||||||
- **NordicSemi:** nRF52833, nRF52840, nRF5340
|
|
||||||
- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
|
|
||||||
- **NXP:**
|
|
||||||
|
|
||||||
- iMX RT Series: RT10xx, RT11xx
|
We use `GitHub Discussions <https://github.com/hathach/tinyusb/discussions>`_ as our forum. It is a great place to ask questions and advice from the community or to discuss your TinyUSB-based projects.
|
||||||
- Kinetis: KL25, K32L2
|
|
||||||
- LPC Series: 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55
|
|
||||||
|
|
||||||
- **Raspberry Pi:** RP2040
|
For bugs and feature requests, please `raise an issue <https://github.com/hathach/tinyusb/issues>`_ and follow the templates there.
|
||||||
- **Renesas:** RX63N, RX65N, RX72N
|
|
||||||
- **Silabs:** EFM32GG
|
|
||||||
- **Sony:** CXD56
|
|
||||||
- **ST:** STM32 series: F0, F1, F2, F3, F4, F7, H7, G4, L0, L1, L4, L4+, WB
|
|
||||||
- **TI:** MSP430, MSP432E4, TM4C123
|
|
||||||
- **ValentyUSB:** eptri
|
|
||||||
- **WCH:** CH32V307
|
|
||||||
|
|
||||||
Here is the list of `Supported Devices`_ that can be used with provided examples.
|
Check out `Getting Started`_ guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the `cdc_msc` example.
|
||||||
|
|
||||||
|
See `Porting`_ guide for adding support for new MCUs and boards.
|
||||||
|
|
||||||
Device Stack
|
Device Stack
|
||||||
============
|
============
|
||||||
@ -83,8 +76,19 @@ Host Stack
|
|||||||
|
|
||||||
- Human Interface Device (HID): Keyboard, Mouse, Generic
|
- Human Interface Device (HID): Keyboard, Mouse, Generic
|
||||||
- Mass Storage Class (MSC)
|
- Mass Storage Class (MSC)
|
||||||
|
- Communication Device Class: CDC-ACM
|
||||||
|
- Vendor serial over USB: FTDI, CP210x
|
||||||
- Hub with multiple-level support
|
- Hub with multiple-level support
|
||||||
|
|
||||||
|
Similar to the Device Stack, if you have a special requirement, `usbh_app_driver_get_cb()` can be used to write your own class driver without modifying the stack.
|
||||||
|
|
||||||
|
TypeC PD Stack
|
||||||
|
==============
|
||||||
|
|
||||||
|
- Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)
|
||||||
|
- Super early stage, only for testing purpose
|
||||||
|
- Only support STM32 G4
|
||||||
|
|
||||||
OS Abstraction layer
|
OS Abstraction layer
|
||||||
====================
|
====================
|
||||||
|
|
||||||
@ -95,6 +99,76 @@ TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR)
|
|||||||
- `RT-Thread <https://github.com/RT-Thread/rt-thread>`_: `repo <https://github.com/RT-Thread-packages/tinyusb>`_
|
- `RT-Thread <https://github.com/RT-Thread/rt-thread>`_: `repo <https://github.com/RT-Thread-packages/tinyusb>`_
|
||||||
- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its `own repo <https://github.com/hathach/mynewt-tinyusb-example>`_
|
- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its `own repo <https://github.com/hathach/mynewt-tinyusb-example>`_
|
||||||
|
|
||||||
|
Supported CPUs
|
||||||
|
==============
|
||||||
|
|
||||||
|
Following CPUs are supported, check out `Supported Devices`_ for comprehensive list of driver, features for each CPU.
|
||||||
|
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Manufacturer | Family |
|
||||||
|
+==============+============================================================+
|
||||||
|
| Allwinner | F1C100s/F1C200s |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Analog | MAX3421E (usb host shield) |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Brigetek | FT90x |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Broadcom | BCM2711, BCM2837 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Dialog | DA1469x |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Espressif | ESP32 S2, S3 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| GigaDevice | GD32VF103 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Infineon | XMC4500 |
|
||||||
|
+--------------+-----+------------------------------------------------------+
|
||||||
|
| MicroChip | SAM | D11, D21, D51, E5x, G55, L2x, E7x, S7x, V7x |
|
||||||
|
| +-----+------------------------------------------------------+
|
||||||
|
| | PIC | 24, 32mm, 32mk, 32mx, 32mz, dsPIC33 |
|
||||||
|
+--------------+-----+------------------------------------------------------+
|
||||||
|
| Mind Montion | mm32 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| NordicSemi | nRF52833, nRF52840, nRF5340 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Nuvoton | NUC 120, 121, 125, 126, 505 |
|
||||||
|
+--------------+---------+--------------------------------------------------+
|
||||||
|
| NXP | iMXRT | RT10xx, RT11xx |
|
||||||
|
| +---------+--------------------------------------------------+
|
||||||
|
| | Kinetis | KL, K32L2 |
|
||||||
|
| +---------+--------------------------------------------------+
|
||||||
|
| | LPC | 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55 |
|
||||||
|
| +---------+--------------------------------------------------+
|
||||||
|
| | MCX | N9 |
|
||||||
|
+--------------+---------+--------------------------------------------------+
|
||||||
|
| Raspberry Pi | RP2040 |
|
||||||
|
+--------------+-----+------------------------------------------------------+
|
||||||
|
| Renesas | RX | 63N, 65N, 72N |
|
||||||
|
+--------------+-----+------------------------------------------------------+
|
||||||
|
| | RA | 4M1, 4M3, 6M1, 6M5 |
|
||||||
|
+--------------+-----+------------------------------------------------------+
|
||||||
|
| Silabs | EFM32GG12 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| Sony | CXD56 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| ST STM32 | F0, F1, F2, F3, F4, F7, H7, G0, G4, L0, L1, L4, L4+ U5, WB |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| TI | MSP430, MSP432E4, TM4C123 |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| ValentyUSB | eptri |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
| WCH | CH32F20x, CH32V307, |
|
||||||
|
+--------------+------------------------------------------------------------+
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
All TinyUSB sources in the ``src`` folder are licensed under MIT
|
||||||
|
license, the `Full license is here <LICENSE>`__. However, each file can be
|
||||||
|
individually licensed especially those in ``lib`` and ``hw/mcu`` folder.
|
||||||
|
Please make sure you understand all the license term for files you use
|
||||||
|
in your project.
|
||||||
|
|
||||||
Docs
|
Docs
|
||||||
====
|
====
|
||||||
|
|
||||||
@ -108,6 +182,7 @@ Docs
|
|||||||
|
|
||||||
- `Supported Devices`_
|
- `Supported Devices`_
|
||||||
- `Getting Started`_
|
- `Getting Started`_
|
||||||
|
- `Dependencies`_
|
||||||
- `Concurrency`_
|
- `Concurrency`_
|
||||||
|
|
||||||
- `Contributing`_
|
- `Contributing`_
|
||||||
@ -116,17 +191,7 @@ Docs
|
|||||||
- `Structure`_
|
- `Structure`_
|
||||||
- `Porting`_
|
- `Porting`_
|
||||||
|
|
||||||
License
|
.. |Build Status| image:: https://github.com/hathach/tinyusb/actions/workflows/cmake_arm.yml/badge.svg
|
||||||
=======
|
|
||||||
|
|
||||||
All TinyUSB sources in the ``src`` folder are licensed under MIT
|
|
||||||
license, the `Full license is here <LICENSE>`__. However, each file can be
|
|
||||||
individually licensed especially those in ``lib`` and ``hw/mcu`` folder.
|
|
||||||
Please make sure you understand all the license term for files you use
|
|
||||||
in your project.
|
|
||||||
|
|
||||||
|
|
||||||
.. |Build Status| image:: https://github.com/hathach/tinyusb/workflows/Build/badge.svg
|
|
||||||
:target: https://github.com/hathach/tinyusb/actions
|
:target: https://github.com/hathach/tinyusb/actions
|
||||||
.. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest
|
.. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest
|
||||||
:target: https://docs.tinyusb.org/en/latest/?badge=latest
|
:target: https://docs.tinyusb.org/en/latest/?badge=latest
|
||||||
@ -142,6 +207,7 @@ in your project.
|
|||||||
.. _Reference: docs/reference/index.rst
|
.. _Reference: docs/reference/index.rst
|
||||||
.. _Supported Devices: docs/reference/supported.rst
|
.. _Supported Devices: docs/reference/supported.rst
|
||||||
.. _Getting Started: docs/reference/getting_started.rst
|
.. _Getting Started: docs/reference/getting_started.rst
|
||||||
|
.. _Dependencies: docs/reference/dependencies.rst
|
||||||
.. _Concurrency: docs/reference/concurrency.rst
|
.. _Concurrency: docs/reference/concurrency.rst
|
||||||
.. _Contributing: docs/contributing/index.rst
|
.. _Contributing: docs/contributing/index.rst
|
||||||
.. _Code of Conduct: CODE_OF_CONDUCT.rst
|
.. _Code of Conduct: CODE_OF_CONDUCT.rst
|
||||||
|
21
docs/assets/adafruit_logo.svg
Normal file
21
docs/assets/adafruit_logo.svg
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" style="enable-background:new 0 0 1382 768;" xml:space="preserve" width="144" height="80" viewBox="14 12.81 1350 455.81">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#0;}
|
||||||
|
</style>
|
||||||
|
<rect x="0" y="0" width="1382" height="768" fill="#fff"/>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M402.26,321.44c6.2-6.18,13.5-8.71,27.53-8.71h56.48c15.72,0,25,2.79,30.63,8.71 c7.04,6.99,9.28,15.16,9.28,41.28v104.52h-43v-17.68c-18.55,15.16-25.28,17.96-39.05,17.96h-21.09 c-13.76,0-21.07-1.68-27.24-7.83c-5.35-5.37-8.97-14.36-8.97-34.57c0-19.11,2.79-30.92,9.56-37.67c7-7.02,15.99-10.4,43.79-10.4 c14.91,0,30.36,1.71,43.01,4.5v-13.77c0-15.17-0.85-18.26-2.82-20.51c-1.98-1.71-4.78-2.28-11.24-2.28h-21.62 c-5.91,0-9.01,0.57-10.7,2.28c-2.24,2.25-2.53,5.34-3.09,14.61h-40.71C393.27,336.06,395.8,327.58,402.26,321.44z M483.18,428.75 v-25.84h-28.36c-16.32,0-20.25,1.12-23.06,3.91c-2.79,2.84-3.36,6.2-3.36,13.23c0,7.88,0.57,12.08,2.81,14.34 c2.25,2.22,5.33,2.5,10.95,2.5h12.07C463.24,436.88,469.13,436.06,483.18,428.75z"/>
|
||||||
|
<path class="st0" d="M642.16,467.24V447.3c-19.39,16.87-26.14,20.23-38.79,20.23h-16.28c-16.32,0-25.01-2.8-31.74-9.54 c-9.26-9.26-12.93-22.78-12.93-68.01c0-45.52,4.47-58.42,14.03-67.99c6.76-6.72,15.73-9.53,31.18-9.53h16.86 c12.92,0,19.95,2.81,37.67,17.69V259.9h43v207.34H642.16z M642.16,426.5v-73.6c-9.01-4.21-15.47-6.17-22.49-6.17h-15.43 c-7.88,0-11.57,1.11-14.08,3.64c-3.93,3.64-5.03,10.13-5.03,39.6c0,29.5,1.11,35.7,5.03,39.65c2.51,2.5,6.2,3.37,14.08,3.37 h14.02C625.57,432.99,632.58,431,642.16,426.5z"/>
|
||||||
|
<path class="st0" d="M716.83,321.44c6.17-6.18,13.49-8.71,27.52-8.71h56.49c15.73,0,24.99,2.79,30.64,8.71 c7.01,6.99,9.26,15.16,9.26,41.28v104.52h-43v-17.68c-18.54,15.16-25.29,17.96-39.05,17.96h-21.05 c-13.78,0-21.11-1.68-27.26-7.83c-5.35-5.37-9.01-14.36-9.01-34.57c0-19.11,2.81-30.92,9.56-37.67 c7.03-7.02,16.02-10.4,43.83-10.4c14.91,0,30.34,1.71,42.99,4.5v-13.77c0-15.17-0.84-18.26-2.81-20.51 c-1.94-1.71-4.79-2.28-11.24-2.28h-21.63c-5.91,0-8.99,0.57-10.67,2.28c-2.27,2.25-2.53,5.34-3.12,14.61h-40.72 C707.84,336.06,710.38,327.58,716.83,321.44z M797.74,428.75v-25.84h-28.35c-16.31,0-20.26,1.12-23.05,3.91 c-2.81,2.84-3.38,6.2-3.38,13.23c0,7.88,0.57,12.08,2.82,14.34c2.24,2.22,5.32,2.5,10.95,2.5h12.06 C777.8,436.88,783.7,436.06,797.74,428.75z"/>
|
||||||
|
<path class="st0" d="M856.96,467.24V305.41c0-19.39,2.55-29.52,9.01-35.96c6.47-6.46,13.77-9.55,30.34-9.55h35.41v32.57h-20.82 c-5.6,0-7.28,0.57-8.96,1.96c-1.42,1.71-1.96,4.75-1.96,12.38v6.19h31.75v33.44h-31.48v120.79H856.96z"/>
|
||||||
|
<path class="st0" d="M947.94,467.24V312.72h42.96v23.59c16.04-16.59,24.17-23.87,36.53-23.87H1044v42.42h-19.94 c-11.79,0-20.78,1.11-33.16,6.17v106.2H947.94z"/>
|
||||||
|
<path class="st0" d="M1199.3,312.72v154.52h-43.27v-20.48c-19.66,17.69-26.13,20.77-40.18,20.77h-18.82 c-13.49,0-21.92-2.8-27.79-8.71c-6.2-6.46-9-14.59-9-37.1v-109h43.27v104.24c0,6.44,0.83,10.11,3.36,12.66 c2.53,2.5,5.06,3.37,12.64,3.37h12.39c7.28,0,13.77-1.71,24.13-6.2V312.72H1199.3z"/>
|
||||||
|
<path class="st0" d="M1257.74,291.34h-42.42V259.9h42.42V291.34z M1257.74,467.24h-42.42V312.72h42.42V467.24z"/>
|
||||||
|
<path class="st0" d="M1349,433.26h-18.53c-7.06,0-9.86-0.59-11.24-1.7c-1.42-1.69-1.98-3.93-1.98-10.68v-74.44H1349v-33.72 h-31.75v-21.38h-43.27v21.38v33.72v85.97c0,15.73,1.96,22.76,7.03,27.81c5.34,5.35,13.19,8.4,27.82,8.4 c11.51,0,23.04-1.68,29.78-3.36l10.39-2.7V433.26z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path class="st0" d="M469.56,213.53c-1.48-9.33-6.54-12.01-18.77-15.91c-9.28-2.98-71.47-22.79-71.47-22.79 s-43.35-16.38-75.48,6.78c-4.32,3.13-8.81,6.68-13.31,10.47c3.78-4.5,7.34-8.99,10.45-13.31c23.09-32.18,6.65-75.5,6.65-75.5 s-19.91-62.13-22.92-71.44c-3.93-12.2-6.6-17.27-15.94-18.72c-9.36-1.48-13.45,2.5-20.94,12.92c-5.71,7.91-43.77,60.94-43.77,60.94 s-28.94,36.16-16.87,73.88c1.64,5.06,3.63,10.43,5.86,15.89c-3.13-5-6.3-9.76-9.46-14.05c-23.47-31.89-69.73-29.66-69.73-29.66 s-65.26-0.26-75.02-0.27c-12.83-0.05-18.46,0.95-22.76,9.37c-4.29,8.42-1.75,13.57,5.83,23.9c5.76,7.88,44.44,60.45,44.44,60.45 s25.44,38.72,65.03,38.88c5.32,0.03,11.02-0.22,16.88-0.64c-5.69,1.42-11.19,2.98-16.24,4.64c-37.59,12.46-49.74,57.17-49.74,57.17 s-20.42,61.99-23.46,71.27c-3.98,12.18-4.79,17.84,1.9,24.51c6.69,6.7,12.36,5.87,24.53,1.85c9.27-3.03,71.24-23.58,71.24-23.58 s44.66-12.24,57.04-49.85c1.68-5.06,3.2-10.55,4.63-16.22c-0.42,5.84-0.64,11.53-0.6,16.85c0.21,39.6,38.98,64.98,38.98,64.98 s52.64,38.55,60.52,44.31c10.37,7.55,15.5,10.08,23.93,5.78c8.41-4.3,9.39-9.93,9.33-22.77c-0.04-9.75-0.43-75.01-0.43-75.01 s2.18-46.27-29.76-69.68c-4.3-3.15-9.05-6.31-14.03-9.41c5.44,2.19,10.79,4.18,15.87,5.77c37.72,12.03,73.85-16.98,73.85-16.98 s52.94-38.15,60.85-43.87C467.06,226.99,471.04,222.86,469.56,213.53z M244.76,165.48c7.13,1.11,10.66,16.26,7.87,33.82 c-2.75,17.56-10.75,30.88-17.88,29.76c-7.11-1.13-10.65-16.26-7.89-33.82C229.63,177.69,237.64,164.36,244.76,165.48z M153.6,212.02c3.25-6.43,18.75-5.09,34.57,2.96c15.85,8.05,26.05,19.8,22.78,26.22c-3.27,6.41-18.75,5.1-34.59-2.95 C160.52,230.2,150.33,218.45,153.6,212.02z M201.66,299.59c-12.56,12.58-26.87,18.63-31.96,13.54 c-5.11-5.09,0.94-19.41,13.49-31.99c12.55-12.59,26.86-18.65,31.97-13.56C220.27,272.68,214.23,287.01,201.66,299.59z M270.82,329.06c-6.43,3.27-18.19-6.89-26.26-22.71c-8.08-15.84-9.43-31.34-3-34.61c6.41-3.27,18.15,6.9,26.24,22.73 C275.88,310.29,277.25,325.78,270.82,329.06z M287.49,255.75c-17.55,2.81-32.7-0.71-33.83-7.82c-1.13-7.12,12.18-15.16,29.74-17.95 c17.54-2.79,32.69,0.71,33.82,7.82C318.35,244.91,305.05,252.96,287.49,255.75z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
@ -62,9 +62,9 @@ Feel free to skip this until you want to verify your demo code is running. To im
|
|||||||
OS Abstraction Layer (OSAL)
|
OS Abstraction Layer (OSAL)
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The OS Abstraction Layer is responsible for providing basic data structures for TinyUSB that may allow for concurrency when used with an RTOS. Without an RTOS it simply handles concurrency issues between the main code and interrupts.
|
The OS Abstraction Layer is responsible for providing basic data structures for TinyUSB that may allow for concurrency when used with an RTOS. Without an RTOS it simply handles concurrency issues between the main code and interrupts. The code is almost entirely agnostic of MCU and lives in ``src/osal``.
|
||||||
|
|
||||||
The code is almost entirely agnostic of MCU and lives in ``src/osal``.
|
In RTOS configurations, tud_task()/tuh_task() blocks behind a synchronization structure when the event queue is empty, so that the scheduler may give the CPU to a different task. To take advantage of the library's capability to yield the CPU when there are no actionable USB device events, ensure that the `CFG_TUSB_OS` symbol is defined, e.g `OPT_OS_FREERTOS` enables the FreeRTOS scheduler to schedule other threads than that which calls `tud_task()/tuh_task()`.
|
||||||
|
|
||||||
Device API
|
Device API
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
@ -2,6 +2,148 @@
|
|||||||
Changelog
|
Changelog
|
||||||
*********
|
*********
|
||||||
|
|
||||||
|
0.16.0
|
||||||
|
======
|
||||||
|
|
||||||
|
- New controller driver: MAX3421e (usb host shield), rusb2 (Renesas USB2.0), ChipIdea fullspeed
|
||||||
|
- New MCUs: MCXn9, nRF5340, STM32: G0, G4, L5, U575, U5A5, RA6m5, CH32F20x
|
||||||
|
- Add initial TypeC PowerDelivery support with STM32G4
|
||||||
|
- Remove submodules and use python script to manage repo dependencies #1947
|
||||||
|
- Add CMake support for most families and boards, move build file from tools/ to examples/build_system
|
||||||
|
- Add ETM trace support with JTrace for nrf52840, nrf5340, mcb1857, stm32h743eval, ra6m5
|
||||||
|
- [osal] Make it possible to override the osal_task_delay() in osal_none
|
||||||
|
- Add CDC+UAC2 composite device example
|
||||||
|
- Enhance Hardware-in-the-loop (HIL) testing with more boards: rp2040, stm32l412nucleo, stm32f746disco, lpcxpresso43s67
|
||||||
|
|
||||||
|
Controller Driver (DCD & HCD)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
- Add new ISO endpoint API: dcd_edpt_iso_alloc() and dcd_edpt_iso_activate()
|
||||||
|
- Remove legacy driver st/synopsys
|
||||||
|
|
||||||
|
- EHCI
|
||||||
|
|
||||||
|
- [iMXRT] Add dache clean/invalidate when memory is in cacheable memory
|
||||||
|
- Fix portsc write issue which cause problem with enumeration
|
||||||
|
- Fix an issue when doing port reset write to portsc
|
||||||
|
- Fix port change detect is not recognized when power on with attached device
|
||||||
|
- Fix xfer failed with disconnected device as stalled
|
||||||
|
- Fix error on EHCI causes xfer error in non-queued qhd which cause memory fault
|
||||||
|
- Un-roll recursive hub removal with usbh queue
|
||||||
|
- Fix issue when removing queue head
|
||||||
|
- Implement hcd_edpt_abort_xfer()
|
||||||
|
- use standard USB complete interrupt instead of custom chipidea async/period interrupt to be more compatible with other ehci implementation
|
||||||
|
- refactor usb complete & error isr processing, merge, update. Fix EHCI QHD reuses QTD on wrong endpoint
|
||||||
|
- Improve bus reset, fix send_setup() not carried out if halted previously
|
||||||
|
- Fix clear qhd halted bit if not caused by STALL protocol to allow for next transfer
|
||||||
|
|
||||||
|
- ChipIdea Highspeed
|
||||||
|
|
||||||
|
- Fix control transfer issue when previous status and new setup complete in the same isr frame
|
||||||
|
- [imxrt] Add dcache support for cache region
|
||||||
|
|
||||||
|
- ChipIdea Fullspeed
|
||||||
|
|
||||||
|
- Generalize ChipIdea Fullspeed driver for mcxn9 (port 0), kinetis
|
||||||
|
|
||||||
|
- nrf
|
||||||
|
|
||||||
|
- Fix DMA race condition with ISO OUT transfer #1946
|
||||||
|
- Add support for nRF5340 with pca10095 board
|
||||||
|
|
||||||
|
- Renesas rusb2
|
||||||
|
|
||||||
|
- Generalize rusb2 driver for ra, rx mcus
|
||||||
|
- rework both dcd and hcd for better multiple ports support
|
||||||
|
- Add support for board with HS USB port: ra6m5 port1
|
||||||
|
|
||||||
|
- rp2040
|
||||||
|
|
||||||
|
- [dcd] Make writes to SIE_CTRL aware of concurrent access
|
||||||
|
- [hcd] add hcd_frame_number(), hcd_edpt_abort_xfer() for pio-usb host
|
||||||
|
|
||||||
|
- stm32 fsdev:
|
||||||
|
|
||||||
|
- Add STM32L5 support
|
||||||
|
- Implement dcd_edpt_iso_alloc() and dcd_edpt_iso_activate()
|
||||||
|
|
||||||
|
- OHCI
|
||||||
|
|
||||||
|
- Allows configurable root hub ports, handles SMM mode (Ref OHCI spec 5.1.1.3.3) and Bios mode (Ref OHCI spec 5.1.1.3.4)
|
||||||
|
- Fix FrameIntervalToggle must be toggled after we write the FrameInterval (Ref OHCI Spec 7.3.1)
|
||||||
|
- Wait PowerOnToPowerGoodTime after we enable power of the RH ports (Ref OHCI Spec 7.4.1)
|
||||||
|
- Generate port interrupts for devices already connected during init.
|
||||||
|
- Fix issue when removing queue head
|
||||||
|
- Disable MIE during IRQ processing and clear HccaDoneHead on completion as per OCHI Spec Page 80
|
||||||
|
|
||||||
|
Device Stack
|
||||||
|
------------
|
||||||
|
|
||||||
|
- Add optional hooks tud_event_hook_cb()
|
||||||
|
- Audio (UAC2)
|
||||||
|
|
||||||
|
- Fix feedback EP buffer alignment.
|
||||||
|
- Fix encoding, update example
|
||||||
|
- Improve IN transfer
|
||||||
|
|
||||||
|
- Bluetooth
|
||||||
|
|
||||||
|
- Add historical EP compatibility for Bluetooth HCI
|
||||||
|
|
||||||
|
- CDC
|
||||||
|
|
||||||
|
- Fix line_coding alignment
|
||||||
|
- Fix typo in cdc line coding enum
|
||||||
|
|
||||||
|
- MIDI
|
||||||
|
|
||||||
|
- Fix stream_write() always writes system messages to cable 0
|
||||||
|
- Fix incorrect NOTE_ON, NOTE_OFF definitions
|
||||||
|
|
||||||
|
- USBTMC: Fix tmc488 bit order
|
||||||
|
|
||||||
|
- Vendor: fix read()/write() race condition
|
||||||
|
|
||||||
|
- Video (UVC)
|
||||||
|
|
||||||
|
- Add the capability for video class to handle a bulk endpoint in the streaming interface.
|
||||||
|
|
||||||
|
Host Stack
|
||||||
|
----------
|
||||||
|
|
||||||
|
- USBH
|
||||||
|
|
||||||
|
- Add new APIs: tuh_interface_set(), tuh_task_event_ready(), tuh_edpt_abort_xfer(), tuh_rhport_reset_bus(), tuh_rhport_is_active()
|
||||||
|
- Fix issue when device generate multiple attach/detach/attach when plugging in
|
||||||
|
- Prefer application callback over built-in driver on transfer complete event
|
||||||
|
- Correct hcd_edpt_clear_stall() API signature
|
||||||
|
- Separate bus reset delay and contact debouncing delay in enumeration
|
||||||
|
- Support usbh_app_driver_get_cb() for application drivers
|
||||||
|
- Fix usbh enumeration removal race condition
|
||||||
|
- Add optional hooks tuh_event_hook_cb()
|
||||||
|
|
||||||
|
- CDC
|
||||||
|
|
||||||
|
- Breaking: change tuh_cdc_itf_get_info() to use tuh_itf_info_t instead of tuh_cdc_info_t
|
||||||
|
- Fix cdc host enumeration issue when device does not support line request
|
||||||
|
- Add support for vendor usb2uart serial: ftdi, cp210x, ch9102f
|
||||||
|
- Improve sync control API e.g tuh_cdc_set_control_line_state(), tuh_cdc_set_line_coding()
|
||||||
|
|
||||||
|
- HID
|
||||||
|
|
||||||
|
- Add new APIs tuh_hid_send_report(), tuh_hid_itf_get_info(), tuh_hid_receive_ready(), tuh_hid_send_ready(), tuh_hid_set_default_protocol()
|
||||||
|
- Change meaning of CFG_TUH_HID to total number of HID interfaces supported. Previously CFG_TUH_HID is max number of interfaces per device which is rather limited and consume more resources than needed.
|
||||||
|
|
||||||
|
- HUB
|
||||||
|
|
||||||
|
- Fix handling of empty "status change" interrupt
|
||||||
|
- Fix issue with hub status_change is not aligned
|
||||||
|
|
||||||
|
- MSC
|
||||||
|
|
||||||
|
- Fix bug in tuh_msc_ready()
|
||||||
|
- Fix host msc get maxlun not using aligned section memory
|
||||||
|
|
||||||
0.15.0
|
0.15.0
|
||||||
======
|
======
|
||||||
|
|
||||||
@ -93,7 +235,7 @@ Controller Driver (DCD & HCD)
|
|||||||
|
|
||||||
- CFG_TUD_ENABLED/CFG_TUH_ENABLED, CFG_TUD_MAX_SPEED/CFG_TUH_MAX_SPEED can be used to replace CFG_TUSB_RHPORT0_MODE/CFG_TUSB_RHPORT1_MODE
|
- CFG_TUD_ENABLED/CFG_TUH_ENABLED, CFG_TUD_MAX_SPEED/CFG_TUH_MAX_SPEED can be used to replace CFG_TUSB_RHPORT0_MODE/CFG_TUSB_RHPORT1_MODE
|
||||||
- tud_init(rphort), tuh_init(rhport) can be used to init stack on specified roothub port (controller) instead of tusb_init(void)
|
- tud_init(rphort), tuh_init(rhport) can be used to init stack on specified roothub port (controller) instead of tusb_init(void)
|
||||||
- Add dcd/hcd port specific defines TUP_ (stand for tinyusb port-specific)
|
- Add dcd/hcd port specific defines `TUP_` (stand for tinyusb port-specific)
|
||||||
- [dwc2]
|
- [dwc2]
|
||||||
|
|
||||||
- Update to support stm32 h72x, h73x with only 1 otg controller
|
- Update to support stm32 h72x, h73x with only 1 otg controller
|
||||||
|
64
docs/reference/dependencies.rst
Normal file
64
docs/reference/dependencies.rst
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
************
|
||||||
|
Dependencies
|
||||||
|
************
|
||||||
|
|
||||||
|
MCU low-level peripheral driver and external libraries for building TinyUSB examples
|
||||||
|
|
||||||
|
======================================== ============================================================== ======================================== =======================================================================================================================================================================================================
|
||||||
|
Local Path Repo Commit Required by
|
||||||
|
======================================== ============================================================== ======================================== =======================================================================================================================================================================================================
|
||||||
|
hw/mcu/allwinner https://github.com/hathach/allwinner_driver.git 8e5e89e8e132c0fd90e72d5422e5d3d68232b756 fc100s
|
||||||
|
hw/mcu/bridgetek/ft9xx/ft90x-sdk https://github.com/BRTSG-FOSS/ft90x-sdk.git 91060164afe239fcb394122e8bf9eb24d3194eb1 brtmm90x
|
||||||
|
hw/mcu/broadcom https://github.com/adafruit/broadcom-peripherals.git 08370086080759ed54ac1136d62d2ad24c6fa267 broadcom_32bit broadcom_64bit
|
||||||
|
hw/mcu/gd/nuclei-sdk https://github.com/Nuclei-Software/nuclei-sdk.git 7eb7bfa9ea4fbeacfafe1d5f77d5a0e6ed3922e7 gd32vf103
|
||||||
|
hw/mcu/infineon/mtb-xmclib-cat3 https://github.com/Infineon/mtb-xmclib-cat3.git daf5500d03cba23e68c2f241c30af79cd9d63880 xmc4000
|
||||||
|
hw/mcu/microchip https://github.com/hathach/microchip_driver.git 9e8b37e307d8404033bb881623a113931e1edf27 sam3x samd11 samd21 samd51 same5x same7x saml2x samg
|
||||||
|
hw/mcu/mindmotion/mm32sdk https://github.com/hathach/mm32sdk.git 0b79559eb411149d36e073c1635c620e576308d4 mm32
|
||||||
|
hw/mcu/nordic/nrfx https://github.com/NordicSemiconductor/nrfx.git 2527e3c8449cfd38aee41598e8af8492f410ed15 nrf
|
||||||
|
hw/mcu/nuvoton https://github.com/majbthrd/nuc_driver.git 2204191ec76283371419fbcec207da02e1bc22fa nuc
|
||||||
|
hw/mcu/nxp/lpcopen https://github.com/hathach/nxp_lpcopen.git 84e0bd3e43910aaf71eefd62075cf57495418312 lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43
|
||||||
|
hw/mcu/nxp/mcux-sdk https://github.com/hathach/mcux-sdk.git 950819b7de9b32f92c3edf396bc5ffb8d66e7009 kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx imxrt
|
||||||
|
hw/mcu/raspberry_pi/Pico-PIO-USB https://github.com/sekigon-gonnoc/Pico-PIO-USB.git d00a10a8c425d0d40f81b87169102944b01f3bb3 rp2040
|
||||||
|
hw/mcu/renesas/fsp https://github.com/renesas/fsp.git d52e5a6a59b7c638da860c2bb309b6e78e752ff8 ra
|
||||||
|
hw/mcu/renesas/rx https://github.com/kkitayam/rx_device.git 706b4e0cf485605c32351e2f90f5698267996023 rx
|
||||||
|
hw/mcu/silabs/cmsis-dfp-efm32gg12b https://github.com/cmsis-packs/cmsis-dfp-efm32gg12b.git f1c31b7887669cb230b3ea63f9b56769078960bc efm32
|
||||||
|
hw/mcu/sony/cxd56/spresense-exported-sdk https://github.com/sonydevworld/spresense-exported-sdk.git 2ec2a1538362696118dc3fdf56f33dacaf8f4067 spresense
|
||||||
|
hw/mcu/st/cmsis_device_f0 https://github.com/STMicroelectronics/cmsis_device_f0.git 2fc25ee22264bc27034358be0bd400b893ef837e stm32f0
|
||||||
|
hw/mcu/st/cmsis_device_f1 https://github.com/STMicroelectronics/cmsis_device_f1.git 6601104a6397299b7304fd5bcd9a491f56cb23a6 stm32f1
|
||||||
|
hw/mcu/st/cmsis_device_f2 https://github.com/STMicroelectronics/cmsis_device_f2.git 182fcb3681ce116816feb41b7764f1b019ce796f stm32f2
|
||||||
|
hw/mcu/st/cmsis_device_f3 https://github.com/STMicroelectronics/cmsis_device_f3.git 5e4ee5ed7a7b6c85176bb70a9fd3c72d6eb99f1b stm32f3
|
||||||
|
hw/mcu/st/cmsis_device_f4 https://github.com/STMicroelectronics/cmsis_device_f4.git 2615e866fa48fe1ff1af9e31c348813f2b19e7ec stm32f4
|
||||||
|
hw/mcu/st/cmsis_device_f7 https://github.com/STMicroelectronics/cmsis_device_f7.git fc676ef1ad177eb874eaa06444d3d75395fc51f4 stm32f7
|
||||||
|
hw/mcu/st/cmsis_device_g0 https://github.com/STMicroelectronics/cmsis_device_g0.git 3a23e1224417f3f2d00300ecd620495e363f2094 stm32g0
|
||||||
|
hw/mcu/st/cmsis_device_g4 https://github.com/STMicroelectronics/cmsis_device_g4.git ce822adb1dc552b3aedd13621edbc7fdae124878 stm32g4
|
||||||
|
hw/mcu/st/cmsis_device_h7 https://github.com/STMicroelectronics/cmsis_device_h7.git 60dc2c913203dc8629dc233d4384dcc41c91e77f stm32h7
|
||||||
|
hw/mcu/st/cmsis_device_l0 https://github.com/STMicroelectronics/cmsis_device_l0.git 06748ca1f93827befdb8b794402320d94d02004f stm32l0
|
||||||
|
hw/mcu/st/cmsis_device_l1 https://github.com/STMicroelectronics/cmsis_device_l1.git 7f16ec0a1c4c063f84160b4cc6bf88ad554a823e stm32l1
|
||||||
|
hw/mcu/st/cmsis_device_l4 https://github.com/STMicroelectronics/cmsis_device_l4.git 6ca7312fa6a5a460b5a5a63d66da527fdd8359a6 stm32l4
|
||||||
|
hw/mcu/st/cmsis_device_l5 https://github.com/STMicroelectronics/cmsis_device_l5.git d922865fc0326a102c26211c44b8e42f52c1e53d stm32l5
|
||||||
|
hw/mcu/st/cmsis_device_u5 https://github.com/STMicroelectronics/cmsis_device_u5.git 06d7edade7167b0eafdd550bf77cfc4fa98eae2e stm32u5
|
||||||
|
hw/mcu/st/cmsis_device_wb https://github.com/STMicroelectronics/cmsis_device_wb.git 9c5d1920dd9fabbe2548e10561d63db829bb744f stm32wb
|
||||||
|
hw/mcu/st/stm32f0xx_hal_driver https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git 0e95cd88657030f640a11e690a8a5186c7712ea5 stm32f0
|
||||||
|
hw/mcu/st/stm32f1xx_hal_driver https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git 1dd9d3662fb7eb2a7f7d3bc0a4c1dc7537915a29 stm32f1
|
||||||
|
hw/mcu/st/stm32f2xx_hal_driver https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git c75ace9b908a9aca631193ebf2466963b8ea33d0 stm32f2
|
||||||
|
hw/mcu/st/stm32f3xx_hal_driver https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git 1761b6207318ede021706e75aae78f452d72b6fa stm32f3
|
||||||
|
hw/mcu/st/stm32f4xx_hal_driver https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git 04e99fbdabd00ab8f370f377c66b0a4570365b58 stm32f4
|
||||||
|
hw/mcu/st/stm32f7xx_hal_driver https://github.com/STMicroelectronics/stm32f7xx_hal_driver.git f7ffdf6bf72110e58b42c632b0a051df5997e4ee stm32f7
|
||||||
|
hw/mcu/st/stm32g0xx_hal_driver https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git e911b12c7f67084d7f6b76157a4c0d4e2ec3779c stm32g0
|
||||||
|
hw/mcu/st/stm32g4xx_hal_driver https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git 8b4518417706d42eef5c14e56a650005abf478a8 stm32g4
|
||||||
|
hw/mcu/st/stm32h7xx_hal_driver https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git d8461b980b59b1625207d8c4f2ce0a9c2a7a3b04 stm32h7
|
||||||
|
hw/mcu/st/stm32l0xx_hal_driver https://github.com/STMicroelectronics/stm32l0xx_hal_driver.git fbdacaf6f8c82a4e1eb9bd74ba650b491e97e17b stm32l0
|
||||||
|
hw/mcu/st/stm32l1xx_hal_driver https://github.com/STMicroelectronics/stm32l1xx_hal_driver.git 44efc446fa69ed8344e7fd966e68ed11043b35d9 stm32l1
|
||||||
|
hw/mcu/st/stm32l4xx_hal_driver https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git aee3d5bf283ae5df87532b781bdd01b7caf256fc stm32l4
|
||||||
|
hw/mcu/st/stm32l5xx_hal_driver https://github.com/STMicroelectronics/stm32l5xx_hal_driver.git 675c32a75df37f39d50d61f51cb0dcf53f07e1cb stm32l5
|
||||||
|
hw/mcu/st/stm32u5xx_hal_driver https://github.com/STMicroelectronics/stm32u5xx_hal_driver.git 4d93097a67928e9377e655ddd14622adc31b9770 stm32u5
|
||||||
|
hw/mcu/st/stm32wbxx_hal_driver https://github.com/STMicroelectronics/stm32wbxx_hal_driver.git 2c5f06638be516c1b772f768456ba637f077bac8 stm32wb
|
||||||
|
hw/mcu/ti https://github.com/hathach/ti_driver.git 143ed6cc20a7615d042b03b21e070197d473e6e5 msp430 msp432e4 tm4c123
|
||||||
|
hw/mcu/wch/ch32f20x https://github.com/openwch/ch32f20x.git 77c4095087e5ed2c548ec9058e655d0b8757663b ch32f20x
|
||||||
|
hw/mcu/wch/ch32v307 https://github.com/openwch/ch32v307.git 17761f5cf9dbbf2dcf665b7c04934188add20082 ch32v307
|
||||||
|
lib/CMSIS_5 https://github.com/ARM-software/CMSIS_5.git 20285262657d1b482d132d20d755c8c330d55c1f imxrt kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx mm32 msp432e4 nrf ra saml2xstm32f0 stm32f1 stm32f2 stm32f3 stm32f4 stm32f7 stm32g0 stm32g4 stm32h7 stm32l0 stm32l1 stm32l4 stm32l5 stm32u5 stm32wb
|
||||||
|
lib/FreeRTOS-Kernel https://github.com/FreeRTOS/FreeRTOS-Kernel.git 4ff01a7a4a51f53b44496aefee1e3c0071b7b173 all
|
||||||
|
lib/lwip https://github.com/lwip-tcpip/lwip.git 159e31b689577dbf69cf0683bbaffbd71fa5ee10 all
|
||||||
|
lib/sct_neopixel https://github.com/gsteiert/sct_neopixel.git e73e04ca63495672d955f9268e003cffe168fcd8 lpc55
|
||||||
|
tools/uf2 https://github.com/microsoft/uf2.git 19615407727073e36d81bf239c52108ba92e7660 all
|
||||||
|
======================================== ============================================================== ======================================== =======================================================================================================================================================================================================
|
@ -5,8 +5,7 @@ Getting Started
|
|||||||
Add TinyUSB to your project
|
Add TinyUSB to your project
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
It is relatively simple to incorporate tinyusb to your (existing) project
|
It is relatively simple to incorporate tinyusb to your project
|
||||||
|
|
||||||
|
|
||||||
* Copy or ``git submodule`` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
|
* Copy or ``git submodule`` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
|
||||||
* Add all the .c in the ``tinyusb/src`` folder to your project
|
* Add all the .c in the ``tinyusb/src`` folder to your project
|
||||||
@ -44,13 +43,27 @@ For your convenience, TinyUSB contains a handful of examples for both host and d
|
|||||||
$ git clone https://github.com/hathach/tinyusb tinyusb
|
$ git clone https://github.com/hathach/tinyusb tinyusb
|
||||||
$ cd tinyusb
|
$ cd tinyusb
|
||||||
|
|
||||||
Some TinyUSB examples also requires external submodule libraries in ``/lib`` such as FreeRTOS, Lightweight IP to build. Run following command to fetch them
|
Some ports will also require a port-specific SDK (e.g. RP2040) or binary (e.g. Sony Spresense) to build examples. They are out of scope for tinyusb, you should download/install it first according to its manufacturer guide.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The hardware code is located in ``hw/bsp`` folder, and is organized by family/boards. e.g raspberry_pi_pico is located in ``hw/bsp/rp2040/boards/raspberry_pi_pico`` where FAMILY=rp2040 and BOARD=raspberry_pi_pico. Before building, we firstly need to download dependencies such as: MCU low-level peripheral driver and external libraries e.g FreeRTOS (required by some examples). We can do that by either ways:
|
||||||
|
|
||||||
|
1. Run ``tools/get_deps.py {FAMILY}`` script to download all dependencies for a family as follow. Note: For TinyUSB developer to download all dependencies, use FAMILY=all.
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
$ git submodule update --init lib
|
$ python tools/get_deps.py rp2040
|
||||||
|
|
||||||
Some ports will also require a port-specific SDK (e.g. RP2040) or binary (e.g. Sony Spresense) to build examples. They are out of scope for tinyusb, you should download/install it first according to its manufacturer guide.
|
2. Or run the ``get-deps`` target in one of the example folder as follow.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
$ cd examples/device/cdc_msc
|
||||||
|
$ make BOARD=raspberry_pi_pico get-deps
|
||||||
|
|
||||||
|
You only need to do this once per family. Check out `complete list of dependencies and their designated path here <dependencies.rst>`_
|
||||||
|
|
||||||
Build
|
Build
|
||||||
^^^^^
|
^^^^^
|
||||||
@ -61,26 +74,21 @@ To build example, first change directory to an example folder.
|
|||||||
|
|
||||||
$ cd examples/device/cdc_msc
|
$ cd examples/device/cdc_msc
|
||||||
|
|
||||||
Before building, we need to download MCU driver submodule to provide low-level MCU peripheral's driver first. Run the ``get-deps`` target in one of the example folder as follow. You only need to do this once per mcu
|
Then compile with ``make BOARD={board_name} all`` , for example
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
$ make BOARD=feather_nrf52840_express get-deps
|
$ make BOARD=raspberry_pi_pico all
|
||||||
|
|
||||||
|
Note: some examples especially those that uses Vendor class (e.g webUSB) may requires udev permission on Linux (and/or macOS) to access usb device. It depends on your OS distro, typically copy ``99-tinyusb.rules`` and reload your udev is good to go
|
||||||
Some modules (e.g. RP2040 and ESP32s2) require the project makefiles to be customized using CMake. If necessary apply any setup steps for the platform's SDK.
|
|
||||||
|
|
||||||
Then compile with ``make BOARD=[board_name] all``\ , for example
|
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
$ make BOARD=feather_nrf52840_express all
|
$ cp examples/device/99-tinyusb.rules /etc/udev/rules.d/
|
||||||
|
$ sudo udevadm control --reload-rules && sudo udevadm trigger
|
||||||
|
|
||||||
Note: ``BOARD`` can be found as directory name in ``hw/bsp``\ , either in its family/boards or directly under bsp (no family).
|
RootHub Port Selection
|
||||||
Note: some examples especially those that uses Vendor class (e.g webUSB) may requires udev permission on Linux (and/or macOS) to access usb device. It depends on your OS distro, typically copy ``/examples/device/99-tinyusb.rules`` file to /etc/udev/rules.d/ then run ``sudo udevadm control --reload-rules && sudo udevadm trigger`` is good enough.
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Port Selection
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If a board has several ports, one port is chosen by default in the individual board.mk file. Use option ``PORT=x`` To choose another port. For example to select the HS port of a STM32F746Disco board, use:
|
If a board has several ports, one port is chosen by default in the individual board.mk file. Use option ``PORT=x`` To choose another port. For example to select the HS port of a STM32F746Disco board, use:
|
||||||
|
|
||||||
@ -170,7 +178,10 @@ Some board use uf2 bootloader for drag & drop in to mass storage device, uf2 can
|
|||||||
$ make BOARD=feather_nrf52840_express all uf2
|
$ make BOARD=feather_nrf52840_express all uf2
|
||||||
|
|
||||||
IAR Support
|
IAR Support
|
||||||
^^^^^^^^^^^
|
-----------
|
||||||
|
|
||||||
|
Use project connection
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
IAR Project Connection files are provided to import TinyUSB stack into your project.
|
IAR Project Connection files are provided to import TinyUSB stack into your project.
|
||||||
|
|
||||||
@ -183,19 +194,19 @@ IAR Project Connection files are provided to import TinyUSB stack into your proj
|
|||||||
|
|
||||||
- `STM32L0xx_HAL_Driver` is only needed to run examples, TinyUSB stack itself doesn't rely on MCU's SDKs.
|
- `STM32L0xx_HAL_Driver` is only needed to run examples, TinyUSB stack itself doesn't rely on MCU's SDKs.
|
||||||
|
|
||||||
* Open `Tools -> Configure Custom Argument Variables` (Switch to `Global` tab if you want to do it for all your projects)
|
* Open ``Tools -> Configure Custom Argument Variables`` (Switch to `Global` tab if you want to do it for all your projects)
|
||||||
Click `New Group ...`, name it to `TUSB`, Click `Add Variable ...`, name it to `TUSB_DIR`, change it's value to the path of your TinyUSB stack,
|
Click `New Group ...`, name it to `TUSB`, Click `Add Variable ...`, name it to `TUSB_DIR`, change it's value to the path of your TinyUSB stack,
|
||||||
for example `C:\\tinyusb`
|
for example `C:\\tinyusb`
|
||||||
|
|
||||||
Import stack only
|
Import stack only
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
1. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\tools\\iar_template.ipcf`.
|
1. Open ``Project -> Add project Connection ...``, click `OK`, choose `tinyusb\\tools\\iar_template.ipcf`.
|
||||||
|
|
||||||
Run examples
|
Run examples
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
1. (Python3 is needed) Run `iar_gen.py` to generate .ipcf files of examples:
|
1. (Python3 is needed) Run ``iar_gen.py`` to generate .ipcf files of examples:
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
@ -204,3 +215,15 @@ Run examples
|
|||||||
|
|
||||||
2. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\examples\\(.ipcf of example)`.
|
2. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\examples\\(.ipcf of example)`.
|
||||||
For example `C:\\tinyusb\\examples\\device\\cdc_msc\\iar_cdc_msc.ipcf`
|
For example `C:\\tinyusb\\examples\\device\\cdc_msc\\iar_cdc_msc.ipcf`
|
||||||
|
|
||||||
|
Native CMake support (9.50.1+)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
With 9.50.1 release, IAR added experimental native CMake support (strangely not mentioned in public release note). Now it's possible to import CMakeLists.txt then build and debug as a normal project.
|
||||||
|
|
||||||
|
Following these steps:
|
||||||
|
|
||||||
|
1. Add IAR compiler binary path to system ``PATH`` environment variable, such as ``C:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\bin``.
|
||||||
|
2. Create new project in IAR, in Tool chain dropdown menu, choose CMake for Arm then Import ``CMakeLists.txt`` from chosen example directory.
|
||||||
|
3. Set up board option in ``Option - CMake/CMSIS-TOOLBOX - CMake``, for example :code:`-DBOARD=stm32f439nucleo -DTOOLCHAIN=iar`, **Uncheck 'Override tools in env'**.
|
||||||
|
4. (For debug only) Choose correct CPU model in ``Option - General Options - Target``, to profit register and memory view.
|
||||||
|
@ -56,4 +56,5 @@ Index
|
|||||||
|
|
||||||
supported
|
supported
|
||||||
getting_started
|
getting_started
|
||||||
|
dependencies
|
||||||
concurrency
|
concurrency
|
||||||
|
@ -8,6 +8,12 @@ Supported MCUs
|
|||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Manufacturer | Family | Device | Host | Highspeed | Driver | Note |
|
| Manufacturer | Family | Device | Host | Highspeed | Driver | Note |
|
||||||
+==============+=======================+========+======+===========+===================+==============+
|
+==============+=======================+========+======+===========+===================+==============+
|
||||||
|
| Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant |
|
||||||
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI |
|
||||||
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| Brigetek | FT90x | ✔ | | ✔ | ft9xx | |
|
||||||
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | |
|
| Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | |
|
| Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | |
|
||||||
@ -17,36 +23,46 @@ Supported MCUs
|
|||||||
| GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | |
|
| GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Infineon | XMC4500 | ✔ | | ✖ | dwc2 | |
|
| Infineon | XMC4500 | ✔ | | ✖ | dwc2 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| MicroChip | SAM D11, D21 | ✔ | | ✖ | samd | |
|
| MicroChip | SAM | D11, D21 | ✔ | | ✖ | samd | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | SAM D51, E5x | ✔ | | ✖ | samd | |
|
| | | D51, E5x | ✔ | | ✖ | samd | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | SAM G55 | ✔ | | ✖ | samg | |
|
| | | G55 | ✔ | | ✖ | samg | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | SAM L21, L22 | ✔ | | ✖ | samd | |
|
| | | L21, L22 | ✔ | | ✖ | samd | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | SAM E70,S70,V70,V71 | ✔ | | ✔ | samx7x | |
|
| | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | PIC | 24 | ✔ | | | pic | ci_fs variant|
|
||||||
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant|
|
||||||
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | | dsPIC33 | ✔ | | | pic | ci_fs variant|
|
||||||
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | | 32mz | ✔ | | | pic32mz | musb variant |
|
||||||
|
+--------------+-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| Mind Montion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant|
|
||||||
|
+--------------+-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| NordicSemi | nRF52833, nRF52840 | ✔ | ✖ | ✖ | nrf5x | |
|
| NordicSemi | nRF52833, nRF52840 | ✔ | ✖ | ✖ | nrf5x | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | nRF5340 | ✔ | ✖ | ✖ | nrf5x | |
|
| | nRF5340 | ✔ | ✖ | ✖ | nrf5x | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Nuvoton | NUC120 | ✔ | ✖ | ✖ | | |
|
| Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | NUC121/NUC125 | ✔ | ✖ | ✖ | | |
|
| | NUC121/NUC125 | ✔ | ✖ | ✖ | nuc121 | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | NUC126 | ✔ | ✖ | ✖ | | |
|
| | NUC126 | ✔ | ✖ | ✖ | nuc121 | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | NUC505 | ✔ | | ✔ | | |
|
| | NUC505 | ✔ | | ✔ | nuc505 | |
|
||||||
+--------------+---------+-------------+--------+------+-----------+-------------------+--------------+
|
+--------------+---------+-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| NXP | iMXRT | RT10xx | ✔ | ✔ | ✔ | ci_hs | |
|
| NXP | iMXRT | RT10xx | ✔ | ✔ | ✔ | ci_hs | |
|
||||||
| | +-------------+--------+------+-----------+-------------------+--------------+
|
| | +-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | | RT11xx | ✔ | ✔ | ✔ | ci_hs | |
|
| | | RT11xx | ✔ | ✔ | ✔ | ci_hs | |
|
||||||
| +---------+-------------+--------+------+-----------+-------------------+--------------+
|
| +---------+-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | Kinetis | KL25 | ✔ | ⚠ | ✖ | | |
|
| | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | |
|
||||||
| | +-------------+--------+------+-----------+-------------------+--------------+
|
| | +-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | | K32L2 | ✔ | | ✖ | | |
|
| | | K32L2 | ✔ | | ✖ | khci | ci_fs variant|
|
||||||
| +---------+-------------+--------+------+-----------+-------------------+--------------+
|
| +---------+-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | |
|
| | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | |
|
||||||
| | +-------------+--------+------+-----------+-------------------+--------------+
|
| | +-------------+--------+------+-----------+-------------------+--------------+
|
||||||
@ -59,11 +75,17 @@ Supported MCUs
|
|||||||
| | | 54 | ✔ | | ✔ | lpc_ip3511 | |
|
| | | 54 | ✔ | | ✔ | lpc_ip3511 | |
|
||||||
| | +-------------+--------+------+-----------+-------------------+--------------+
|
| | +-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | | 55 | ✔ | | ✔ | lpc_ip3511 | |
|
| | | 55 | ✔ | | ✔ | lpc_ip3511 | |
|
||||||
|
| +---------+-------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | MCX | N9 | ✔ | | ✔ | ci_fs, ci_hs | |
|
||||||
+--------------+---------+-------------+--------+------+-----------+-------------------+--------------+
|
+--------------+---------+-------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Raspberry Pi | RP2040 | ✔ | ✔ | ✖ | rp2040, pio_usb | |
|
| Raspberry Pi | RP2040 | ✔ | ✔ | ✖ | rp2040, pio_usb | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Renesas | RX 63N, 65N, 72N | ✔ | ✔ | ✖ | usba | |
|
| Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | |
|
||||||
|
| | +-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | | 6M5 | ✔ | ✔ | ✔ | rusb2 | |
|
||||||
|
+--------------+-----+-----------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | |
|
| Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | |
|
| Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | |
|
||||||
@ -94,7 +116,7 @@ Supported MCUs
|
|||||||
| +----+------------------+--------+------+-----------+-------------------+--------------+
|
| +----+------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | L4+ | ✔ | | | dwc2 | |
|
| | L4+ | ✔ | | | dwc2 | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | U5 | ⚠ | | | dwc2 | |
|
| | U5 | ✔ | | ✔ | dwc2 | |
|
||||||
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| | WBx5 | ✔ | | | stm32_fsdev | |
|
| | WBx5 | ✔ | | | stm32_fsdev | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
@ -107,6 +129,8 @@ Supported MCUs
|
|||||||
| ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | |
|
| ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
| WCH | CH32V307 | ✔ | | ✔ | ch32v307 | |
|
| WCH | CH32V307 | ✔ | | ✔ | ch32v307 | |
|
||||||
|
| +-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
| | CH32F20x | ✔ | | ✔ | ch32f205 | |
|
||||||
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
+--------------+-----------------------+--------+------+-----------+-------------------+--------------+
|
||||||
|
|
||||||
|
|
||||||
@ -173,7 +197,7 @@ SAMD11 & SAMD21
|
|||||||
- `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__
|
- `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__
|
||||||
- `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`__
|
- `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`__
|
||||||
- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`__
|
- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`__
|
||||||
- `Great Scott Gadgets LUNA <https://greatscottgadgets.com/luna/>`__
|
- `Great Scott Gadgets Cynthion <https://greatscottgadgets.com/cynthion/>`__
|
||||||
- `Microchip SAMD11 Xplained Pro <https://www.microchip.com/developmenttools/ProductDetails/atsamd11-xpro>`__
|
- `Microchip SAMD11 Xplained Pro <https://www.microchip.com/developmenttools/ProductDetails/atsamd11-xpro>`__
|
||||||
- `Microchip SAMD21 Xplained Pro <https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO>`__
|
- `Microchip SAMD21 Xplained Pro <https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO>`__
|
||||||
- `Seeeduino Xiao <https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html>`__
|
- `Seeeduino Xiao <https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html>`__
|
||||||
@ -251,6 +275,7 @@ Kinetis
|
|||||||
^^^^^^^
|
^^^^^^^
|
||||||
|
|
||||||
- `Freedom FRDM-KL25Z <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z>`__
|
- `Freedom FRDM-KL25Z <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z>`__
|
||||||
|
- `Freedom FRDM-K32L2A4S <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/nxp-freedom-platform-for-k32-l2a-mcus:FRDM-K32L2A4S>`__
|
||||||
- `Freedom FRDM-K32L2B3 <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3>`__
|
- `Freedom FRDM-K32L2B3 <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3>`__
|
||||||
- `KUIIC <https://github.com/nxf58843/kuiic>`__
|
- `KUIIC <https://github.com/nxf58843/kuiic>`__
|
||||||
|
|
||||||
@ -275,7 +300,6 @@ LPC 18-43
|
|||||||
- `Embedded Artists LPC4357 Developer Kit <http://www.embeddedartists.com/products/kits/lpc4357_kit.php>`__
|
- `Embedded Artists LPC4357 Developer Kit <http://www.embeddedartists.com/products/kits/lpc4357_kit.php>`__
|
||||||
- `Keil MCB1800 Evaluation Board <http://www.keil.com/mcb1800>`__
|
- `Keil MCB1800 Evaluation Board <http://www.keil.com/mcb1800>`__
|
||||||
- `LPCXpresso18S37 Development Board <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc4000-cortex-m4/lpcxpresso18s37-development-board:OM13076>`__
|
- `LPCXpresso18S37 Development Board <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc4000-cortex-m4/lpcxpresso18s37-development-board:OM13076>`__
|
||||||
- `NGX LPC4330-Xplorer <https://www.nxp.com/design/designs/lpc4330-xplorer-board:OM13027>`__
|
|
||||||
|
|
||||||
LPC 51
|
LPC 51
|
||||||
^^^^^^
|
^^^^^^
|
||||||
@ -295,8 +319,17 @@ LPC55
|
|||||||
- `LPCXpresso 55s69 EVK <https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK>`__
|
- `LPCXpresso 55s69 EVK <https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK>`__
|
||||||
- `MCU-Link <https://www.nxp.com/design/development-boards/lpcxpresso-boards/mcu-link-debug-probe:MCU-LINK>`__
|
- `MCU-Link <https://www.nxp.com/design/development-boards/lpcxpresso-boards/mcu-link-debug-probe:MCU-LINK>`__
|
||||||
|
|
||||||
Renesas RX
|
Renesas
|
||||||
----------
|
-------
|
||||||
|
|
||||||
|
RA
|
||||||
|
^^
|
||||||
|
|
||||||
|
- `Evaluation Kit for RA4M1 <https://www.renesas.com/us/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m1-evaluation-kit-ra4m1-mcu-group>`__
|
||||||
|
- `Evaluation Kit for RA4M3 <https://www.renesas.com/us/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m3-evaluation-kit-ra4m3-mcu-group>`__
|
||||||
|
|
||||||
|
RX
|
||||||
|
^^
|
||||||
|
|
||||||
- `GR-CITRUS <https://www.renesas.com/us/en/products/gadget-renesas/boards/gr-citrus>`__
|
- `GR-CITRUS <https://www.renesas.com/us/en/products/gadget-renesas/boards/gr-citrus>`__
|
||||||
- `Renesas RX65N Target Board <https://www.renesas.com/us/en/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx65n0c00000br-target-board-rx65n>`__
|
- `Renesas RX65N Target Board <https://www.renesas.com/us/en/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx65n0c00000br-target-board-rx65n>`__
|
||||||
@ -403,4 +436,5 @@ Tomu
|
|||||||
WCH
|
WCH
|
||||||
---
|
---
|
||||||
|
|
||||||
- `CH32V307V-R1-1v0 <https://lcsc.com/product-detail/Development-Boards-Kits_WCH-Jiangsu-Qin-Heng-CH32V307V-EVT-R1_C2943980.html>`
|
- `CH32V307V-R1-1v0 <https://lcsc.com/product-detail/Development-Boards-Kits_WCH-Jiangsu-Qin-Heng-CH32V307V-EVT-R1_C2943980.html>`__
|
||||||
|
- `CH32F205R-R0-1v0 <https://github.com/openwch/ch32f20x/blob/main/EVT/PUB/CH32F20x%20Evaluation%20Board%20Reference-EN.pdf>`__
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
sphinx~=3.0
|
sphinx>=5.0
|
||||||
furo>=2020.12.30.b24
|
furo>=2020.12.30.b24
|
||||||
sphinx-autodoc-typehints>=1.10
|
sphinx-autodoc-typehints>=1.10
|
||||||
jinja2==3.0.3
|
jinja2>=3.0.3
|
||||||
|
11
examples/CMakeLists.txt
Normal file
11
examples/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
|
#set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../hw/bsp/family_support.cmake)
|
||||||
|
|
||||||
|
project(tinyusb_examples C CXX ASM)
|
||||||
|
|
||||||
|
add_subdirectory(device)
|
||||||
|
add_subdirectory(dual)
|
||||||
|
add_subdirectory(host)
|
||||||
|
add_subdirectory(typec)
|
17
examples/build_system/cmake/cpu/cortex-m0.cmake
Normal file
17
examples/build_system/cmake/cpu/cortex-m0.cmake
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m0plus
|
||||||
|
-mfloat-abi=soft
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m0
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
17
examples/build_system/cmake/cpu/cortex-m0plus.cmake
Normal file
17
examples/build_system/cmake/cpu/cortex-m0plus.cmake
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m0plus
|
||||||
|
-mfloat-abi=soft
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m0
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
17
examples/build_system/cmake/cpu/cortex-m23.cmake
Normal file
17
examples/build_system/cmake/cpu/cortex-m23.cmake
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m23
|
||||||
|
-mfloat-abi=soft
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m23
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
16
examples/build_system/cmake/cpu/cortex-m3.cmake
Normal file
16
examples/build_system/cmake/cpu/cortex-m3.cmake
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m3
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m3
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM3 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
19
examples/build_system/cmake/cpu/cortex-m33.cmake
Normal file
19
examples/build_system/cmake/cpu/cortex-m33.cmake
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m33
|
||||||
|
-mfloat-abi=hard
|
||||||
|
-mfpu=fpv5-sp-d16
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM33_NTZ_NONSECURE CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m33
|
||||||
|
--fpu VFPv5-SP
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM4F CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
23
examples/build_system/cmake/cpu/cortex-m4.cmake
Normal file
23
examples/build_system/cmake/cpu/cortex-m4.cmake
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m4
|
||||||
|
-mfloat-abi=hard
|
||||||
|
-mfpu=fpv4-sp-d16
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT DEFINED FREERTOS_PORT)
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM4F CACHE INTERNAL "")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m4
|
||||||
|
--fpu VFPv4_sp
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT DEFINED FREERTOS_PORT)
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM4F CACHE INTERNAL "")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
endif ()
|
19
examples/build_system/cmake/cpu/cortex-m7.cmake
Normal file
19
examples/build_system/cmake/cpu/cortex-m7.cmake
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
if (TOOLCHAIN STREQUAL "gcc")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-mthumb
|
||||||
|
-mcpu=cortex-m7
|
||||||
|
-mfloat-abi=hard
|
||||||
|
-mfpu=fpv5-d16
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT GCC_ARM_CM7 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
elseif (TOOLCHAIN STREQUAL "iar")
|
||||||
|
set(TOOLCHAIN_COMMON_FLAGS
|
||||||
|
--cpu cortex-m7
|
||||||
|
--fpu VFPv5_D16
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FREERTOS_PORT IAR_ARM_CM7 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
endif ()
|
46
examples/build_system/cmake/toolchain/arm_gcc.cmake
Normal file
46
examples/build_system/cmake/toolchain/arm_gcc.cmake
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Generic)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
|
||||||
|
set(CMAKE_CXX_COMPILER "arm-none-eabi-g++")
|
||||||
|
set(CMAKE_ASM_COMPILER "arm-none-eabi-gcc")
|
||||||
|
|
||||||
|
set(CMAKE_SIZE "arm-none-eabi-size" CACHE FILEPATH "")
|
||||||
|
set(CMAKE_OBJCOPY "arm-none-eabi-objcopy" CACHE FILEPATH "")
|
||||||
|
set(CMAKE_OBJDUMP "arm-none-eabi-objdump" CACHE FILEPATH "")
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
|
||||||
|
|
||||||
|
# Look for includes and libraries only in the target system prefix.
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
|
||||||
|
# pass TOOLCHAIN_CPU to
|
||||||
|
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_SYSTEM_PROCESSOR)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/../cpu/${CMAKE_SYSTEM_PROCESSOR}.cmake)
|
||||||
|
|
||||||
|
# enable all possible warnings for building examples
|
||||||
|
list(APPEND TOOLCHAIN_COMMON_FLAGS
|
||||||
|
-fdata-sections
|
||||||
|
-ffunction-sections
|
||||||
|
-fsingle-precision-constant
|
||||||
|
-fno-strict-aliasing
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS
|
||||||
|
-Wl,--print-memory-usage
|
||||||
|
-Wl,--gc-sections
|
||||||
|
-Wl,--cref
|
||||||
|
)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake)
|
||||||
|
|
||||||
|
# try_compile is cmake test compiling its own example,
|
||||||
|
# pass -nostdlib to skip stdlib linking
|
||||||
|
get_property(IS_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
|
||||||
|
if (IS_IN_TRY_COMPILE)
|
||||||
|
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -nostdlib")
|
||||||
|
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -nostdlib")
|
||||||
|
endif ()
|
32
examples/build_system/cmake/toolchain/arm_iar.cmake
Normal file
32
examples/build_system/cmake/toolchain/arm_iar.cmake
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Generic)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "iccarm")
|
||||||
|
set(CMAKE_CXX_COMPILER "iccarm")
|
||||||
|
set(CMAKE_ASM_COMPILER "iasmarm")
|
||||||
|
|
||||||
|
set(CMAKE_SIZE "size" CACHE FILEPATH "")
|
||||||
|
set(CMAKE_OBJCOPY "ielftool" CACHE FILEPATH "")
|
||||||
|
set(CMAKE_OBJDUMP "iefdumparm" CACHE FILEPATH "")
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
|
||||||
|
|
||||||
|
# Look for includes and libraries only in the target system prefix.
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
|
||||||
|
# pass TOOLCHAIN_CPU to
|
||||||
|
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_SYSTEM_PROCESSOR)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/../cpu/${CMAKE_SYSTEM_PROCESSOR}.cmake)
|
||||||
|
|
||||||
|
# enable all possible warnings for building examples
|
||||||
|
list(APPEND TOOLCHAIN_COMMON_FLAGS
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND TOOLCHAIN_EXE_LINKER_FLAGS
|
||||||
|
--diag_suppress=Li065
|
||||||
|
)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake)
|
17
examples/build_system/cmake/toolchain/set_flags.cmake
Normal file
17
examples/build_system/cmake/toolchain/set_flags.cmake
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
include(CMakePrintHelpers)
|
||||||
|
|
||||||
|
# join the toolchain flags into a single string
|
||||||
|
list(JOIN TOOLCHAIN_COMMON_FLAGS " " TOOLCHAIN_COMMON_FLAGS)
|
||||||
|
|
||||||
|
foreach (LANG IN ITEMS C CXX ASM)
|
||||||
|
set(CMAKE_${LANG}_FLAGS_INIT ${TOOLCHAIN_COMMON_FLAGS})
|
||||||
|
|
||||||
|
#cmake_print_variables(CMAKE_${LANG}_FLAGS_INIT)
|
||||||
|
|
||||||
|
# optimization flags for LOG, LOGGER ?
|
||||||
|
#set(CMAKE_${LANG}_FLAGS_RELEASE_INIT "-Os")
|
||||||
|
#set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0")
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
|
# Linker
|
||||||
|
list(JOIN TOOLCHAIN_EXE_LINKER_FLAGS " " CMAKE_EXE_LINKER_FLAGS_INIT)
|
9
examples/build_system/make/cpu/arm1176.mk
Normal file
9
examples/build_system/make/cpu/arm1176.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mcpu=arm1176jzf-s \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
#CFLAGS += --cpu cortex-a53
|
||||||
|
#ASFLAGS += --cpu cortex-a53
|
||||||
|
|
||||||
|
endif
|
12
examples/build_system/make/cpu/cortex-a53.mk
Normal file
12
examples/build_system/make/cpu/cortex-a53.mk
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mcpu=cortex-a53 \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
CFLAGS += \
|
||||||
|
--cpu cortex-a53 \
|
||||||
|
|
||||||
|
ASFLAGS += \
|
||||||
|
--cpu cortex-a53 \
|
||||||
|
|
||||||
|
endif
|
12
examples/build_system/make/cpu/cortex-a72.mk
Normal file
12
examples/build_system/make/cpu/cortex-a72.mk
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mcpu=cortex-a72 \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
CFLAGS += \
|
||||||
|
--cpu cortex-a72 \
|
||||||
|
|
||||||
|
ASFLAGS += \
|
||||||
|
--cpu cortex-a72 \
|
||||||
|
|
||||||
|
endif
|
14
examples/build_system/make/cpu/cortex-m0.mk
Normal file
14
examples/build_system/make/cpu/cortex-m0.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m0 \
|
||||||
|
-mfloat-abi=soft \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
# IAR Flags
|
||||||
|
CFLAGS += --cpu cortex-m0
|
||||||
|
ASFLAGS += --cpu cortex-m0
|
||||||
|
endif
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM0
|
14
examples/build_system/make/cpu/cortex-m0plus.mk
Normal file
14
examples/build_system/make/cpu/cortex-m0plus.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m0plus \
|
||||||
|
-mfloat-abi=soft \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
# IAR Flags
|
||||||
|
CFLAGS += --cpu cortex-m0+
|
||||||
|
ASFLAGS += --cpu cortex-m0+
|
||||||
|
endif
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM0
|
14
examples/build_system/make/cpu/cortex-m23.mk
Normal file
14
examples/build_system/make/cpu/cortex-m23.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m23 \
|
||||||
|
-mfloat-abi=soft \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
# IAR Flags
|
||||||
|
CFLAGS += --cpu cortex-m23
|
||||||
|
ASFLAGS += --cpu cortex-m23
|
||||||
|
endif
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM23
|
17
examples/build_system/make/cpu/cortex-m3.mk
Normal file
17
examples/build_system/make/cpu/cortex-m3.mk
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m3 \
|
||||||
|
-mfloat-abi=soft \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
# IAR Flags
|
||||||
|
CFLAGS += \
|
||||||
|
--cpu cortex-m3 \
|
||||||
|
|
||||||
|
ASFLAGS += \
|
||||||
|
--cpu cortex-m3
|
||||||
|
endif
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM3
|
19
examples/build_system/make/cpu/cortex-m33.mk
Normal file
19
examples/build_system/make/cpu/cortex-m33.mk
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m33 \
|
||||||
|
-mfloat-abi=hard \
|
||||||
|
-mfpu=fpv5-sp-d16 \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
CFLAGS += \
|
||||||
|
--cpu cortex-m33 \
|
||||||
|
--fpu VFPv5-SP \
|
||||||
|
|
||||||
|
ASFLAGS += \
|
||||||
|
--cpu cortex-m33 \
|
||||||
|
--fpu VFPv5-SP \
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM33_NTZ/non_secure
|
13
examples/build_system/make/cpu/cortex-m4.mk
Normal file
13
examples/build_system/make/cpu/cortex-m4.mk
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m4 \
|
||||||
|
-mfloat-abi=hard \
|
||||||
|
-mfpu=fpv4-sp-d16 \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
CFLAGS += --cpu cortex-m4 --fpu VFPv4
|
||||||
|
ASFLAGS += --cpu cortex-m4 --fpu VFPv4
|
||||||
|
endif
|
||||||
|
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM4F
|
19
examples/build_system/make/cpu/cortex-m7.mk
Normal file
19
examples/build_system/make/cpu/cortex-m7.mk
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
|
CFLAGS += \
|
||||||
|
-mthumb \
|
||||||
|
-mcpu=cortex-m7 \
|
||||||
|
-mfloat-abi=hard \
|
||||||
|
-mfpu=fpv5-d16 \
|
||||||
|
|
||||||
|
else ifeq ($(TOOLCHAIN),iar)
|
||||||
|
CFLAGS += \
|
||||||
|
--cpu cortex-m7 \
|
||||||
|
--fpu VFPv5_D16 \
|
||||||
|
|
||||||
|
ASFLAGS += \
|
||||||
|
--cpu cortex-m7 \
|
||||||
|
--fpu VFPv5_D16 \
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM7/r0p1
|
@ -2,11 +2,29 @@
|
|||||||
# Common make definition for all examples
|
# Common make definition for all examples
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
|
|
||||||
# Build directory
|
#-------------- TOP and CURRENT_PATH ------------
|
||||||
BUILD := _build/$(BOARD)
|
|
||||||
|
|
||||||
PROJECT := $(notdir $(CURDIR))
|
# Set TOP to be the path to get from the current directory (where make was invoked) to the top of the tree.
|
||||||
BIN := $(TOP)/_bin/$(BOARD)/$(notdir $(CURDIR))
|
# $(lastword $(MAKEFILE_LIST)) returns the name of this makefile relative to where make was invoked.
|
||||||
|
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||||
|
|
||||||
|
# strip off /examples/build_system/make to get for example ../../..
|
||||||
|
# and Set TOP to an absolute path
|
||||||
|
TOP = $(abspath $(subst make.mk,../../..,$(THIS_MAKEFILE)))
|
||||||
|
|
||||||
|
# Set CURRENT_PATH to the relative path from TOP to the current directory, ie examples/device/cdc_msc_freertos
|
||||||
|
CURRENT_PATH = $(subst $(TOP)/,,$(abspath .))
|
||||||
|
|
||||||
|
# Detect whether shell style is windows or not
|
||||||
|
# https://stackoverflow.com/questions/714100/os-detecting-makefile/52062069#52062069
|
||||||
|
ifeq '$(findstring ;,$(PATH))' ';'
|
||||||
|
# PATH contains semicolon - so we're definitely on Windows.
|
||||||
|
CMDEXE := 1
|
||||||
|
|
||||||
|
# makefile shell commands should use syntax for DOS CMD, not unix sh
|
||||||
|
# Force DOS command shell on Windows.
|
||||||
|
SHELL := cmd.exe
|
||||||
|
endif
|
||||||
|
|
||||||
# Handy check parameter function
|
# Handy check parameter function
|
||||||
check_defined = \
|
check_defined = \
|
||||||
@ -16,6 +34,12 @@ __check_defined = \
|
|||||||
$(if $(value $1),, \
|
$(if $(value $1),, \
|
||||||
$(error Undefined make flag: $1$(if $2, ($2))))
|
$(error Undefined make flag: $1$(if $2, ($2))))
|
||||||
|
|
||||||
|
# Build directory
|
||||||
|
BUILD := _build/$(BOARD)
|
||||||
|
|
||||||
|
PROJECT := $(notdir $(CURDIR))
|
||||||
|
BIN := $(TOP)/_bin/$(BOARD)/$(notdir $(CURDIR))
|
||||||
|
|
||||||
#-------------- Select the board to build for. ------------
|
#-------------- Select the board to build for. ------------
|
||||||
|
|
||||||
# Board without family
|
# Board without family
|
||||||
@ -41,99 +65,54 @@ ifeq ($(FAMILY),)
|
|||||||
else
|
else
|
||||||
# Include Family and Board specific defs
|
# Include Family and Board specific defs
|
||||||
include $(TOP)/$(FAMILY_PATH)/family.mk
|
include $(TOP)/$(FAMILY_PATH)/family.mk
|
||||||
|
|
||||||
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c))
|
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
#-------------- Toolchain ------------
|
||||||
|
|
||||||
|
# Supported toolchain: gcc, iar
|
||||||
|
TOOLCHAIN ?= gcc
|
||||||
|
|
||||||
#-------------- Cross Compiler ------------
|
|
||||||
# Can be set by board, default to ARM GCC
|
# Can be set by board, default to ARM GCC
|
||||||
CROSS_COMPILE ?= arm-none-eabi-
|
CROSS_COMPILE ?= arm-none-eabi-
|
||||||
|
|
||||||
# Allow for -Os to be changed by board makefiles in case -Os is not allowed
|
ifeq ($(TOOLCHAIN),iar)
|
||||||
CFLAGS_OPTIMIZED ?= -Os
|
CC := iccarm
|
||||||
|
|
||||||
ifeq ($(CC),iccarm)
|
|
||||||
USE_IAR = 1
|
USE_IAR = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef USE_IAR
|
|
||||||
AS = iasmarm
|
|
||||||
LD = ilinkarm
|
|
||||||
OBJCOPY = ielftool
|
|
||||||
SIZE = echo "size not available for IAR"
|
|
||||||
|
|
||||||
else
|
|
||||||
CC = $(CROSS_COMPILE)gcc
|
|
||||||
CXX = $(CROSS_COMPILE)g++
|
|
||||||
AS = $(CC) -x assembler-with-cpp
|
|
||||||
LD = $(CC)
|
|
||||||
|
|
||||||
GDB = $(CROSS_COMPILE)gdb
|
|
||||||
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
||||||
SIZE = $(CROSS_COMPILE)size
|
|
||||||
endif
|
|
||||||
|
|
||||||
MKDIR = mkdir
|
|
||||||
|
|
||||||
ifeq ($(CMDEXE),1)
|
ifeq ($(CMDEXE),1)
|
||||||
CP = copy
|
CP = copy
|
||||||
RM = del
|
RM = del
|
||||||
|
MKDIR = mkdir
|
||||||
PYTHON = python
|
PYTHON = python
|
||||||
else
|
else
|
||||||
SED = sed
|
|
||||||
CP = cp
|
CP = cp
|
||||||
RM = rm
|
RM = rm
|
||||||
|
MKDIR = mkdir
|
||||||
PYTHON = python3
|
PYTHON = python3
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#-------------- Source files and compiler flags --------------
|
#-------------- Source files and compiler flags --------------
|
||||||
|
# tinyusb makefile
|
||||||
|
include $(TOP)/src/tinyusb.mk
|
||||||
|
SRC_C += $(TINYUSB_SRC_C)
|
||||||
|
|
||||||
# Include all source C in family & board folder
|
# Include all source C in family & board folder
|
||||||
SRC_C += hw/bsp/board.c
|
SRC_C += hw/bsp/board.c
|
||||||
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(BOARD_PATH)/*.c))
|
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(BOARD_PATH)/*.c))
|
||||||
|
|
||||||
INC += $(TOP)/$(FAMILY_PATH)
|
INC += \
|
||||||
|
$(TOP)/$(FAMILY_PATH) \
|
||||||
|
$(TOP)/src \
|
||||||
|
|
||||||
# GCC Compiler Flags
|
BOARD_UPPER = $(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,$(subst y,Y,$(subst z,Z,$(subst -,_,$(BOARD))))))))))))))))))))))))))))
|
||||||
GCC_CFLAGS += \
|
CFLAGS += -DBOARD_$(BOARD_UPPER)
|
||||||
-ggdb \
|
|
||||||
-fdata-sections \
|
|
||||||
-ffunction-sections \
|
|
||||||
-fsingle-precision-constant \
|
|
||||||
-fno-strict-aliasing \
|
|
||||||
-Wall \
|
|
||||||
-Wextra \
|
|
||||||
-Werror \
|
|
||||||
-Wfatal-errors \
|
|
||||||
-Wdouble-promotion \
|
|
||||||
-Wstrict-prototypes \
|
|
||||||
-Wstrict-overflow \
|
|
||||||
-Werror-implicit-function-declaration \
|
|
||||||
-Wfloat-equal \
|
|
||||||
-Wundef \
|
|
||||||
-Wshadow \
|
|
||||||
-Wwrite-strings \
|
|
||||||
-Wsign-compare \
|
|
||||||
-Wmissing-format-attribute \
|
|
||||||
-Wunreachable-code \
|
|
||||||
-Wcast-align \
|
|
||||||
-Wcast-function-type \
|
|
||||||
-Wcast-qual \
|
|
||||||
-Wnull-dereference \
|
|
||||||
-Wuninitialized \
|
|
||||||
-Wunused \
|
|
||||||
-Wredundant-decls
|
|
||||||
|
|
||||||
# conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
|
# use max3421 as host controller
|
||||||
# -Wconversion
|
ifeq (${MAX3421_HOST},1)
|
||||||
|
SRC_C += src/portable/analog/max3421/hcd_max3421.c
|
||||||
# Debugging/Optimization
|
CFLAGS += -DCFG_TUH_MAX3421=1
|
||||||
ifeq ($(DEBUG), 1)
|
|
||||||
GCC_CFLAGS += -O0
|
|
||||||
NO_LTO = 1
|
|
||||||
else
|
|
||||||
GCC_CFLAGS += $(CFLAGS_OPTIMIZED)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Log level is mapped to TUSB DEBUG option
|
# Log level is mapped to TUSB DEBUG option
|
||||||
@ -155,3 +134,11 @@ ifeq ($(LOGGER),rtt)
|
|||||||
else ifeq ($(LOGGER),swo)
|
else ifeq ($(LOGGER),swo)
|
||||||
CFLAGS += -DLOGGER_SWO
|
CFLAGS += -DLOGGER_SWO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# CPU specific flags
|
||||||
|
ifdef CPU_CORE
|
||||||
|
include ${TOP}/examples/build_system/make/cpu/$(CPU_CORE).mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
# toolchain specific
|
||||||
|
include ${TOP}/examples/build_system/make/toolchain/arm_$(TOOLCHAIN).mk
|
@ -7,83 +7,14 @@
|
|||||||
|
|
||||||
# ---------------- GNU Make Start -----------------------
|
# ---------------- GNU Make Start -----------------------
|
||||||
# ESP32-Sx and RP2040 has its own CMake build system
|
# ESP32-Sx and RP2040 has its own CMake build system
|
||||||
ifeq (,$(findstring $(FAMILY),esp32s2 esp32s3 rp2040))
|
ifeq (,$(findstring $(FAMILY),espressif rp2040))
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Compiler Flags
|
# Compiler Flags
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
|
|
||||||
LIBS_GCC ?= -lgcc -lm -lnosys
|
|
||||||
|
|
||||||
# libc
|
|
||||||
LIBS += $(LIBS_GCC)
|
|
||||||
|
|
||||||
ifneq ($(BOARD), spresense)
|
|
||||||
LIBS += -lc
|
|
||||||
endif
|
|
||||||
|
|
||||||
# TinyUSB Stack source
|
|
||||||
SRC_C += \
|
|
||||||
src/tusb.c \
|
|
||||||
src/common/tusb_fifo.c \
|
|
||||||
src/device/usbd.c \
|
|
||||||
src/device/usbd_control.c \
|
|
||||||
src/class/audio/audio_device.c \
|
|
||||||
src/class/cdc/cdc_device.c \
|
|
||||||
src/class/dfu/dfu_device.c \
|
|
||||||
src/class/dfu/dfu_rt_device.c \
|
|
||||||
src/class/hid/hid_device.c \
|
|
||||||
src/class/midi/midi_device.c \
|
|
||||||
src/class/msc/msc_device.c \
|
|
||||||
src/class/net/ecm_rndis_device.c \
|
|
||||||
src/class/net/ncm_device.c \
|
|
||||||
src/class/usbtmc/usbtmc_device.c \
|
|
||||||
src/class/video/video_device.c \
|
|
||||||
src/class/vendor/vendor_device.c
|
|
||||||
|
|
||||||
# TinyUSB stack include
|
|
||||||
INC += $(TOP)/src
|
|
||||||
|
|
||||||
CFLAGS += $(addprefix -I,$(INC))
|
CFLAGS += $(addprefix -I,$(INC))
|
||||||
|
|
||||||
ifdef USE_IAR
|
|
||||||
|
|
||||||
SRC_S += $(IAR_SRC_S)
|
|
||||||
|
|
||||||
ASFLAGS := $(CFLAGS) $(IAR_ASFLAGS) $(ASFLAGS) -S
|
|
||||||
IAR_LDFLAGS += --config $(TOP)/$(IAR_LD_FILE)
|
|
||||||
CFLAGS += $(IAR_CFLAGS) -e --debug --silent
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
SRC_S += $(GCC_SRC_S)
|
|
||||||
|
|
||||||
CFLAGS += $(GCC_CFLAGS) -MD
|
|
||||||
|
|
||||||
# LTO makes it difficult to analyze map file for optimizing size purpose
|
|
||||||
# We will run this option in ci
|
|
||||||
ifeq ($(NO_LTO),1)
|
|
||||||
CFLAGS := $(filter-out -flto,$(CFLAGS))
|
|
||||||
endif
|
|
||||||
|
|
||||||
LDFLAGS += $(CFLAGS) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections
|
|
||||||
|
|
||||||
ifdef LD_FILE
|
|
||||||
LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC_LD_FILE
|
|
||||||
LDFLAGS += -Wl,-T,$(TOP)/$(GCC_LD_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(SKIP_NANOLIB), 1)
|
|
||||||
LDFLAGS += -specs=nosys.specs -specs=nano.specs
|
|
||||||
endif
|
|
||||||
|
|
||||||
ASFLAGS += $(CFLAGS)
|
|
||||||
|
|
||||||
endif # USE_IAR
|
|
||||||
|
|
||||||
# Verbose mode
|
# Verbose mode
|
||||||
ifeq ("$(V)","1")
|
ifeq ("$(V)","1")
|
||||||
$(info CFLAGS $(CFLAGS) ) $(info )
|
$(info CFLAGS $(CFLAGS) ) $(info )
|
||||||
@ -91,15 +22,6 @@ $(info LDFLAGS $(LDFLAGS)) $(info )
|
|||||||
$(info ASFLAGS $(ASFLAGS)) $(info )
|
$(info ASFLAGS $(ASFLAGS)) $(info )
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Assembly files can be name with upper case .S, convert it to .s
|
|
||||||
SRC_S := $(SRC_S:.S=.s)
|
|
||||||
|
|
||||||
# Due to GCC LTO bug https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966
|
|
||||||
# assembly file should be placed first in linking order
|
|
||||||
# '_asm' suffix is added to object of assembly file
|
|
||||||
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_S:.s=_asm.o))
|
|
||||||
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_C:.c=.o))
|
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Rules
|
# Rules
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
@ -108,15 +30,6 @@ all: $(BUILD)/$(PROJECT).bin $(BUILD)/$(PROJECT).hex size
|
|||||||
|
|
||||||
uf2: $(BUILD)/$(PROJECT).uf2
|
uf2: $(BUILD)/$(PROJECT).uf2
|
||||||
|
|
||||||
OBJ_DIRS = $(sort $(dir $(OBJ)))
|
|
||||||
$(OBJ): | $(OBJ_DIRS)
|
|
||||||
$(OBJ_DIRS):
|
|
||||||
ifeq ($(CMDEXE),1)
|
|
||||||
@$(MKDIR) $(subst /,\,$@)
|
|
||||||
else
|
|
||||||
@$(MKDIR) -p $@
|
|
||||||
endif
|
|
||||||
|
|
||||||
# We set vpath to point to the top of the tree so that the source files
|
# We set vpath to point to the top of the tree so that the source files
|
||||||
# can be located. By following this scheme, it allows a single build rule
|
# can be located. By following this scheme, it allows a single build rule
|
||||||
# to be used to compile all .c files.
|
# to be used to compile all .c files.
|
||||||
@ -124,49 +37,16 @@ vpath %.c . $(TOP)
|
|||||||
vpath %.s . $(TOP)
|
vpath %.s . $(TOP)
|
||||||
vpath %.S . $(TOP)
|
vpath %.S . $(TOP)
|
||||||
|
|
||||||
# Compile .c file
|
include ${TOP}/examples/build_system/make/toolchain/arm_$(TOOLCHAIN)_rules.mk
|
||||||
$(BUILD)/obj/%.o: %.c
|
|
||||||
@echo CC $(notdir $@)
|
|
||||||
@$(CC) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
# ASM sources lower case .s
|
|
||||||
$(BUILD)/obj/%_asm.o: %.s
|
|
||||||
@echo AS $(notdir $@)
|
|
||||||
@$(AS) $(ASFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
# ASM sources upper case .S
|
|
||||||
$(BUILD)/obj/%_asm.o: %.S
|
|
||||||
@echo AS $(notdir $@)
|
|
||||||
@$(AS) $(ASFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
ifndef USE_IAR
|
|
||||||
# GCC based compiler
|
|
||||||
$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf
|
|
||||||
@echo CREATE $@
|
|
||||||
@$(OBJCOPY) -O binary $^ $@
|
|
||||||
|
|
||||||
$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf
|
|
||||||
@echo CREATE $@
|
|
||||||
@$(OBJCOPY) -O ihex $^ $@
|
|
||||||
|
|
||||||
$(BUILD)/$(PROJECT).elf: $(OBJ)
|
|
||||||
@echo LINK $@
|
|
||||||
@$(LD) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
|
|
||||||
|
|
||||||
|
OBJ_DIRS = $(sort $(dir $(OBJ)))
|
||||||
|
$(OBJ): | $(OBJ_DIRS)
|
||||||
|
$(OBJ_DIRS):
|
||||||
|
ifeq ($(CMDEXE),1)
|
||||||
|
-@$(MKDIR) $(subst /,\,$@)
|
||||||
else
|
else
|
||||||
|
@$(MKDIR) -p $@
|
||||||
# IAR Compiler
|
|
||||||
$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf
|
|
||||||
@echo CREATE $@
|
|
||||||
@$(OBJCOPY) --silent --bin $^ $@
|
|
||||||
|
|
||||||
$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf
|
|
||||||
@echo CREATE $@
|
|
||||||
@$(OBJCOPY) --silent --ihex $^ $@
|
|
||||||
|
|
||||||
$(BUILD)/$(PROJECT).elf: $(OBJ)
|
|
||||||
@echo LINK $@
|
|
||||||
@$(LD) -o $@ $(IAR_LDFLAGS) $^
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# UF2 generation, iMXRT need to strip to text only before conversion
|
# UF2 generation, iMXRT need to strip to text only before conversion
|
||||||
@ -192,10 +72,9 @@ endif
|
|||||||
# get depenecies
|
# get depenecies
|
||||||
.PHONY: get-deps
|
.PHONY: get-deps
|
||||||
get-deps:
|
get-deps:
|
||||||
ifdef DEPS_SUBMODULES
|
$(PYTHON) $(TOP)/tools/get_deps.py ${FAMILY}
|
||||||
git -C $(TOP) submodule update --init $(DEPS_SUBMODULES)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
.PHONY: size
|
||||||
size: $(BUILD)/$(PROJECT).elf
|
size: $(BUILD)/$(PROJECT).elf
|
||||||
-@echo ''
|
-@echo ''
|
||||||
@$(SIZE) $<
|
@$(SIZE) $<
|
||||||
@ -209,7 +88,7 @@ linkermap: $(BUILD)/$(PROJECT).elf
|
|||||||
# Flash Targets
|
# Flash Targets
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
|
|
||||||
# Jlink binary
|
# --------------- Jlink -----------------
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
JLINKEXE = JLink.exe
|
JLINKEXE = JLink.exe
|
||||||
else
|
else
|
||||||
@ -219,20 +98,24 @@ endif
|
|||||||
# Jlink Interface
|
# Jlink Interface
|
||||||
JLINK_IF ?= swd
|
JLINK_IF ?= swd
|
||||||
|
|
||||||
# Flash using jlink
|
# Jlink script
|
||||||
flash-jlink: $(BUILD)/$(PROJECT).hex
|
$(BUILD)/$(BOARD).jlink: $(BUILD)/$(PROJECT).hex
|
||||||
@echo halt > $(BUILD)/$(BOARD).jlink
|
@echo halt > $@
|
||||||
@echo r > $(BUILD)/$(BOARD).jlink
|
@echo loadfile $^ >> $@
|
||||||
@echo loadfile $^ >> $(BUILD)/$(BOARD).jlink
|
@echo r >> $@
|
||||||
@echo r >> $(BUILD)/$(BOARD).jlink
|
@echo go >> $@
|
||||||
@echo go >> $(BUILD)/$(BOARD).jlink
|
@echo exit >> $@
|
||||||
@echo exit >> $(BUILD)/$(BOARD).jlink
|
|
||||||
$(JLINKEXE) -device $(JLINK_DEVICE) -if $(JLINK_IF) -JTAGConf -1,-1 -speed auto -CommandFile $(BUILD)/$(BOARD).jlink
|
|
||||||
|
|
||||||
|
# Flash using jlink
|
||||||
|
flash-jlink: $(BUILD)/$(BOARD).jlink
|
||||||
|
$(JLINKEXE) -device $(JLINK_DEVICE) -if $(JLINK_IF) -JTAGConf -1,-1 -speed auto -CommandFile $<
|
||||||
|
|
||||||
|
# --------------- stm32 cube programmer -----------------
|
||||||
# Flash STM32 MCU using stlink with STM32 Cube Programmer CLI
|
# Flash STM32 MCU using stlink with STM32 Cube Programmer CLI
|
||||||
flash-stlink: $(BUILD)/$(PROJECT).elf
|
flash-stlink: $(BUILD)/$(PROJECT).elf
|
||||||
STM32_Programmer_CLI --connect port=swd --write $< --go
|
STM32_Programmer_CLI --connect port=swd --write $< --go
|
||||||
|
|
||||||
|
# --------------- xfel -----------------
|
||||||
$(BUILD)/$(PROJECT)-sunxi.bin: $(BUILD)/$(PROJECT).bin
|
$(BUILD)/$(PROJECT)-sunxi.bin: $(BUILD)/$(PROJECT).bin
|
||||||
$(PYTHON) $(TOP)/tools/mksunxi.py $< $@
|
$(PYTHON) $(TOP)/tools/mksunxi.py $< $@
|
||||||
|
|
||||||
@ -240,18 +123,23 @@ flash-xfel: $(BUILD)/$(PROJECT)-sunxi.bin
|
|||||||
xfel spinor write 0 $<
|
xfel spinor write 0 $<
|
||||||
xfel reset
|
xfel reset
|
||||||
|
|
||||||
# Flash using pyocd
|
# --------------- pyocd -----------------
|
||||||
PYOCD_OPTION ?=
|
PYOCD_OPTION ?=
|
||||||
flash-pyocd: $(BUILD)/$(PROJECT).hex
|
flash-pyocd: $(BUILD)/$(PROJECT).hex
|
||||||
pyocd flash -t $(PYOCD_TARGET) $(PYOCD_OPTION) $<
|
pyocd flash -t $(PYOCD_TARGET) $(PYOCD_OPTION) $<
|
||||||
#pyocd reset -t $(PYOCD_TARGET)
|
#pyocd reset -t $(PYOCD_TARGET)
|
||||||
|
|
||||||
# Flash using openocd
|
# --------------- openocd -----------------
|
||||||
OPENOCD_OPTION ?=
|
OPENOCD_OPTION ?=
|
||||||
flash-openocd: $(BUILD)/$(PROJECT).elf
|
flash-openocd: $(BUILD)/$(PROJECT).elf
|
||||||
openocd $(OPENOCD_OPTION) -c "program $< verify reset exit"
|
openocd $(OPENOCD_OPTION) -c "program $< verify reset exit"
|
||||||
|
|
||||||
# flash with Black Magic Probe
|
# --------------- dfu-util -----------------
|
||||||
|
DFU_UTIL_OPTION ?= -a 0
|
||||||
|
flash-dfu-util: $(BUILD)/$(PROJECT).bin
|
||||||
|
dfu-util -R $(DFU_UTIL_OPTION) -D $<
|
||||||
|
|
||||||
|
# --------------- Black Magic -----------------
|
||||||
# This symlink is created by https://github.com/blacksphere/blackmagic/blob/master/driver/99-blackmagic.rules
|
# This symlink is created by https://github.com/blacksphere/blackmagic/blob/master/driver/99-blackmagic.rules
|
||||||
BMP ?= /dev/ttyBmpGdb
|
BMP ?= /dev/ttyBmpGdb
|
||||||
|
|
||||||
@ -265,7 +153,11 @@ debug-bmp: $(BUILD)/$(PROJECT).elf
|
|||||||
|
|
||||||
# Create binary directory
|
# Create binary directory
|
||||||
$(BIN):
|
$(BIN):
|
||||||
|
ifeq ($(CMDEXE),1)
|
||||||
|
@$(MKDIR) $(subst /,\,$@)
|
||||||
|
else
|
||||||
@$(MKDIR) -p $@
|
@$(MKDIR) -p $@
|
||||||
|
endif
|
||||||
|
|
||||||
# Copy binaries .elf, .bin, .hex, .uf2 to BIN for upload
|
# Copy binaries .elf, .bin, .hex, .uf2 to BIN for upload
|
||||||
# due to large size of combined artifacts, only uf2 is uploaded for now
|
# due to large size of combined artifacts, only uf2 is uploaded for now
|
79
examples/build_system/make/toolchain/arm_gcc.mk
Normal file
79
examples/build_system/make/toolchain/arm_gcc.mk
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# makefile for arm gcc toolchain
|
||||||
|
|
||||||
|
CC = $(CROSS_COMPILE)gcc
|
||||||
|
CXX = $(CROSS_COMPILE)g++
|
||||||
|
AS = $(CC) -x assembler-with-cpp
|
||||||
|
LD = $(CC)
|
||||||
|
|
||||||
|
GDB = $(CROSS_COMPILE)gdb
|
||||||
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
||||||
|
SIZE = $(CROSS_COMPILE)size
|
||||||
|
|
||||||
|
CC_VERSION := $(shell $(CC) -dumpversion)
|
||||||
|
CC_VERSION_MAJOR = $(firstword $(subst ., ,$(CC_VERSION)))
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Compiler Flags
|
||||||
|
# ---------------------------------------
|
||||||
|
CFLAGS += \
|
||||||
|
-MD \
|
||||||
|
-ggdb \
|
||||||
|
-fdata-sections \
|
||||||
|
-ffunction-sections \
|
||||||
|
-fsingle-precision-constant \
|
||||||
|
-fno-strict-aliasing \
|
||||||
|
-Wall \
|
||||||
|
-Wextra \
|
||||||
|
-Werror \
|
||||||
|
-Wfatal-errors \
|
||||||
|
-Wdouble-promotion \
|
||||||
|
-Wstrict-prototypes \
|
||||||
|
-Wstrict-overflow \
|
||||||
|
-Werror-implicit-function-declaration \
|
||||||
|
-Wfloat-equal \
|
||||||
|
-Wundef \
|
||||||
|
-Wshadow \
|
||||||
|
-Wwrite-strings \
|
||||||
|
-Wsign-compare \
|
||||||
|
-Wmissing-format-attribute \
|
||||||
|
-Wunreachable-code \
|
||||||
|
-Wcast-align \
|
||||||
|
-Wcast-function-type \
|
||||||
|
-Wcast-qual \
|
||||||
|
-Wnull-dereference \
|
||||||
|
-Wuninitialized \
|
||||||
|
-Wunused \
|
||||||
|
-Wreturn-type \
|
||||||
|
-Wredundant-decls \
|
||||||
|
|
||||||
|
# conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
|
||||||
|
# -Wconversion
|
||||||
|
|
||||||
|
# Size Optimization as default
|
||||||
|
CFLAGS_OPTIMIZED ?= -Os
|
||||||
|
|
||||||
|
# Debugging/Optimization
|
||||||
|
ifeq ($(DEBUG), 1)
|
||||||
|
CFLAGS += -O0
|
||||||
|
NO_LTO = 1
|
||||||
|
else
|
||||||
|
CFLAGS += $(CFLAGS_OPTIMIZED)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Linker Flags
|
||||||
|
# ---------------------------------------
|
||||||
|
LDFLAGS += \
|
||||||
|
-Wl,-Map=$@.map \
|
||||||
|
-Wl,-cref \
|
||||||
|
-Wl,-gc-sections \
|
||||||
|
|
||||||
|
# renesas rx does not support --print-memory-usage flags
|
||||||
|
ifneq ($(FAMILY),rx)
|
||||||
|
LDFLAGS += -Wl,--print-memory-usage
|
||||||
|
endif
|
||||||
|
|
||||||
|
# from version 12
|
||||||
|
ifeq ($(shell expr $(CC_VERSION_MAJOR) \>= 12),1)
|
||||||
|
LDFLAGS += -Wl,--no-warn-rwx-segment
|
||||||
|
endif
|
75
examples/build_system/make/toolchain/arm_gcc_rules.mk
Normal file
75
examples/build_system/make/toolchain/arm_gcc_rules.mk
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
SRC_S += $(SRC_S_GCC)
|
||||||
|
|
||||||
|
# Assembly files can be name with upper case .S, convert it to .s
|
||||||
|
SRC_S := $(SRC_S:.S=.s)
|
||||||
|
|
||||||
|
# Due to GCC LTO bug https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966
|
||||||
|
# assembly file should be placed first in linking order
|
||||||
|
# '_asm' suffix is added to object of assembly file
|
||||||
|
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_S:.s=_asm.o))
|
||||||
|
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_C:.c=.o))
|
||||||
|
|
||||||
|
CFLAGS += $(CFLAGS_GCC) -MD
|
||||||
|
|
||||||
|
# LTO makes it difficult to analyze map file for optimizing size purpose
|
||||||
|
# We will run this option in ci
|
||||||
|
ifeq ($(NO_LTO),1)
|
||||||
|
CFLAGS := $(filter-out -flto,$(CFLAGS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(CFLAGS_SKIP),)
|
||||||
|
CFLAGS := $(filter-out $(CFLAGS_SKIP),$(CFLAGS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
LDFLAGS += $(CFLAGS) $(LDFLAGS_GCC)
|
||||||
|
|
||||||
|
ifdef LD_FILE
|
||||||
|
LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef LD_FILE_GCC
|
||||||
|
LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE_GCC)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ASFLAGS += $(CFLAGS)
|
||||||
|
|
||||||
|
LIBS_GCC ?= -lgcc -lm -lnosys
|
||||||
|
|
||||||
|
# libc
|
||||||
|
LIBS += $(LIBS_GCC)
|
||||||
|
|
||||||
|
ifneq ($(BOARD), spresense)
|
||||||
|
LIBS += -lc
|
||||||
|
endif
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Rules
|
||||||
|
# ---------------------------------------
|
||||||
|
|
||||||
|
# Compile .c file
|
||||||
|
$(BUILD)/obj/%.o: %.c
|
||||||
|
@echo CC $(notdir $@)
|
||||||
|
@$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
# ASM sources lower case .s
|
||||||
|
$(BUILD)/obj/%_asm.o: %.s
|
||||||
|
@echo AS $(notdir $@)
|
||||||
|
@$(AS) $(ASFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
# ASM sources upper case .S
|
||||||
|
$(BUILD)/obj/%_asm.o: %.S
|
||||||
|
@echo AS $(notdir $@)
|
||||||
|
@$(AS) $(ASFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
OBJCOPY_BIN_OPTION ?=
|
||||||
|
$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf
|
||||||
|
@echo CREATE $@
|
||||||
|
$(OBJCOPY) -O binary $(OBJCOPY_BIN_OPTION) $^ $@
|
||||||
|
|
||||||
|
$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf
|
||||||
|
@echo CREATE $@
|
||||||
|
@$(OBJCOPY) -O ihex $^ $@
|
||||||
|
|
||||||
|
$(BUILD)/$(PROJECT).elf: $(OBJ)
|
||||||
|
@echo LINK $@
|
||||||
|
@$(LD) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
|
11
examples/build_system/make/toolchain/arm_iar.mk
Normal file
11
examples/build_system/make/toolchain/arm_iar.mk
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# makefile for arm iar toolchain
|
||||||
|
AS = iasmarm
|
||||||
|
LD = ilinkarm
|
||||||
|
OBJCOPY = ielftool --silent
|
||||||
|
SIZE = size
|
||||||
|
|
||||||
|
# Enable extension mode (gcc compatible)
|
||||||
|
CFLAGS += -e --debug --silent
|
||||||
|
|
||||||
|
# silent mode
|
||||||
|
ASFLAGS += -S $(addprefix -I,$(INC))
|
44
examples/build_system/make/toolchain/arm_iar_rules.mk
Normal file
44
examples/build_system/make/toolchain/arm_iar_rules.mk
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
SRC_S += $(SRC_S_IAR)
|
||||||
|
|
||||||
|
# Assembly files can be name with upper case .S, convert it to .s
|
||||||
|
SRC_S := $(SRC_S:.S=.s)
|
||||||
|
|
||||||
|
# Due to GCC LTO bug https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966
|
||||||
|
# assembly file should be placed first in linking order
|
||||||
|
# '_asm' suffix is added to object of assembly file
|
||||||
|
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_S:.s=_asm.o))
|
||||||
|
OBJ += $(addprefix $(BUILD)/obj/, $(SRC_C:.c=.o))
|
||||||
|
|
||||||
|
# Linker script
|
||||||
|
LDFLAGS += --config $(TOP)/$(LD_FILE_IAR)
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Rules
|
||||||
|
# ---------------------------------------
|
||||||
|
|
||||||
|
# Compile .c file
|
||||||
|
$(BUILD)/obj/%.o: %.c
|
||||||
|
@echo CC $(notdir $@)
|
||||||
|
@$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
# ASM sources lower case .s
|
||||||
|
$(BUILD)/obj/%_asm.o: %.s
|
||||||
|
@echo AS $(notdir $@)
|
||||||
|
@$(AS) $(ASFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
# ASM sources upper case .S
|
||||||
|
$(BUILD)/obj/%_asm.o: %.S
|
||||||
|
@echo AS $(notdir $@)
|
||||||
|
@$(AS) $(ASFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf
|
||||||
|
@echo CREATE $@
|
||||||
|
@$(OBJCOPY) --bin $^ $@
|
||||||
|
|
||||||
|
$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf
|
||||||
|
@echo CREATE $@
|
||||||
|
@$(OBJCOPY) --ihex $^ $@
|
||||||
|
|
||||||
|
$(BUILD)/$(PROJECT).elf: $(OBJ)
|
||||||
|
@echo LINK $@
|
||||||
|
@$(LD) -o $@ $(LDFLAGS) $^
|
@ -1,20 +1,23 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/family_support.cmake)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/family_support.cmake)
|
||||||
|
|
||||||
project(tinyusb_device_examples)
|
project(tinyusb_device_examples C CXX ASM)
|
||||||
family_initialize_project(tinyusb_device_examples ${CMAKE_CURRENT_LIST_DIR})
|
family_initialize_project(tinyusb_device_examples ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
# family_add_subdirectory will filter what to actually add based on selected FAMILY
|
# family_add_subdirectory will filter what to actually add based on selected FAMILY
|
||||||
family_add_subdirectory(audio_4_channel_mic)
|
family_add_subdirectory(audio_4_channel_mic)
|
||||||
family_add_subdirectory(audio_test)
|
family_add_subdirectory(audio_test)
|
||||||
|
family_add_subdirectory(audio_test_multi_rate)
|
||||||
family_add_subdirectory(board_test)
|
family_add_subdirectory(board_test)
|
||||||
family_add_subdirectory(cdc_dual_ports)
|
family_add_subdirectory(cdc_dual_ports)
|
||||||
family_add_subdirectory(cdc_msc)
|
family_add_subdirectory(cdc_msc)
|
||||||
family_add_subdirectory(cdc_msc_freertos)
|
family_add_subdirectory(cdc_msc_freertos)
|
||||||
|
family_add_subdirectory(cdc_uac2)
|
||||||
family_add_subdirectory(dfu)
|
family_add_subdirectory(dfu)
|
||||||
family_add_subdirectory(dfu_runtime)
|
family_add_subdirectory(dfu_runtime)
|
||||||
family_add_subdirectory(dynamic_configuration)
|
family_add_subdirectory(dynamic_configuration)
|
||||||
|
family_add_subdirectory(hid_boot_interface)
|
||||||
family_add_subdirectory(hid_composite)
|
family_add_subdirectory(hid_composite)
|
||||||
family_add_subdirectory(hid_composite_freertos)
|
family_add_subdirectory(hid_composite_freertos)
|
||||||
family_add_subdirectory(hid_generic_inout)
|
family_add_subdirectory(hid_generic_inout)
|
||||||
|
@ -1,28 +1,38 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
|
||||||
|
|
||||||
# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
|
# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
|
||||||
family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
|
family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
project(${PROJECT})
|
project(${PROJECT} C CXX ASM)
|
||||||
|
|
||||||
# Checks this example is valid for the family and initializes the project
|
# Checks this example is valid for the family and initializes the project
|
||||||
family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
|
family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
|
# Espressif has its own cmake build system
|
||||||
|
if(FAMILY STREQUAL "espressif")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(${PROJECT})
|
add_executable(${PROJECT})
|
||||||
|
|
||||||
# Example source
|
# Example source
|
||||||
target_sources(${PROJECT} PUBLIC
|
target_sources(${PROJECT} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
|
${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
|
||||||
)
|
)
|
||||||
|
|
||||||
# Example include
|
# Example include
|
||||||
target_include_directories(${PROJECT} PUBLIC
|
target_include_directories(${PROJECT} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure compilation flags and libraries for the example... see the corresponding function
|
# Add libm for GCC
|
||||||
# in hw/bsp/FAMILY/family.cmake for details.
|
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
family_configure_device_example(${PROJECT})
|
target_link_libraries(${PROJECT} PUBLIC m)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Configure compilation flags and libraries for the example without RTOS.
|
||||||
|
# See the corresponding function in hw/bsp/FAMILY/family.cmake for details.
|
||||||
|
family_configure_device_example(${PROJECT} noos)
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
include ../../../tools/top.mk
|
include ../../build_system/make/make.mk
|
||||||
include ../../make.mk
|
|
||||||
|
|
||||||
INC += \
|
INC += \
|
||||||
src \
|
src \
|
||||||
$(TOP)/hw \
|
$(TOP)/hw \
|
||||||
|
|
||||||
# Example source
|
# Example source
|
||||||
EXAMPLE_SOURCE += $(wildcard src/*.c)
|
EXAMPLE_SOURCE += \
|
||||||
|
src/main.c \
|
||||||
|
src/usb_descriptors.c \
|
||||||
|
|
||||||
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
|
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
|
||||||
|
|
||||||
include ../../rules.mk
|
include ../../build_system/make/rules.mk
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
mcu:SAMD11
|
mcu:SAMD11
|
||||||
mcu:SAME5X
|
mcu:SAME5X
|
||||||
mcu:SAMG
|
mcu:SAMG
|
||||||
|
family:broadcom_64bit
|
||||||
|
family:espressif
|
||||||
|
@ -34,17 +34,16 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "bsp/board.h"
|
#include "bsp/board_api.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
|
#include "tusb_config.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// MACRO CONSTANT TYPEDEF PROTYPES
|
// MACRO CONSTANT TYPEDEF PROTYPES
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
#define AUDIO_SAMPLE_RATE CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE
|
||||||
#ifndef AUDIO_SAMPLE_RATE
|
|
||||||
#define AUDIO_SAMPLE_RATE 48000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Blink pattern
|
/* Blink pattern
|
||||||
* - 250 ms : device not mounted
|
* - 250 ms : device not mounted
|
||||||
@ -70,8 +69,13 @@ uint8_t clkValid;
|
|||||||
audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state
|
audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state
|
||||||
audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state
|
audio_control_range_4_n_t(1) sampleFreqRng; // Sample frequency range state
|
||||||
|
|
||||||
// Audio test data
|
#if CFG_TUD_AUDIO_ENABLE_ENCODING
|
||||||
uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ/2]; // Ensure half word aligned
|
// Audio test data, each buffer contains 2 channels, buffer[0] for CH0-1, buffer[1] for CH1-2
|
||||||
|
uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000/CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO];
|
||||||
|
#else
|
||||||
|
// Audio test data, 4 channels muxed together, buffer[0] for CH0, buffer[1] for CH1, buffer[2] for CH2, buffer[3] for CH3
|
||||||
|
uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX*CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE/1000];
|
||||||
|
#endif
|
||||||
|
|
||||||
void led_blinking_task(void);
|
void led_blinking_task(void);
|
||||||
void audio_task(void);
|
void audio_task(void);
|
||||||
@ -84,6 +88,10 @@ int main(void)
|
|||||||
// init device stack on configured roothub port
|
// init device stack on configured roothub port
|
||||||
tud_init(BOARD_TUD_RHPORT);
|
tud_init(BOARD_TUD_RHPORT);
|
||||||
|
|
||||||
|
if (board_init_after_tusb) {
|
||||||
|
board_init_after_tusb();
|
||||||
|
}
|
||||||
|
|
||||||
// Init values
|
// Init values
|
||||||
sampFreq = AUDIO_SAMPLE_RATE;
|
sampFreq = AUDIO_SAMPLE_RATE;
|
||||||
clkValid = 1;
|
clkValid = 1;
|
||||||
@ -93,15 +101,51 @@ int main(void)
|
|||||||
sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE;
|
sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE;
|
||||||
sampleFreqRng.subrange[0].bRes = 0;
|
sampleFreqRng.subrange[0].bRes = 0;
|
||||||
|
|
||||||
|
// Generate dummy data
|
||||||
|
#if CFG_TUD_AUDIO_ENABLE_ENCODING
|
||||||
|
uint16_t * p_buff = i2s_dummy_buffer[0];
|
||||||
|
uint16_t dataVal = 1;
|
||||||
|
for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++)
|
||||||
|
{
|
||||||
|
// CH0 saw wave
|
||||||
|
*p_buff++ = dataVal;
|
||||||
|
// CH1 inverted saw wave
|
||||||
|
*p_buff++ = 60 + AUDIO_SAMPLE_RATE/1000 - dataVal;
|
||||||
|
dataVal++;
|
||||||
|
}
|
||||||
|
p_buff = i2s_dummy_buffer[1];
|
||||||
|
for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++)
|
||||||
|
{
|
||||||
|
// CH3 square wave
|
||||||
|
*p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 120:170;
|
||||||
|
// CH4 sinus wave
|
||||||
|
float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000);
|
||||||
|
*p_buff++ = (uint16_t)(sinf(t) * 25) + 200;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
uint16_t * p_buff = i2s_dummy_buffer;
|
||||||
|
uint16_t dataVal = 1;
|
||||||
|
for (uint16_t cnt = 0; cnt < AUDIO_SAMPLE_RATE/1000; cnt++)
|
||||||
|
{
|
||||||
|
// CH0 saw wave
|
||||||
|
*p_buff++ = dataVal;
|
||||||
|
// CH1 inverted saw wave
|
||||||
|
*p_buff++ = 60 + AUDIO_SAMPLE_RATE/1000 - dataVal;
|
||||||
|
dataVal++;
|
||||||
|
// CH3 square wave
|
||||||
|
*p_buff++ = cnt < (AUDIO_SAMPLE_RATE/1000/2) ? 120:170;
|
||||||
|
// CH4 sinus wave
|
||||||
|
float t = 2*3.1415f * cnt / (AUDIO_SAMPLE_RATE/1000);
|
||||||
|
*p_buff++ = (uint16_t)(sinf(t) * 25) + 200;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
tud_task(); // tinyusb device task
|
tud_task(); // tinyusb device task
|
||||||
led_blinking_task();
|
led_blinking_task();
|
||||||
audio_task();
|
audio_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -132,7 +176,7 @@ void tud_suspend_cb(bool remote_wakeup_en)
|
|||||||
// Invoked when usb bus is resumed
|
// Invoked when usb bus is resumed
|
||||||
void tud_resume_cb(void)
|
void tud_resume_cb(void)
|
||||||
{
|
{
|
||||||
blink_interval_ms = BLINK_MOUNTED;
|
blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -141,8 +185,21 @@ void tud_resume_cb(void)
|
|||||||
|
|
||||||
void audio_task(void)
|
void audio_task(void)
|
||||||
{
|
{
|
||||||
// Yet to be filled - e.g. put meas data into TX FIFOs etc.
|
// Yet to be filled - e.g. read audio from I2S buffer.
|
||||||
// asm("nop");
|
// Here we simulate a I2S receive callback every 1ms.
|
||||||
|
static uint32_t start_ms = 0;
|
||||||
|
uint32_t curr_ms = board_millis();
|
||||||
|
if ( start_ms == curr_ms ) return; // not enough time
|
||||||
|
start_ms = curr_ms;
|
||||||
|
#if CFG_TUD_AUDIO_ENABLE_ENCODING
|
||||||
|
// Write I2S buffer into FIFO
|
||||||
|
for (uint8_t cnt=0; cnt < 2; cnt++)
|
||||||
|
{
|
||||||
|
tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
tud_audio_write(i2s_dummy_buffer, AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -290,7 +347,7 @@ bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *
|
|||||||
|
|
||||||
// Those are dummy values for now
|
// Those are dummy values for now
|
||||||
ret.bNrChannels = 1;
|
ret.bNrChannels = 1;
|
||||||
ret.bmChannelConfig = 0;
|
ret.bmChannelConfig = (audio_channel_config_t) 0;
|
||||||
ret.iChannelNames = 0;
|
ret.iChannelNames = 0;
|
||||||
|
|
||||||
TU_LOG2(" Get terminal connector\r\n");
|
TU_LOG2(" Get terminal connector\r\n");
|
||||||
@ -363,7 +420,8 @@ bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *
|
|||||||
{
|
{
|
||||||
case AUDIO_CS_REQ_CUR:
|
case AUDIO_CS_REQ_CUR:
|
||||||
TU_LOG2(" Get Sample Freq.\r\n");
|
TU_LOG2(" Get Sample Freq.\r\n");
|
||||||
return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq));
|
// Buffered control transfer is needed for IN flow control to work
|
||||||
|
return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq));
|
||||||
|
|
||||||
case AUDIO_CS_REQ_RANGE:
|
case AUDIO_CS_REQ_RANGE:
|
||||||
TU_LOG2(" Get Sample Freq. range\r\n");
|
TU_LOG2(" Get Sample Freq. range\r\n");
|
||||||
@ -399,10 +457,14 @@ bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, u
|
|||||||
(void) ep_in;
|
(void) ep_in;
|
||||||
(void) cur_alt_setting;
|
(void) cur_alt_setting;
|
||||||
|
|
||||||
for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++)
|
|
||||||
{
|
// In read world application data flow is driven by I2S clock,
|
||||||
tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX);
|
// both tud_audio_tx_done_pre_load_cb() & tud_audio_tx_done_post_load_cb() are hardly used.
|
||||||
}
|
// For example in your I2S receive callback:
|
||||||
|
// void I2S_Rx_Callback(int channel, const void* data, uint16_t samples)
|
||||||
|
// {
|
||||||
|
// tud_audio_write_support_ff(channel, data, samples * N_BYTES_PER_SAMPLE * N_CHANNEL_PER_FIFO);
|
||||||
|
// }
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -415,22 +477,6 @@ bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uin
|
|||||||
(void) ep_in;
|
(void) ep_in;
|
||||||
(void) cur_alt_setting;
|
(void) cur_alt_setting;
|
||||||
|
|
||||||
uint16_t dataVal;
|
|
||||||
|
|
||||||
// Generate dummy data
|
|
||||||
for (uint16_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++)
|
|
||||||
{
|
|
||||||
uint16_t * p_buff = i2s_dummy_buffer[cnt]; // 2 bytes per sample
|
|
||||||
dataVal = 1;
|
|
||||||
for (uint16_t cnt2 = 0; cnt2 < AUDIO_SAMPLE_RATE/1000; cnt2++)
|
|
||||||
{
|
|
||||||
for (uint8_t cnt3 = 0; cnt3 < CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; cnt3++)
|
|
||||||
{
|
|
||||||
*p_buff++ = dataVal;
|
|
||||||
}
|
|
||||||
dataVal++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@ if __name__ == '__main__':
|
|||||||
# print(sd.query_devices())
|
# print(sd.query_devices())
|
||||||
|
|
||||||
fs = 48000 # Sample rate
|
fs = 48000 # Sample rate
|
||||||
duration = 100e-3 # Duration of recording
|
duration = 1 # Duration of recording
|
||||||
|
|
||||||
if platform.system() == 'Windows':
|
if platform.system() == 'Windows':
|
||||||
# WDM-KS is needed since there are more than one MicNode device APIs (at least in Windows)
|
# WDM-KS is needed since there are more than one MicNode device APIs (at least in Windows)
|
||||||
device = 'Microphone (MicNode_4_Ch), Windows WDM-KS'
|
device = 'Microphone (MicNode_4_Ch), Windows WASAPI'
|
||||||
elif platform.system() == 'Darwin':
|
elif platform.system() == 'Darwin':
|
||||||
device = 'MicNode_4_Ch'
|
device = 'MicNode_4_Ch'
|
||||||
else:
|
else:
|
||||||
@ -25,10 +25,13 @@ if __name__ == '__main__':
|
|||||||
sd.wait() # Wait until recording is finished
|
sd.wait() # Wait until recording is finished
|
||||||
print('Done!')
|
print('Done!')
|
||||||
|
|
||||||
|
|
||||||
time = np.arange(0, duration, 1 / fs) # time vector
|
time = np.arange(0, duration, 1 / fs) # time vector
|
||||||
|
# strip starting zero
|
||||||
|
|
||||||
plt.plot(time, myrecording)
|
plt.plot(time, myrecording)
|
||||||
plt.xlabel('Time [s]')
|
plt.xlabel('Time [s]')
|
||||||
plt.ylabel('Amplitude')
|
plt.ylabel('Amplitude')
|
||||||
plt.title('MicNode 4 Channel')
|
plt.title('MicNode 4 Channel')
|
||||||
|
plt.legend(['CH-1', 'CH-2', 'CH-3','CH-4'])
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
@ -103,6 +103,7 @@ extern "C" {
|
|||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
// Have a look into audio_device.h for all configurations
|
// Have a look into audio_device.h for all configurations
|
||||||
|
#define CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE 48000
|
||||||
|
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN
|
#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN TUD_AUDIO_MIC_FOUR_CH_DESC_LEN
|
||||||
|
|
||||||
@ -112,15 +113,27 @@ extern "C" {
|
|||||||
#define CFG_TUD_AUDIO_ENABLE_EP_IN 1
|
#define CFG_TUD_AUDIO_ENABLE_EP_IN 1
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
|
#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX 2 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
|
#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX 4 // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
|
||||||
#define CFG_TUD_AUDIO_EP_SZ_IN (48 + 1) * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX // 48 Samples (48 kHz) x 2 Bytes/Sample x CFG_TUD_AUDIO_N_CHANNELS_TX Channels - the Windows driver always needs an extra sample per channel of space more, otherwise it complains... found by trial and error
|
#define CFG_TUD_AUDIO_EP_SZ_IN TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX)
|
||||||
|
|
||||||
|
#define CFG_TUD_AUDIO_ENABLE_ENCODING 1
|
||||||
|
#define CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL 1
|
||||||
|
|
||||||
|
#if CFG_TUD_AUDIO_ENABLE_ENCODING
|
||||||
|
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN
|
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN
|
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ CFG_TUD_AUDIO_EP_SZ_IN
|
||||||
|
|
||||||
#define CFG_TUD_AUDIO_ENABLE_ENCODING 1
|
|
||||||
#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1
|
#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING 1
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value
|
#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX 2 // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX)
|
#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX)
|
||||||
#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO)
|
#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO) // Example write FIFO every 1ms, so it should be 8 times larger for HS device
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX CFG_TUD_AUDIO_EP_SZ_IN
|
||||||
|
#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TUD_OPT_HIGH_SPEED ? 32 : 4) * CFG_TUD_AUDIO_EP_SZ_IN // Example write FIFO every 1ms, so it should be 8 times larger for HS device
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "bsp/board_api.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
|
|
||||||
/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.
|
/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.
|
||||||
@ -44,7 +45,7 @@ tusb_desc_device_t const desc_device =
|
|||||||
.bDescriptorType = TUSB_DESC_DEVICE,
|
.bDescriptorType = TUSB_DESC_DEVICE,
|
||||||
.bcdUSB = 0x0200,
|
.bcdUSB = 0x0200,
|
||||||
|
|
||||||
// Use Interface Association Descriptor (IAD) for CDC
|
// Use Interface Association Descriptor (IAD) for Audio
|
||||||
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
||||||
.bDeviceClass = TUSB_CLASS_MISC,
|
.bDeviceClass = TUSB_CLASS_MISC,
|
||||||
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
||||||
@ -96,7 +97,7 @@ enum
|
|||||||
|
|
||||||
uint8_t const desc_configuration[] =
|
uint8_t const desc_configuration[] =
|
||||||
{
|
{
|
||||||
// Interface count, string index, total length, attribute, power in mA
|
// Config number, interface count, string index, total length, attribute, power in mA
|
||||||
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100),
|
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100),
|
||||||
|
|
||||||
// Interface number, string index, EP Out & EP In address, EP size
|
// Interface number, string index, EP Out & EP In address, EP size
|
||||||
@ -116,50 +117,63 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
|
|||||||
// String Descriptors
|
// String Descriptors
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
// String Descriptor Index
|
||||||
|
enum {
|
||||||
|
STRID_LANGID = 0,
|
||||||
|
STRID_MANUFACTURER,
|
||||||
|
STRID_PRODUCT,
|
||||||
|
STRID_SERIAL,
|
||||||
|
};
|
||||||
|
|
||||||
// array of pointer to string descriptors
|
// array of pointer to string descriptors
|
||||||
char const* string_desc_arr [] =
|
char const* string_desc_arr [] = {
|
||||||
{
|
|
||||||
(const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409)
|
(const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409)
|
||||||
"PaniRCorp", // 1: Manufacturer
|
"PaniRCorp", // 1: Manufacturer
|
||||||
"MicNode_4_Ch", // 2: Product
|
"MicNode_4_Ch", // 2: Product
|
||||||
"123458", // 3: Serials, should use chip ID
|
NULL, // 3: Serials will use unique ID if possible
|
||||||
"UAC2", // 4: Audio Interface
|
"UAC2", // 4: Audio Interface
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint16_t _desc_str[32];
|
static uint16_t _desc_str[32 + 1];
|
||||||
|
|
||||||
// Invoked when received GET STRING DESCRIPTOR request
|
// Invoked when received GET STRING DESCRIPTOR request
|
||||||
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
|
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
|
||||||
uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid)
|
uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
|
||||||
{
|
|
||||||
(void) langid;
|
(void) langid;
|
||||||
|
size_t chr_count;
|
||||||
|
|
||||||
uint8_t chr_count;
|
switch ( index ) {
|
||||||
|
case STRID_LANGID:
|
||||||
if ( index == 0)
|
|
||||||
{
|
|
||||||
memcpy(&_desc_str[1], string_desc_arr[0], 2);
|
memcpy(&_desc_str[1], string_desc_arr[0], 2);
|
||||||
chr_count = 1;
|
chr_count = 1;
|
||||||
}else
|
break;
|
||||||
{
|
|
||||||
// Convert ASCII string into UTF-16
|
|
||||||
|
|
||||||
if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL;
|
case STRID_SERIAL:
|
||||||
|
chr_count = board_usb_get_serial(_desc_str + 1, 32);
|
||||||
|
break;
|
||||||
|
|
||||||
const char* str = string_desc_arr[index];
|
default:
|
||||||
|
// Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors.
|
||||||
|
// https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors
|
||||||
|
|
||||||
|
if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL;
|
||||||
|
|
||||||
|
const char *str = string_desc_arr[index];
|
||||||
|
|
||||||
// Cap at max char
|
// Cap at max char
|
||||||
chr_count = (uint8_t) strlen(str);
|
chr_count = strlen(str);
|
||||||
if ( chr_count > 31 ) chr_count = 31;
|
size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type
|
||||||
|
if ( chr_count > max_count ) chr_count = max_count;
|
||||||
|
|
||||||
for(uint8_t i=0; i<chr_count; i++)
|
// Convert ASCII string into UTF-16
|
||||||
{
|
for ( size_t i = 0; i < chr_count; i++ ) {
|
||||||
_desc_str[1+i] = str[i];
|
_desc_str[1 + i] = str[i];
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// first byte is length (including header), second byte is string type
|
// first byte is length (including header), second byte is string type
|
||||||
_desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8 ) | (2*chr_count + 2));
|
_desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2));
|
||||||
|
|
||||||
return _desc_str;
|
return _desc_str;
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,33 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
|
||||||
|
|
||||||
# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
|
# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
|
||||||
family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
|
family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
project(${PROJECT})
|
project(${PROJECT} C CXX ASM)
|
||||||
|
|
||||||
# Checks this example is valid for the family and initializes the project
|
# Checks this example is valid for the family and initializes the project
|
||||||
family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
|
family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
|
# Espressif has its own cmake build system
|
||||||
|
if(FAMILY STREQUAL "espressif")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(${PROJECT})
|
add_executable(${PROJECT})
|
||||||
|
|
||||||
# Example source
|
# Example source
|
||||||
target_sources(${PROJECT} PUBLIC
|
target_sources(${PROJECT} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
|
${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
|
||||||
)
|
)
|
||||||
|
|
||||||
# Example include
|
# Example include
|
||||||
target_include_directories(${PROJECT} PUBLIC
|
target_include_directories(${PROJECT} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure compilation flags and libraries for the example... see the corresponding function
|
# Configure compilation flags and libraries for the example without RTOS.
|
||||||
# in hw/bsp/FAMILY/family.cmake for details.
|
# See the corresponding function in hw/bsp/FAMILY/family.cmake for details.
|
||||||
family_configure_device_example(${PROJECT})
|
family_configure_device_example(${PROJECT} noos)
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
include ../../../tools/top.mk
|
include ../../build_system/make/make.mk
|
||||||
include ../../make.mk
|
|
||||||
|
|
||||||
INC += \
|
INC += \
|
||||||
src \
|
src \
|
||||||
@ -9,4 +8,4 @@ INC += \
|
|||||||
EXAMPLE_SOURCE += $(wildcard src/*.c)
|
EXAMPLE_SOURCE += $(wildcard src/*.c)
|
||||||
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
|
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
|
||||||
|
|
||||||
include ../../rules.mk
|
include ../../build_system/make/rules.mk
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
mcu:SAMD11
|
mcu:SAMD11
|
||||||
mcu:SAME5X
|
mcu:SAME5X
|
||||||
mcu:SAMG
|
mcu:SAMG
|
||||||
|
family:espressif
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "bsp/board.h"
|
#include "bsp/board_api.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -85,6 +85,10 @@ int main(void)
|
|||||||
// init device stack on configured roothub port
|
// init device stack on configured roothub port
|
||||||
tud_init(BOARD_TUD_RHPORT);
|
tud_init(BOARD_TUD_RHPORT);
|
||||||
|
|
||||||
|
if (board_init_after_tusb) {
|
||||||
|
board_init_after_tusb();
|
||||||
|
}
|
||||||
|
|
||||||
// Init values
|
// Init values
|
||||||
sampFreq = AUDIO_SAMPLE_RATE;
|
sampFreq = AUDIO_SAMPLE_RATE;
|
||||||
clkValid = 1;
|
clkValid = 1;
|
||||||
@ -100,9 +104,6 @@ int main(void)
|
|||||||
led_blinking_task();
|
led_blinking_task();
|
||||||
audio_task();
|
audio_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -133,7 +134,7 @@ void tud_suspend_cb(bool remote_wakeup_en)
|
|||||||
// Invoked when usb bus is resumed
|
// Invoked when usb bus is resumed
|
||||||
void tud_resume_cb(void)
|
void tud_resume_cb(void)
|
||||||
{
|
{
|
||||||
blink_interval_ms = BLINK_MOUNTED;
|
blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -291,7 +292,7 @@ bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *
|
|||||||
|
|
||||||
// Those are dummy values for now
|
// Those are dummy values for now
|
||||||
ret.bNrChannels = 1;
|
ret.bNrChannels = 1;
|
||||||
ret.bmChannelConfig = 0;
|
ret.bmChannelConfig = (audio_channel_config_t) 0;
|
||||||
ret.iChannelNames = 0;
|
ret.iChannelNames = 0;
|
||||||
|
|
||||||
TU_LOG2(" Get terminal connector\r\n");
|
TU_LOG2(" Get terminal connector\r\n");
|
||||||
|
@ -35,4 +35,3 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
samples = np.array(myrecording)
|
samples = np.array(myrecording)
|
||||||
np.savetxt('Output.csv', samples, delimiter=",", fmt='%s')
|
np.savetxt('Output.csv', samples, delimiter=",", fmt='%s')
|
||||||
|
|
@ -23,6 +23,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "bsp/board_api.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
|
|
||||||
/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.
|
/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.
|
||||||
@ -44,7 +45,7 @@ tusb_desc_device_t const desc_device =
|
|||||||
.bDescriptorType = TUSB_DESC_DEVICE,
|
.bDescriptorType = TUSB_DESC_DEVICE,
|
||||||
.bcdUSB = 0x0200,
|
.bcdUSB = 0x0200,
|
||||||
|
|
||||||
// Use Interface Association Descriptor (IAD) for CDC
|
// Use Interface Association Descriptor (IAD) for Audio
|
||||||
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
||||||
.bDeviceClass = TUSB_CLASS_MISC,
|
.bDeviceClass = TUSB_CLASS_MISC,
|
||||||
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
|
||||||
@ -96,7 +97,7 @@ enum
|
|||||||
|
|
||||||
uint8_t const desc_configuration[] =
|
uint8_t const desc_configuration[] =
|
||||||
{
|
{
|
||||||
// Interface count, string index, total length, attribute, power in mA
|
// Config number, interface count, string index, total length, attribute, power in mA
|
||||||
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100),
|
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100),
|
||||||
|
|
||||||
// Interface number, string index, EP Out & EP In address, EP size
|
// Interface number, string index, EP Out & EP In address, EP size
|
||||||
@ -116,50 +117,65 @@ uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
|
|||||||
// String Descriptors
|
// String Descriptors
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
// String Descriptor Index
|
||||||
|
enum {
|
||||||
|
STRID_LANGID = 0,
|
||||||
|
STRID_MANUFACTURER,
|
||||||
|
STRID_PRODUCT,
|
||||||
|
STRID_SERIAL,
|
||||||
|
};
|
||||||
|
|
||||||
// array of pointer to string descriptors
|
// array of pointer to string descriptors
|
||||||
char const* string_desc_arr [] =
|
char const* string_desc_arr [] =
|
||||||
{
|
{
|
||||||
(const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409)
|
(const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409)
|
||||||
"PaniRCorp", // 1: Manufacturer
|
"PaniRCorp", // 1: Manufacturer
|
||||||
"MicNode", // 2: Product
|
"MicNode", // 2: Product
|
||||||
"123456", // 3: Serials, should use chip ID
|
NULL, // 3: Serials will use unique ID if possible
|
||||||
"UAC2", // 4: Audio Interface
|
"UAC2", // 4: Audio Interface
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint16_t _desc_str[32];
|
static uint16_t _desc_str[32 + 1];
|
||||||
|
|
||||||
// Invoked when received GET STRING DESCRIPTOR request
|
// Invoked when received GET STRING DESCRIPTOR request
|
||||||
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
|
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
|
||||||
uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid)
|
uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
|
||||||
{
|
|
||||||
(void) langid;
|
(void) langid;
|
||||||
|
size_t chr_count;
|
||||||
|
|
||||||
uint8_t chr_count;
|
switch ( index ) {
|
||||||
|
case STRID_LANGID:
|
||||||
if ( index == 0)
|
|
||||||
{
|
|
||||||
memcpy(&_desc_str[1], string_desc_arr[0], 2);
|
memcpy(&_desc_str[1], string_desc_arr[0], 2);
|
||||||
chr_count = 1;
|
chr_count = 1;
|
||||||
}else
|
break;
|
||||||
{
|
|
||||||
// Convert ASCII string into UTF-16
|
|
||||||
|
|
||||||
if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL;
|
case STRID_SERIAL:
|
||||||
|
chr_count = board_usb_get_serial(_desc_str + 1, 32);
|
||||||
|
break;
|
||||||
|
|
||||||
const char* str = string_desc_arr[index];
|
default:
|
||||||
|
// Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors.
|
||||||
|
// https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors
|
||||||
|
|
||||||
|
if ( !(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) ) return NULL;
|
||||||
|
|
||||||
|
const char *str = string_desc_arr[index];
|
||||||
|
|
||||||
// Cap at max char
|
// Cap at max char
|
||||||
chr_count = (uint8_t) strlen(str);
|
chr_count = strlen(str);
|
||||||
if ( chr_count > 31 ) chr_count = 31;
|
size_t const max_count = sizeof(_desc_str) / sizeof(_desc_str[0]) - 1; // -1 for string type
|
||||||
|
if ( chr_count > max_count ) chr_count = max_count;
|
||||||
|
|
||||||
for(uint8_t i=0; i<chr_count; i++)
|
// Convert ASCII string into UTF-16
|
||||||
{
|
for ( size_t i = 0; i < chr_count; i++ ) {
|
||||||
_desc_str[1+i] = str[i];
|
_desc_str[1 + i] = str[i];
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// first byte is length (including header), second byte is string type
|
// first byte is length (including header), second byte is string type
|
||||||
_desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8 ) | (2*chr_count + 2));
|
_desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * chr_count + 2));
|
||||||
|
|
||||||
return _desc_str;
|
return _desc_str;
|
||||||
}
|
}
|
||||||
|
33
examples/device/audio_test_multi_rate/CMakeLists.txt
Normal file
33
examples/device/audio_test_multi_rate/CMakeLists.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
|
||||||
|
|
||||||
|
# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
|
||||||
|
family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
|
project(${PROJECT} C CXX ASM)
|
||||||
|
|
||||||
|
# Checks this example is valid for the family and initializes the project
|
||||||
|
family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
|
# Espressif has its own cmake build system
|
||||||
|
if(FAMILY STREQUAL "espressif")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(${PROJECT})
|
||||||
|
|
||||||
|
# Example source
|
||||||
|
target_sources(${PROJECT} PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
|
||||||
|
)
|
||||||
|
|
||||||
|
# Example include
|
||||||
|
target_include_directories(${PROJECT} PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
|
)
|
||||||
|
|
||||||
|
# Configure compilation flags and libraries for the example without RTOS.
|
||||||
|
# See the corresponding function in hw/bsp/FAMILY/family.cmake for details.
|
||||||
|
family_configure_device_example(${PROJECT} noos)
|
11
examples/device/audio_test_multi_rate/Makefile
Normal file
11
examples/device/audio_test_multi_rate/Makefile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
include ../../build_system/make/make.mk
|
||||||
|
|
||||||
|
INC += \
|
||||||
|
src \
|
||||||
|
$(TOP)/hw \
|
||||||
|
|
||||||
|
# Example source
|
||||||
|
EXAMPLE_SOURCE += $(wildcard src/*.c)
|
||||||
|
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
|
||||||
|
|
||||||
|
include ../../build_system/make/rules.mk
|
4
examples/device/audio_test_multi_rate/skip.txt
Normal file
4
examples/device/audio_test_multi_rate/skip.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
mcu:SAMD11
|
||||||
|
mcu:SAME5X
|
||||||
|
mcu:SAMG
|
||||||
|
family:espressif
|
525
examples/device/audio_test_multi_rate/src/main.c
Normal file
525
examples/device/audio_test_multi_rate/src/main.c
Normal file
@ -0,0 +1,525 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Reinhard Panhuber
|
||||||
|
* Copyright (c) 2022 HiFiPhile
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* plot_audio_samples.py requires following modules:
|
||||||
|
* $ sudo apt install libportaudio
|
||||||
|
* $ pip3 install sounddevice matplotlib
|
||||||
|
*
|
||||||
|
* Then run
|
||||||
|
* $ python3 plot_audio_samples.py
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "bsp/board_api.h"
|
||||||
|
#include "tusb.h"
|
||||||
|
#include "usb_descriptors.h"
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// MACRO CONSTANT TYPEDEF PROTYPES
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
/* Blink pattern
|
||||||
|
* - 250 ms : device not mounted
|
||||||
|
* - 1000 ms : device mounted
|
||||||
|
* - 2500 ms : device is suspended
|
||||||
|
*/
|
||||||
|
enum {
|
||||||
|
BLINK_NOT_MOUNTED = 250,
|
||||||
|
BLINK_MOUNTED = 1000,
|
||||||
|
BLINK_SUSPENDED = 2500,
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED;
|
||||||
|
|
||||||
|
// Audio controls
|
||||||
|
// Current states
|
||||||
|
bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0
|
||||||
|
uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; // +1 for master channel 0
|
||||||
|
uint32_t sampFreq;
|
||||||
|
uint8_t bytesPerSample;
|
||||||
|
uint8_t clkValid;
|
||||||
|
|
||||||
|
// Range states
|
||||||
|
// List of supported sample rates
|
||||||
|
static const uint32_t sampleRatesList[] =
|
||||||
|
{
|
||||||
|
32000, 48000, 96000
|
||||||
|
};
|
||||||
|
|
||||||
|
#define N_sampleRates TU_ARRAY_SIZE(sampleRatesList)
|
||||||
|
|
||||||
|
// Bytes per format of every Alt settings
|
||||||
|
static const uint8_t bytesPerSampleAltList[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] =
|
||||||
|
{
|
||||||
|
CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX,
|
||||||
|
CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX,
|
||||||
|
};
|
||||||
|
|
||||||
|
audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; // Volume range state
|
||||||
|
|
||||||
|
|
||||||
|
// Audio test data
|
||||||
|
CFG_TUSB_MEM_ALIGN uint8_t test_buffer_audio[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX];
|
||||||
|
uint16_t startVal = 0;
|
||||||
|
|
||||||
|
void led_blinking_task(void);
|
||||||
|
void audio_task(void);
|
||||||
|
|
||||||
|
/*------------- MAIN -------------*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
board_init();
|
||||||
|
|
||||||
|
// init device stack on configured roothub port
|
||||||
|
tud_init(BOARD_TUD_RHPORT);
|
||||||
|
|
||||||
|
if (board_init_after_tusb) {
|
||||||
|
board_init_after_tusb();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init values
|
||||||
|
sampFreq = sampleRatesList[0];
|
||||||
|
clkValid = 1;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
tud_task(); // tinyusb device task
|
||||||
|
led_blinking_task();
|
||||||
|
audio_task();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Device callbacks
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
// Invoked when device is mounted
|
||||||
|
void tud_mount_cb(void)
|
||||||
|
{
|
||||||
|
blink_interval_ms = BLINK_MOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when device is unmounted
|
||||||
|
void tud_umount_cb(void)
|
||||||
|
{
|
||||||
|
blink_interval_ms = BLINK_NOT_MOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when usb bus is suspended
|
||||||
|
// remote_wakeup_en : if host allow us to perform remote wakeup
|
||||||
|
// Within 7ms, device must draw an average of current less than 2.5 mA from bus
|
||||||
|
void tud_suspend_cb(bool remote_wakeup_en)
|
||||||
|
{
|
||||||
|
(void) remote_wakeup_en;
|
||||||
|
blink_interval_ms = BLINK_SUSPENDED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when usb bus is resumed
|
||||||
|
void tud_resume_cb(void)
|
||||||
|
{
|
||||||
|
blink_interval_ms = tud_mounted() ? BLINK_MOUNTED : BLINK_NOT_MOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// AUDIO Task
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
void audio_task(void)
|
||||||
|
{
|
||||||
|
// Yet to be filled - e.g. put meas data into TX FIFOs etc.
|
||||||
|
// asm("nop");
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Application Callback API Implementations
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
// Invoked when set interface is called, typically on start/stop streaming or format change
|
||||||
|
bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request)
|
||||||
|
{
|
||||||
|
(void)rhport;
|
||||||
|
//uint8_t const itf = tu_u16_low(tu_le16toh(p_request->wIndex));
|
||||||
|
uint8_t const alt = tu_u16_low(tu_le16toh(p_request->wValue));
|
||||||
|
|
||||||
|
// Clear buffer when streaming format is changed
|
||||||
|
if(alt != 0)
|
||||||
|
{
|
||||||
|
bytesPerSample = bytesPerSampleAltList[alt-1];
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific set request received for an EP
|
||||||
|
bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
(void) pBuff;
|
||||||
|
|
||||||
|
// We do not support any set range requests here, only current value requests
|
||||||
|
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
uint8_t ep = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) ep;
|
||||||
|
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific set request received for an interface
|
||||||
|
bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
(void) pBuff;
|
||||||
|
|
||||||
|
// We do not support any set range requests here, only current value requests
|
||||||
|
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) itf;
|
||||||
|
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific set request received for an entity
|
||||||
|
bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
||||||
|
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) itf;
|
||||||
|
|
||||||
|
// We do not support any set range requests here, only current value requests
|
||||||
|
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
||||||
|
|
||||||
|
// If request is for our feature unit
|
||||||
|
if ( entityID == UAC2_ENTITY_FEATURE_UNIT )
|
||||||
|
{
|
||||||
|
switch ( ctrlSel )
|
||||||
|
{
|
||||||
|
case AUDIO_FU_CTRL_MUTE:
|
||||||
|
// Request uses format layout 1
|
||||||
|
TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t));
|
||||||
|
|
||||||
|
mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur;
|
||||||
|
|
||||||
|
TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case AUDIO_FU_CTRL_VOLUME:
|
||||||
|
// Request uses format layout 2
|
||||||
|
TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t));
|
||||||
|
|
||||||
|
volume[channelNum] = (uint16_t) ((audio_control_cur_2_t*) pBuff)->bCur;
|
||||||
|
|
||||||
|
TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clock Source unit
|
||||||
|
if ( entityID == UAC2_ENTITY_CLOCK )
|
||||||
|
{
|
||||||
|
switch ( ctrlSel )
|
||||||
|
{
|
||||||
|
case AUDIO_CS_CTRL_SAM_FREQ:
|
||||||
|
TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_4_t));
|
||||||
|
|
||||||
|
sampFreq = (uint32_t)((audio_control_cur_4_t *)pBuff)->bCur;
|
||||||
|
|
||||||
|
TU_LOG2("Clock set current freq: %lu\r\n", sampFreq);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific get request received for an EP
|
||||||
|
bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
uint8_t ep = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) ep;
|
||||||
|
|
||||||
|
// return tud_control_xfer(rhport, p_request, &tmp, 1);
|
||||||
|
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific get request received for an interface
|
||||||
|
bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) itf;
|
||||||
|
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when audio class specific get request received for an entity
|
||||||
|
bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
|
||||||
|
// Page 91 in UAC2 specification
|
||||||
|
uint8_t channelNum = TU_U16_LOW(p_request->wValue);
|
||||||
|
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
|
// uint8_t itf = TU_U16_LOW(p_request->wIndex); // Since we have only one audio function implemented, we do not need the itf value
|
||||||
|
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
|
||||||
|
|
||||||
|
// Input terminal (Microphone input)
|
||||||
|
if (entityID == UAC2_ENTITY_INPUT_TERMINAL)
|
||||||
|
{
|
||||||
|
switch ( ctrlSel )
|
||||||
|
{
|
||||||
|
case AUDIO_TE_CTRL_CONNECTOR:
|
||||||
|
{
|
||||||
|
// The terminal connector control only has a get request with only the CUR attribute.
|
||||||
|
audio_desc_channel_cluster_t ret;
|
||||||
|
|
||||||
|
// Those are dummy values for now
|
||||||
|
ret.bNrChannels = 1;
|
||||||
|
ret.bmChannelConfig = 0;
|
||||||
|
ret.iChannelNames = 0;
|
||||||
|
|
||||||
|
TU_LOG2(" Get terminal connector\r\n");
|
||||||
|
|
||||||
|
return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Unknown/Unsupported control selector
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Feature unit
|
||||||
|
if (entityID == UAC2_ENTITY_FEATURE_UNIT)
|
||||||
|
{
|
||||||
|
switch ( ctrlSel )
|
||||||
|
{
|
||||||
|
case AUDIO_FU_CTRL_MUTE:
|
||||||
|
// Audio control mute cur parameter block consists of only one byte - we thus can send it right away
|
||||||
|
// There does not exist a range parameter block for mute
|
||||||
|
TU_LOG2(" Get Mute of channel: %u\r\n", channelNum);
|
||||||
|
return tud_control_xfer(rhport, p_request, &mute[channelNum], 1);
|
||||||
|
|
||||||
|
case AUDIO_FU_CTRL_VOLUME:
|
||||||
|
switch ( p_request->bRequest )
|
||||||
|
{
|
||||||
|
case AUDIO_CS_REQ_CUR:
|
||||||
|
TU_LOG2(" Get Volume of channel: %u\r\n", channelNum);
|
||||||
|
return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum]));
|
||||||
|
|
||||||
|
case AUDIO_CS_REQ_RANGE:
|
||||||
|
TU_LOG2(" Get Volume range of channel: %u\r\n", channelNum);
|
||||||
|
|
||||||
|
// Copy values - only for testing - better is version below
|
||||||
|
audio_control_range_2_n_t(1)
|
||||||
|
ret;
|
||||||
|
|
||||||
|
ret.wNumSubRanges = 1;
|
||||||
|
ret.subrange[0].bMin = -90; // -90 dB
|
||||||
|
ret.subrange[0].bMax = 30; // +30 dB
|
||||||
|
ret.subrange[0].bRes = 1; // 1 dB steps
|
||||||
|
|
||||||
|
return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret));
|
||||||
|
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clock Source unit
|
||||||
|
if ( entityID == UAC2_ENTITY_CLOCK )
|
||||||
|
{
|
||||||
|
switch ( ctrlSel )
|
||||||
|
{
|
||||||
|
case AUDIO_CS_CTRL_SAM_FREQ:
|
||||||
|
// channelNum is always zero in this case
|
||||||
|
switch ( p_request->bRequest )
|
||||||
|
{
|
||||||
|
case AUDIO_CS_REQ_CUR:
|
||||||
|
TU_LOG2(" Get Sample Freq.\r\n");
|
||||||
|
return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq));
|
||||||
|
|
||||||
|
case AUDIO_CS_REQ_RANGE:
|
||||||
|
{
|
||||||
|
TU_LOG2(" Get Sample Freq. range\r\n");
|
||||||
|
audio_control_range_4_n_t(N_sampleRates) rangef =
|
||||||
|
{
|
||||||
|
.wNumSubRanges = tu_htole16(N_sampleRates)
|
||||||
|
};
|
||||||
|
TU_LOG1("Clock get %d freq ranges\r\n", N_sampleRates);
|
||||||
|
for(uint8_t i = 0; i < N_sampleRates; i++)
|
||||||
|
{
|
||||||
|
rangef.subrange[i].bMin = (int32_t)sampleRatesList[i];
|
||||||
|
rangef.subrange[i].bMax = (int32_t)sampleRatesList[i];
|
||||||
|
rangef.subrange[i].bRes = 0;
|
||||||
|
TU_LOG1("Range %d (%d, %d, %d)\r\n", i, (int)rangef.subrange[i].bMin, (int)rangef.subrange[i].bMax, (int)rangef.subrange[i].bRes);
|
||||||
|
}
|
||||||
|
return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, &rangef, sizeof(rangef));
|
||||||
|
}
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AUDIO_CS_CTRL_CLK_VALID:
|
||||||
|
// Only cur attribute exists for this request
|
||||||
|
TU_LOG2(" Get Sample Freq. valid\r\n");
|
||||||
|
return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid));
|
||||||
|
|
||||||
|
// Unknown/Unsupported control
|
||||||
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TU_LOG2(" Unsupported entity: %d\r\n", entityID);
|
||||||
|
return false; // Yet not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
(void) itf;
|
||||||
|
(void) ep_in;
|
||||||
|
(void) cur_alt_setting;
|
||||||
|
|
||||||
|
tud_audio_write((uint8_t *)test_buffer_audio, (uint16_t)(sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000) * bytesPerSample));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
(void) n_bytes_copied;
|
||||||
|
(void) itf;
|
||||||
|
(void) ep_in;
|
||||||
|
(void) cur_alt_setting;
|
||||||
|
|
||||||
|
// 16bit
|
||||||
|
if(bytesPerSample == 2)
|
||||||
|
{
|
||||||
|
uint16_t* pData_16 = (uint16_t*)((void*)test_buffer_audio);
|
||||||
|
for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++)
|
||||||
|
{
|
||||||
|
pData_16[cnt] = startVal++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 24bit in 32bit slot
|
||||||
|
else if(bytesPerSample == 4)
|
||||||
|
{
|
||||||
|
uint32_t* pData_32 = (uint32_t*)((void*)test_buffer_audio);
|
||||||
|
for (size_t cnt = 0; cnt < sampFreq / (TUD_OPT_HIGH_SPEED ? 8000 : 1000); cnt++)
|
||||||
|
{
|
||||||
|
pData_32[cnt] = (uint32_t)startVal++ << 16U;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
(void) p_request;
|
||||||
|
startVal = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// BLINKING TASK
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void led_blinking_task(void)
|
||||||
|
{
|
||||||
|
static uint32_t start_ms = 0;
|
||||||
|
static bool led_state = false;
|
||||||
|
|
||||||
|
// Blink every interval ms
|
||||||
|
if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time
|
||||||
|
start_ms += blink_interval_ms;
|
||||||
|
|
||||||
|
board_led_write(led_state);
|
||||||
|
led_state = 1 - led_state; // toggle
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user