diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 01b280fc..0ed20b85 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,9 +1,8 @@ -name: Build +name: Build ARM on: pull_request: push: - repository_dispatch: release: types: - created @@ -94,259 +93,6 @@ jobs: - name: Build run: python3 tools/build_family.py ${{ matrix.family }} - - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.family }}-tinyusb-examples - path: _bin/ - - - name: Create Release Asset - if: ${{ github.event_name == 'release' }} - run: | - cd _bin/ - zip -r ../${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip * - - - name: Upload Release Asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: ${{ github.event_name == 'release' }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_name: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_content_type: application/zip - - # --------------------------------------- - # Build RISC-V family - # --------------------------------------- - build-riscv: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - family: - # Alphabetical order - - 'fomu' - steps: - - name: Setup Python - uses: actions/setup-python@v2 - - - name: Checkout TinyUSB - uses: actions/checkout@v2 - - - name: Checkout common submodules in lib - run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip - - - 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 - - - name: Cache Toolchain - uses: actions/cache@v2 - id: cache-toolchain - with: - path: ~/cache/ - key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }} - - - name: Install Toolchain - if: steps.cache-toolchain.outputs.cache-hit != 'true' - run: | - mkdir -p ~/cache/toolchain - wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.gz - tar -C ~/cache/toolchain -xaf toolchain.tar.gz - - - name: Set Toolchain Path - run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` - - - name: Build - run: python3 tools/build_family.py ${{ matrix.family }} - - - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.family }}-tinyusb-examples - path: _bin/ - - - name: Create Release Asset - if: ${{ github.event_name == 'release' }} - run: | - cd _bin/ - zip -r ../${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip * - - - name: Upload Release Asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: ${{ github.event_name == 'release' }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_name: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_content_type: application/zip - - # --------------------------------------- - # Build ESP32SX family - # --------------------------------------- - build-esp32sx: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - board: - # Alphabetical order - # ESP32-S2 - - 'adafruit_feather_esp32s2' - - 'adafruit_magtag_29gray' - - 'adafruit_metro_esp32s2' - - 'espressif_kaluga_1' - - 'espressif_saola_1' - # ESP32-S3 - - 'espressif_addax_1' - - steps: - - name: Setup Python - uses: actions/setup-python@v2 - - - name: Pull ESP-IDF docker - run: docker pull espressif/idf:latest - - - name: Checkout TinyUSB - uses: actions/checkout@v2 - - - name: Build - run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32sx.py ${{ matrix.board }} - - # --------------------------------------- - # Build msp430 family - # --------------------------------------- - build-msp430: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - family: - # Alphabetical order - - 'msp430' - steps: - - name: Setup Python - uses: actions/setup-python@v2 - - - name: Checkout TinyUSB - uses: actions/checkout@v2 - - - name: Checkout common submodules in lib - run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip - - - 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 - - - name: Cache Toolchain - uses: actions/cache@v2 - id: cache-toolchain - with: - path: ~/cache/ - key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }} - - - name: Install Toolchain - if: steps.cache-toolchain.outputs.cache-hit != 'true' - run: | - mkdir -p ~/cache/toolchain - wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.bz2 - tar -C ~/cache/toolchain -xaf toolchain.tar.bz2 - - - name: Set Toolchain Path - run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` - - - name: Build - run: python3 tools/build_family.py ${{ matrix.family }} - - - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.family }}-tinyusb-examples - path: _bin/ - - - name: Create Release Asset - if: ${{ github.event_name == 'release' }} - run: | - cd _bin/ - zip -r ../${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip * - - - name: Upload Release Asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: ${{ github.event_name == 'release' }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_name: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_content_type: application/zip - - # --------------------------------------- - # Build Renesas family - # --------------------------------------- - build-renesas: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - family: - # Alphabetical order - - 'rx63n' - steps: - - name: Setup Python - uses: actions/setup-python@v2 - - - name: Checkout TinyUSB - uses: actions/checkout@v2 - - - name: Checkout common submodules in lib - run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip - - - 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 - - - name: Cache Toolchain - uses: actions/cache@v2 - id: cache-toolchain - with: - path: ~/cache/ - key: ${{ runner.os }}-21-03-30-${{ env.TOOLCHAIN_URL }} - - - name: Install Toolchain - if: steps.cache-toolchain.outputs.cache-hit != 'true' - run: | - mkdir -p ~/cache/toolchain/gnurx - wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.run - chmod +x toolchain.run - ./toolchain.run -p ~/cache/toolchain/gnurx -y - - - name: Set Toolchain Path - run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` - - - name: Build - run: python3 tools/build_family.py ${{ matrix.family }} - - - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.family }}-tinyusb-examples - path: _bin/ - - - name: Create Release Asset - if: ${{ github.event_name == 'release' }} - run: | - cd _bin/ - zip -r ../${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip * - - - name: Upload Release Asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: ${{ github.event_name == 'release' }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_name: ${{ matrix.family }}-tinyusb-${{ github.event.release.tag_name }}-examples.zip - asset_content_type: application/zip - # --------------------------------------- # Build all no-family (opharned) boards # --------------------------------------- @@ -394,4 +140,4 @@ jobs: run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` - name: Build - run: python3 tools/build_board.py ${{ matrix.example }} \ No newline at end of file + run: python3 tools/build_board.py ${{ matrix.example }} diff --git a/.github/workflows/build_esp.yml b/.github/workflows/build_esp.yml new file mode 100644 index 00000000..08bb4f5d --- /dev/null +++ b/.github/workflows/build_esp.yml @@ -0,0 +1,35 @@ +name: Build ESP + +on: + pull_request: + push: + release: + types: + - created + +jobs: + build-esp: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + board: + # Alphabetical order + # ESP32-S2 + - 'adafruit_metro_esp32s2' + - 'espressif_saola_1' + # ESP32-S3 + - 'espressif_addax_1' + + steps: + - name: Setup Python + uses: actions/setup-python@v2 + + - name: Pull ESP-IDF docker + run: docker pull espressif/idf:latest + + - name: Checkout TinyUSB + uses: actions/checkout@v2 + + - name: Build + run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32sx.py ${{ matrix.board }} diff --git a/.github/workflows/build_msp430.yml b/.github/workflows/build_msp430.yml new file mode 100644 index 00000000..ff2ce72c --- /dev/null +++ b/.github/workflows/build_msp430.yml @@ -0,0 +1,50 @@ +name: Build MSP430 + +on: + pull_request: + push: + release: + types: + - created + +jobs: + build-msp430: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + family: + # Alphabetical order + - 'msp430' + steps: + - name: Setup Python + uses: actions/setup-python@v2 + + - name: Checkout TinyUSB + uses: actions/checkout@v2 + + - name: Checkout common submodules in lib + run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip + + - 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 + + - name: Cache Toolchain + uses: actions/cache@v2 + id: cache-toolchain + with: + path: ~/cache/ + key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }} + + - name: Install Toolchain + if: steps.cache-toolchain.outputs.cache-hit != 'true' + run: | + mkdir -p ~/cache/toolchain + wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.bz2 + tar -C ~/cache/toolchain -xaf toolchain.tar.bz2 + + - name: Set Toolchain Path + run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` + + - name: Build + run: python3 tools/build_family.py ${{ matrix.family }} diff --git a/.github/workflows/build_renesas.yml b/.github/workflows/build_renesas.yml new file mode 100644 index 00000000..45e0c5fd --- /dev/null +++ b/.github/workflows/build_renesas.yml @@ -0,0 +1,51 @@ +name: Build Renesas + +on: + pull_request: + push: + release: + types: + - created + +jobs: + build-rx: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + family: + # Alphabetical order + - 'rx63n' + steps: + - name: Setup Python + uses: actions/setup-python@v2 + + - name: Checkout TinyUSB + uses: actions/checkout@v2 + + - name: Checkout common submodules in lib + run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip + + - 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 + + - name: Cache Toolchain + uses: actions/cache@v2 + id: cache-toolchain + with: + path: ~/cache/ + key: ${{ runner.os }}-21-03-30-${{ env.TOOLCHAIN_URL }} + + - name: Install Toolchain + if: steps.cache-toolchain.outputs.cache-hit != 'true' + run: | + mkdir -p ~/cache/toolchain/gnurx + wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.run + chmod +x toolchain.run + ./toolchain.run -p ~/cache/toolchain/gnurx -y + + - name: Set Toolchain Path + run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` + + - name: Build + run: python3 tools/build_family.py ${{ matrix.family }} diff --git a/.github/workflows/build_riscv.yml b/.github/workflows/build_riscv.yml new file mode 100644 index 00000000..1e3046d2 --- /dev/null +++ b/.github/workflows/build_riscv.yml @@ -0,0 +1,50 @@ +name: Build RISC-V + +on: + pull_request: + push: + release: + types: + - created + +jobs: + build-riscv: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + family: + # Alphabetical order + - 'fomu' + steps: + - name: Setup Python + uses: actions/setup-python@v2 + + - name: Checkout TinyUSB + uses: actions/checkout@v2 + + - name: Checkout common submodules in lib + run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip + + - 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 + + - name: Cache Toolchain + uses: actions/cache@v2 + id: cache-toolchain + with: + path: ~/cache/ + key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }} + + - name: Install Toolchain + if: steps.cache-toolchain.outputs.cache-hit != 'true' + run: | + mkdir -p ~/cache/toolchain + wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.gz + tar -C ~/cache/toolchain -xaf toolchain.tar.gz + + - name: Set Toolchain Path + run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin` + + - name: Build + run: python3 tools/build_family.py ${{ matrix.family }} diff --git a/examples/device/uac2_headset/src/main.c b/examples/device/uac2_headset/src/main.c index 57abafe6..1b6a770a 100644 --- a/examples/device/uac2_headset/src/main.c +++ b/examples/device/uac2_headset/src/main.c @@ -332,13 +332,14 @@ bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_reque return true; } -bool tud_audio_rx_done_cb(uint8_t rhport, uint8_t *buffer, uint16_t buf_size) +bool tud_audio_rx_done_pre_read_cb(uint8_t rhport, uint16_t n_bytes_received, uint8_t func_id, uint8_t ep_out, uint8_t cur_alt_setting) { (void)rhport; + (void)func_id; + (void)ep_out; + (void)cur_alt_setting; - spk_data_size = buf_size; - memcpy(spk_buf, buffer, buf_size); - + spk_data_size = tud_audio_read(spk_buf, n_bytes_received); return true; } diff --git a/examples/make.mk b/examples/make.mk index 6366d6ce..df8bfd61 100644 --- a/examples/make.mk +++ b/examples/make.mk @@ -88,6 +88,7 @@ CFLAGS += \ -fno-strict-aliasing \ -Wdouble-promotion \ -Wstrict-prototypes \ + -Wstrict-overflow \ -Wall \ -Wextra \ -Werror \ @@ -100,7 +101,8 @@ CFLAGS += \ -Wsign-compare \ -Wmissing-format-attribute \ -Wunreachable-code \ - -Wcast-align + -Wcast-align \ + -Wcast-function-type # Debugging/Optimization ifeq ($(DEBUG), 1) diff --git a/hw/bsp/nrf/family.c b/hw/bsp/nrf/family.c index fc5e805d..ed742daa 100644 --- a/hw/bsp/nrf/family.c +++ b/hw/bsp/nrf/family.c @@ -55,6 +55,13 @@ static nrfx_uarte_t _uart_id = NRFX_UARTE_INSTANCE(0); // We must call it within SD's SOC event handler, or set it as power event handler if SD is not enabled. extern void tusb_hal_nrf_power_event(uint32_t event); + +// nrf power callback, could be unused if SD is enabled or usb is disabled (board_test example) +TU_ATTR_UNUSED static void power_event_handler(nrfx_power_usb_evt_t event) +{ + tusb_hal_nrf_power_event((uint32_t) event); +} + void board_init(void) { // stop LF clock just in case we jump from application without reset @@ -121,7 +128,7 @@ void board_init(void) // Register tusb function as USB power handler // cause cast-function-type warning - const nrfx_power_usbevt_config_t config = { .handler = ((nrfx_power_usb_event_handler_t) tusb_hal_nrf_power_event) }; + const nrfx_power_usbevt_config_t config = { .handler = power_event_handler }; nrfx_power_usbevt_init(&config); nrfx_power_usbevt_enable(); diff --git a/src/common/tusb_fifo.c b/src/common/tusb_fifo.c index 81e11eb0..5f7b6a26 100644 --- a/src/common/tusb_fifo.c +++ b/src/common/tusb_fifo.c @@ -325,6 +325,8 @@ static uint16_t advance_pointer(tu_fifo_t* f, uint16_t p, uint16_t offset) // We limit the index space of p such that a correct wrap around happens // Check for a wrap around or if we are in unused index space - This has to be checked first!! // We are exploiting the wrap around to the correct index + + // TODO warning: assuming signed overflow does not occur when assuming that (X + c) < X is always false [-Wstrict-overflow] if ((p > p + offset) || (p + offset > f->max_pointer_idx)) { p = (p + offset) + f->non_used_index_space; diff --git a/src/osal/osal_pico.h b/src/osal/osal_pico.h index bae1217e..1c3366e0 100644 --- a/src/osal/osal_pico.h +++ b/src/osal/osal_pico.h @@ -57,6 +57,7 @@ static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semde static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr) { + (void) in_isr; sem_release(sem_hdl); return true; } @@ -158,6 +159,7 @@ static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in // however osal_queue_recieve may be. therefore my assumption is that // the fifo mutex is not populated for queues used from an IRQ context //assert(!qhdl->ff.mutex); + (void) in_isr; _osal_q_lock(qhdl); bool success = tu_fifo_write(&qhdl->ff, data);