diff options
Diffstat (limited to 'tinyusb/examples')
199 files changed, 0 insertions, 16045 deletions
diff --git a/tinyusb/examples/device/99-tinyusb.rules b/tinyusb/examples/device/99-tinyusb.rules deleted file mode 100755 index e6372ed5..00000000 --- a/tinyusb/examples/device/99-tinyusb.rules +++ /dev/null @@ -1,14 +0,0 @@ -# Copy this file to the location of your distribution's udev rules, for example on Ubuntu: -#   sudo cp 99-tinyusb.rules /etc/udev/rules.d/ -# Then reload udev configuration by executing: -#   sudo udevadm control --reload-rules -#   sudo udevadm trigger - -# Check SUBSYSTEM -SUBSYSTEMS=="hidraw", KERNEL=="hidraw*", MODE="0666", GROUP="dialout" - -# Rule applies to all TinyUSB example -ATTRS{idVendor}=="cafe", MODE="0666", GROUP="dialout" - -# Rule to blacklist TinyUSB example from being manipulated by ModemManager. -SUBSYSTEMS=="usb", ATTRS{idVendor}=="cafe", ENV{ID_MM_DEVICE_IGNORE}="1" diff --git a/tinyusb/examples/device/CMakeLists.txt b/tinyusb/examples/device/CMakeLists.txt deleted file mode 100755 index a0e4600f..00000000 --- a/tinyusb/examples/device/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/family_support.cmake) - -project(tinyusb_device_examples) -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(audio_4_channel_mic) -family_add_subdirectory(audio_test) -family_add_subdirectory(board_test) -family_add_subdirectory(cdc_dual_ports) -family_add_subdirectory(cdc_msc) -family_add_subdirectory(cdc_msc_freertos) -family_add_subdirectory(dfu) -family_add_subdirectory(dfu_runtime) -family_add_subdirectory(dynamic_configuration) -family_add_subdirectory(hid_composite) -family_add_subdirectory(hid_composite_freertos) -family_add_subdirectory(hid_generic_inout) -family_add_subdirectory(hid_multiple_interface) -family_add_subdirectory(midi_test) -family_add_subdirectory(msc_dual_lun) -family_add_subdirectory(net_lwip_webserver) -family_add_subdirectory(uac2_headset) -family_add_subdirectory(usbtmc) -family_add_subdirectory(webusb_serial) diff --git a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMD11 b/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAME5X b/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAME5X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAME5X +++ /dev/null diff --git a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMG b/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMG deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMG +++ /dev/null diff --git a/tinyusb/examples/device/audio_4_channel_mic/CMakeLists.txt b/tinyusb/examples/device/audio_4_channel_mic/CMakeLists.txt deleted file mode 100755 index f6e10e2e..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT}) diff --git a/tinyusb/examples/device/audio_4_channel_mic/Makefile b/tinyusb/examples/device/audio_4_channel_mic/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/audio_4_channel_mic/src/main.c b/tinyusb/examples/device/audio_4_channel_mic/src/main.c deleted file mode 100755 index 983b87e5..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/src/main.c +++ /dev/null @@ -1,458 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Reinhard Panhuber - * - * 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.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -#ifndef AUDIO_SAMPLE_RATE -#define AUDIO_SAMPLE_RATE   48000 -#endif - -/* 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 clkValid; - -// Range states -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 test data -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 - -void led_blinking_task(void); -void audio_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  // Init values -  sampFreq = AUDIO_SAMPLE_RATE; -  clkValid = 1; - -  sampleFreqRng.wNumSubRanges = 1; -  sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; -  sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; -  sampleFreqRng.subrange[0].bRes = 0; - -  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 = BLINK_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 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 == 2 ) -  { -    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] = ((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; -    } -  } -  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 == 1) -  { -    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 == 2) -  { -    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 = 90;		// +90 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 == 4 ) -  { -    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"); -            return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - -           // 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; - -  for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; 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); -  } - -  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; - -  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; -} - -bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) -{ -  (void) rhport; -  (void) p_request; - -  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 -} diff --git a/tinyusb/examples/device/audio_4_channel_mic/src/plot_audio_samples.py b/tinyusb/examples/device/audio_4_channel_mic/src/plot_audio_samples.py deleted file mode 100755 index 9ab15135..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/src/plot_audio_samples.py +++ /dev/null @@ -1,34 +0,0 @@ -import sounddevice as sd -import matplotlib.pyplot as plt -import numpy as np -import platform - -if __name__ == '__main__': - -    # If you got "ValueError: No input device matching", that is because your PC name example device -    # differently from tested list below. Uncomment the next line to see full list and try to pick correct one -    # print(sd.query_devices()) - -    fs = 48000  		# Sample rate -    duration = 100e-3   # Duration of recording - -    if platform.system() == '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' -    elif platform.system() == 'Darwin': -        device = 'MicNode_4_Ch' -    else: -        device ='default' - -    myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=4, dtype='int16', device=device) -    print('Waiting...') -    sd.wait()  # Wait until recording is finished -    print('Done!') - -    time = np.arange(0, duration, 1 / fs)  # time vector -    plt.plot(time, myrecording) -    plt.xlabel('Time [s]') -    plt.ylabel('Amplitude') -    plt.title('MicNode 4 Channel') -    plt.show() -    
\ No newline at end of file diff --git a/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h b/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h deleted file mode 100755 index 44be5a0d..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -#error CFG_TUSB_MCU must be defined -#endif - -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX -#define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) -#else -#define CFG_TUSB_RHPORT0_MODE       OPT_MODE_DEVICE -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -#ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG              0 -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_AUDIO             1 -#define CFG_TUD_VENDOR            0 - -//-------------------------------------------------------------------- -// AUDIO CLASS DRIVER CONFIGURATION -//-------------------------------------------------------------------- - -// Have a look into audio_device.h for all configurations - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN                                 TUD_AUDIO_MIC_FOUR_CH_DESC_LEN - -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT                                 1 -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ                              64 - -#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_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_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_ENABLE_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_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) - -#ifdef __cplusplus -} -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c b/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c deleted file mode 100755 index 93ec6e9f..00000000 --- a/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c +++ /dev/null @@ -1,160 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]     AUDIO | MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -    _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -enum -{ -  ITF_NUM_AUDIO_CONTROL = 0, -  ITF_NUM_AUDIO_STREAMING, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    	(TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO   0x03 -#else -#define EPNUM_AUDIO   0x01 -#endif - -uint8_t const desc_configuration[] = -{ -    // Interface count, string index, total length, attribute, power in mA -    TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -    // Interface number, string index, EP Out & EP In address, EP size -    TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -    (const char[]) { 0x09, 0x04 }, 	// 0: is supported language is English (0x0409) -    "PaniRCorp",                   	// 1: Manufacturer -    "MicNode_4_Ch",    		// 2: Product -    "123458",                      	// 3: Serials, should use chip ID -    "UAC2",                 	 	// 4: Audio Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // Convert ASCII string into UTF-16 - -    if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL; - -    const char* str = string_desc_arr[index]; - -    // Cap at max char -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/audio_test/.skip.MCU_SAMD11 b/tinyusb/examples/device/audio_test/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_test/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/audio_test/.skip.MCU_SAME5X b/tinyusb/examples/device/audio_test/.skip.MCU_SAME5X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_test/.skip.MCU_SAME5X +++ /dev/null diff --git a/tinyusb/examples/device/audio_test/.skip.MCU_SAMG b/tinyusb/examples/device/audio_test/.skip.MCU_SAMG deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/audio_test/.skip.MCU_SAMG +++ /dev/null diff --git a/tinyusb/examples/device/audio_test/CMakeLists.txt b/tinyusb/examples/device/audio_test/CMakeLists.txt deleted file mode 100755 index cb321f9a..00000000 --- a/tinyusb/examples/device/audio_test/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/audio_test/Makefile b/tinyusb/examples/device/audio_test/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/audio_test/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/audio_test/src/main.c b/tinyusb/examples/device/audio_test/src/main.c deleted file mode 100755 index 9a2fdd3a..00000000 --- a/tinyusb/examples/device/audio_test/src/main.c +++ /dev/null @@ -1,446 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Reinhard Panhuber - * - * 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.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -#ifndef AUDIO_SAMPLE_RATE -#define AUDIO_SAMPLE_RATE   48000 -#endif - -/* 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 clkValid; - -// Range states -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 test data -uint16_t test_buffer_audio[CFG_TUD_AUDIO_EP_SZ_IN/2]; -uint16_t startVal = 0; - -void led_blinking_task(void); -void audio_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  // Init values -  sampFreq = AUDIO_SAMPLE_RATE; -  clkValid = 1; - -  sampleFreqRng.wNumSubRanges = 1; -  sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE; -  sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE; -  sampleFreqRng.subrange[0].bRes = 0; - -  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 = BLINK_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 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 == 2 ) -  { -    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] = ((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; -    } -  } -  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 == 1) -  { -    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 == 2) -  { -    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 = 90;		// +90 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 == 4 ) -  { -    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"); -            return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng)); - -           // 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, CFG_TUD_AUDIO_EP_SZ_IN); - -  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; - -  for (size_t cnt = 0; cnt < CFG_TUD_AUDIO_EP_SZ_IN/2; cnt++) -  { -    test_buffer_audio[cnt] = startVal++; -  } - -  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 -} diff --git a/tinyusb/examples/device/audio_test/src/plot_audio_samples.py b/tinyusb/examples/device/audio_test/src/plot_audio_samples.py deleted file mode 100755 index 6e3c4978..00000000 --- a/tinyusb/examples/device/audio_test/src/plot_audio_samples.py +++ /dev/null @@ -1,34 +0,0 @@ -import sounddevice as sd -import matplotlib.pyplot as plt -import numpy as np -import platform - -if __name__ == '__main__': - -    # If you got "ValueError: No input device matching", that is because your PC name example device -    # differently from tested list below. Uncomment the next line to see full list and try to pick correct one -    # print(sd.query_devices()) - -    fs = 48000           # Sample rate -    duration = 100e-3    # Duration of recording - -    if platform.system() == 'Windows': -        # MME is needed since there are more than one MicNode device APIs (at least in Windows) -        device = 'Microphone (MicNode) MME' -    elif platform.system() == 'Darwin': -        device = 'MicNode' -    else: -        device ='default' - -    myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16', device=device) -    print('Waiting...') -    sd.wait()  # Wait until recording is finished -    print('Done!') - -    time = np.arange(0, duration, 1 / fs)  # time vector -    plt.plot(time, myrecording) -    plt.xlabel('Time [s]') -    plt.ylabel('Amplitude') -    plt.title('MicNode') -    plt.show() -    
\ No newline at end of file diff --git a/tinyusb/examples/device/audio_test/src/tusb_config.h b/tinyusb/examples/device/audio_test/src/tusb_config.h deleted file mode 100755 index 683a1a56..00000000 --- a/tinyusb/examples/device/audio_test/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -#error CFG_TUSB_MCU must be defined -#endif - -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX -#define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) -#else -#define CFG_TUSB_RHPORT0_MODE       OPT_MODE_DEVICE -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -#ifndef CFG_TUSB_DEBUG -#define CFG_TUSB_DEBUG              0 -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_AUDIO             1 -#define CFG_TUD_VENDOR            0 - -//-------------------------------------------------------------------- -// AUDIO CLASS DRIVER CONFIGURATION -//-------------------------------------------------------------------- - -// Have a look into audio_device.h for all configurations - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN                                 TUD_AUDIO_MIC_ONE_CH_DESC_LEN -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT                                 1                                       // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ                              64                                      // Size of control request buffer - -#define CFG_TUD_AUDIO_ENABLE_EP_IN                                    1 -#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX                    2                                       // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX                            1                                       // Driver gets this info from the descriptors - we define it here to use it to setup the descriptors and to do calculations with it below - be aware: for different number of channels you need another descriptor! -#define CFG_TUD_AUDIO_EP_SZ_IN                                        48 * 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 1 Channel -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX                             CFG_TUD_AUDIO_EP_SZ_IN                  // Maximum EP IN size for all AS alternate settings used -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ                          CFG_TUD_AUDIO_EP_SZ_IN + 1 - -#ifdef __cplusplus -} -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/audio_test/src/usb_descriptors.c b/tinyusb/examples/device/audio_test/src/usb_descriptors.c deleted file mode 100755 index 67dd34d2..00000000 --- a/tinyusb/examples/device/audio_test/src/usb_descriptors.c +++ /dev/null @@ -1,160 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]     AUDIO | MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -    _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -enum -{ -  ITF_NUM_AUDIO_CONTROL = 0, -  ITF_NUM_AUDIO_STREAMING, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    	(TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_ONE_CH_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO   0x03 -#else -#define EPNUM_AUDIO   0x01 -#endif - -uint8_t const desc_configuration[] = -{ -    // Interface count, string index, total length, attribute, power in mA -    TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -    // Interface number, string index, EP Out & EP In address, EP size -    TUD_AUDIO_MIC_ONE_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -    (const char[]) { 0x09, 0x04 }, 	// 0: is supported language is English (0x0409) -    "PaniRCorp",                   	// 1: Manufacturer -    "MicNode",              		// 2: Product -    "123456",                      	// 3: Serials, should use chip ID -    "UAC2",                 	 	// 4: Audio Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // Convert ASCII string into UTF-16 - -    if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL; - -    const char* str = string_desc_arr[index]; - -    // Cap at max char -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/board_test/CMakeLists.txt b/tinyusb/examples/device/board_test/CMakeLists.txt deleted file mode 100755 index 37113578..00000000 --- a/tinyusb/examples/device/board_test/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake) - -# Check for -DFAMILY= -if(FAMILY MATCHES "^esp32s[2-3]") -  # use BOARD-Directory name for project id -  get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME) -  set(PROJECT ${BOARD}-${PROJECT}) - -  # TOP is absolute path to root directory of TinyUSB git repo -  set(TOP "../../..") -  get_filename_component(TOP "${TOP}" REALPATH) - -  project(${PROJECT}) - -else() - -  # gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>) -  family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR}) - -  project(${PROJECT}) - -  # Checks this example is valid for the family and initializes the project -  family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -  add_executable(${PROJECT}) - -  # Example source -  target_sources(${PROJECT} PUBLIC -          ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -          ) - -  # Example include -  target_include_directories(${PROJECT} PUBLIC -          ${CMAKE_CURRENT_SOURCE_DIR}/src -          ) - -  # Configure compilation flags and libraries for the example... see the corresponding function -  # in hw/bsp/FAMILY/family.cmake for details. -  family_configure_device_example(${PROJECT}) -endif() diff --git a/tinyusb/examples/device/board_test/Makefile b/tinyusb/examples/device/board_test/Makefile deleted file mode 100755 index b65575ce..00000000 --- a/tinyusb/examples/device/board_test/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -# board_test example is special example that doesn't enable device or host stack -# This can cause some TinyUSB API missing, this hack to allow us to fill those API -# to pass the compilation process -CFLAGS +=	\ -	-D"tud_int_handler(x)= " \ - -include ../../rules.mk diff --git a/tinyusb/examples/device/board_test/sdkconfig.defaults b/tinyusb/examples/device/board_test/sdkconfig.defaults deleted file mode 100755 index 83871619..00000000 --- a/tinyusb/examples/device/board_test/sdkconfig.defaults +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_CMAKE=y -CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/tinyusb/examples/device/board_test/src/CMakeLists.txt b/tinyusb/examples/device/board_test/src/CMakeLists.txt deleted file mode 100755 index e4e1f4e9..00000000 --- a/tinyusb/examples/device/board_test/src/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -# FAMILY = esp32sx -idf_component_register(SRCS "main.c" -                    INCLUDE_DIRS "." -                    REQUIRES freertos soc) -                     -file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) - -if(EXISTS ${board_cmake}) -    include(${board_cmake}) -endif() - -idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) -target_include_directories(${COMPONENT_TARGET} PUBLIC -  "${FREERTOS_ORIG_INCLUDE_PATH}" -  "${TOP}/hw" -  "${TOP}/src" -) diff --git a/tinyusb/examples/device/board_test/src/main.c b/tinyusb/examples/device/board_test/src/main.c deleted file mode 100755 index c77dd564..00000000 --- a/tinyusb/examples/device/board_test/src/main.c +++ /dev/null @@ -1,78 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -/* Blink pattern - * - 250 ms  : button is not pressed - * - 1000 ms : button is pressed (and hold) - */ -enum  { -  BLINK_PRESSED = 250, -  BLINK_UNPRESSED = 1000 -}; - -#define HELLO_STR   "Hello from TinyUSB\r\n" - -int main(void) -{ -  board_init(); - -  uint32_t start_ms = 0; -  bool led_state = false; - -  while (1) -  { -    uint32_t interval_ms = board_button_read() ? BLINK_PRESSED : BLINK_UNPRESSED; - -    // Blink every interval ms -    if ( !(board_millis() - start_ms < interval_ms) ) -    { -      board_uart_write(HELLO_STR, strlen(HELLO_STR)); - -      start_ms = board_millis(); - -      board_led_write(led_state); -      led_state = 1 - led_state; // toggle -    } -  } - -  return 0; -} - -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -void app_main(void) -{ -  main(); -} -#endif diff --git a/tinyusb/examples/device/board_test/src/tusb_config.h b/tinyusb/examples/device/board_test/src/tusb_config.h deleted file mode 100755 index da33729e..00000000 --- a/tinyusb/examples/device/board_test/src/tusb_config.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -#ifndef CFG_TUSB_OS -  #define CFG_TUSB_OS               OPT_OS_NONE -#endif - -#define CFG_TUSB_RHPORT0_MODE       OPT_MODE_NONE - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE   64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC             0 -#define CFG_TUD_MSC             0 -#define CFG_TUD_HID             0 -#define CFG_TUD_MIDI            0 -#define CFG_TUD_VENDOR          0 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/cdc_dual_ports/CMakeLists.txt b/tinyusb/examples/device/cdc_dual_ports/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/cdc_dual_ports/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/cdc_dual_ports/Makefile b/tinyusb/examples/device/cdc_dual_ports/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/cdc_dual_ports/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/cdc_dual_ports/src/main.c b/tinyusb/examples/device/cdc_dual_ports/src/main.c deleted file mode 100755 index 34cd29ed..00000000 --- a/tinyusb/examples/device/cdc_dual_ports/src/main.c +++ /dev/null @@ -1,100 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <ctype.h> - -#include "bsp/board.h" -#include "tusb.h" - -//------------- prototypes -------------// -static void cdc_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    cdc_task(); -  } - -  return 0; -} - -// echo to either Serial0 or Serial1 -// with Serial0 as all lower case, Serial1 as all upper case -static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count) -{ -  for(uint32_t i=0; i<count; i++) -  { -    if (itf == 0) -    { -      // echo back 1st port as lower case -      if (isupper(buf[i])) buf[i] += 'a' - 'A'; -    } -    else -    { -      // echo back 2nd port as upper case -      if (islower(buf[i])) buf[i] -= 'a' - 'A'; -    } - -    tud_cdc_n_write_char(itf, buf[i]); -  } -  tud_cdc_n_write_flush(itf); -} - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -static void cdc_task(void) -{ -  uint8_t itf; - -  for (itf = 0; itf < CFG_TUD_CDC; itf++) -  { -    // connected() check for DTR bit -    // Most but not all terminal client set this when making connection -    // if ( tud_cdc_n_connected(itf) ) -    { -      if ( tud_cdc_n_available(itf) ) -      { -        uint8_t buf[64]; - -        uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf)); - -        // echo back to both serial ports -        echo_serial_port(0, buf, count); -        echo_serial_port(1, buf, count); -      } -    } -  } -} diff --git a/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h b/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h deleted file mode 100755 index ff8535d1..00000000 --- a/tinyusb/examples/device/cdc_dual_ports/src/tusb_config.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               2 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c b/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c deleted file mode 100755 index b935b672..00000000 --- a/tinyusb/examples/device/cdc_dual_ports/src/usb_descriptors.c +++ /dev/null @@ -1,211 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]       MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -enum -{ -  ITF_NUM_CDC_0 = 0, -  ITF_NUM_CDC_0_DATA, -  ITF_NUM_CDC_1, -  ITF_NUM_CDC_1_DATA, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC * TUD_CDC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -  #define EPNUM_CDC_0_NOTIF   0x81 -  #define EPNUM_CDC_0_OUT     0x02 -  #define EPNUM_CDC_0_IN      0x82 - -  #define EPNUM_CDC_1_NOTIF   0x84 -  #define EPNUM_CDC_1_OUT     0x05 -  #define EPNUM_CDC_1_IN      0x85 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU ==  OPT_MCU_SAMX7X -  // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_CDC_0_NOTIF   0x81 -  #define EPNUM_CDC_0_OUT     0x02 -  #define EPNUM_CDC_0_IN      0x83 - -  #define EPNUM_CDC_1_NOTIF   0x84 -  #define EPNUM_CDC_1_OUT     0x05 -  #define EPNUM_CDC_1_IN      0x86 - -#else -  #define EPNUM_CDC_0_NOTIF   0x81 -  #define EPNUM_CDC_0_OUT     0x02 -  #define EPNUM_CDC_0_IN      0x82 - -  #define EPNUM_CDC_1_NOTIF   0x83 -  #define EPNUM_CDC_1_OUT     0x04 -  #define EPNUM_CDC_1_IN      0x84 -#endif - -uint8_t const desc_fs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 64), - -  // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 64), -}; - -#if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // 1st CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0, 4, EPNUM_CDC_0_NOTIF, 8, EPNUM_CDC_0_OUT, EPNUM_CDC_0_IN, 512), - -  // 2nd CDC: Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1, 4, EPNUM_CDC_1_NOTIF, 8, EPNUM_CDC_1_OUT, EPNUM_CDC_1_IN, 512), -}; -#endif - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations - -#if TUD_OPT_HIGH_SPEED -  // Although we are highspeed, host may be fullspeed. -  return (tud_speed_get() == TUSB_SPEED_HIGH) ?  desc_hs_configuration : desc_fs_configuration; -#else -  return desc_fs_configuration; -#endif -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB CDC",                 // 4: CDC Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/cdc_msc/.skip.MCU_SAMD11 b/tinyusb/examples/device/cdc_msc/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc/CMakeLists.txt b/tinyusb/examples/device/cdc_msc/CMakeLists.txt deleted file mode 100755 index fa6e83b7..00000000 --- a/tinyusb/examples/device/cdc_msc/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/cdc_msc/Makefile b/tinyusb/examples/device/cdc_msc/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/cdc_msc/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/cdc_msc/src/main.c b/tinyusb/examples/device/cdc_msc/src/main.c deleted file mode 100755 index 131ae654..00000000 --- a/tinyusb/examples/device/cdc_msc/src/main.c +++ /dev/null @@ -1,165 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.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; - -void led_blinking_task(void); -void cdc_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); - -    cdc_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 = BLINK_MOUNTED; -} - - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -void cdc_task(void) -{ -  // connected() check for DTR bit -  // Most but not all terminal client set this when making connection -  // if ( tud_cdc_connected() ) -  { -    // connected and there are data available -    if ( tud_cdc_available() ) -    { -      // read datas -      char buf[64]; -      uint32_t count = tud_cdc_read(buf, sizeof(buf)); -      (void) count; - -      // Echo back -      // Note: Skip echo by commenting out write() and write_flush() -      // for throughput test e.g -      //    $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 -      tud_cdc_write(buf, count); -      tud_cdc_write_flush(); -    } -  } -} - -// Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) -{ -  (void) itf; -  (void) rts; - -  // TODO set some indicator -  if ( dtr ) -  { -    // Terminal connected -  }else -  { -    // Terminal disconnected -  } -} - -// Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) -{ -  (void) itf; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/cdc_msc/src/msc_disk.c b/tinyusb/examples/device/cdc_msc/src/msc_disk.c deleted file mode 100755 index 503baace..00000000 --- a/tinyusb/examples/device/cdc_msc/src/msc_disk.c +++ /dev/null @@ -1,259 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -#if CFG_TUD_MSC - -// whether host does safe-eject -static bool ejected = false; - -// Some MCU doesn't have enough 8KB SRAM to store the whole disk -// We will use Flash as read-only disk with board that has -// CFG_EXAMPLE_MSC_READONLY defined - -#define README_CONTENTS \ -"This is tinyusb's MassStorage Class demo.\r\n\r\n\ -If you find any bugs or get any questions, feel free to file an\r\n\ -issue at github.com/hathach/tinyusb" - -enum -{ -  DISK_BLOCK_NUM  = 16, // 8KB is the smallest size that windows allow to mount -  DISK_BLOCK_SIZE = 512 -}; - -#ifdef CFG_EXAMPLE_MSC_READONLY -const -#endif -uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ -  //------------- Block0: Boot Sector -------------// -  // byte_per_sector    = DISK_BLOCK_SIZE; fat12_sector_num_16  = DISK_BLOCK_NUM; -  // sector_per_cluster = 1; reserved_sectors = 1; -  // fat_num            = 1; fat12_root_entry_num = 16; -  // sector_per_fat     = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; -  // drive_number       = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; -  // filesystem_type    = "FAT12   "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; -  // FAT magic code at offset 510-511 -  { -      0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, -      0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , -      'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - -      // Zero up to 2 last bytes of FAT magic code -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA -  }, - -  //------------- Block1: FAT12 Table -------------// -  { -      0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file -  }, - -  //------------- Block2: Root Directory -------------// -  { -      // first entry is volume label -      'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      // second entry is readme file -      'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, -      0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, -      sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) -  }, - -  //------------- Block3: Readme Content -------------// -  README_CONTENTS -}; - -// Invoked when received SCSI_CMD_INQUIRY -// Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) -{ -  (void) lun; - -  const char vid[] = "TinyUSB"; -  const char pid[] = "Mass Storage"; -  const char rev[] = "1.0"; - -  memcpy(vendor_id  , vid, strlen(vid)); -  memcpy(product_id , pid, strlen(pid)); -  memcpy(product_rev, rev, strlen(rev)); -} - -// Invoked when received Test Unit Ready command. -// return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) -{ -  (void) lun; - -  // RAM disk is ready until ejected -  if (ejected) { -    tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); -    return false; -  } - -  return true; -} - -// Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size -// Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) -{ -  (void) lun; - -  *block_count = DISK_BLOCK_NUM; -  *block_size  = DISK_BLOCK_SIZE; -} - -// Invoked when received Start Stop Unit command -// - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage -// - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) -{ -  (void) lun; -  (void) power_condition; - -  if ( load_eject ) -  { -    if (start) -    { -      // load disk storage -    }else -    { -      // unload disk storage -      ejected = true; -    } -  } - -  return true; -} - -// Callback invoked when received READ10 command. -// Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ -  (void) lun; - -  uint8_t const* addr = msc_disk[lba] + offset; -  memcpy(buffer, addr, bufsize); - -  return bufsize; -} - -// Callback invoked when received WRITE10 command. -// Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) -{ -  (void) lun; - -#ifndef CFG_EXAMPLE_MSC_READONLY -  uint8_t* addr = msc_disk[lba] + offset; -  memcpy(addr, buffer, bufsize); -#else -  (void) lba; (void) offset; (void) buffer; -#endif - -  return bufsize; -} - -// Callback invoked when received an SCSI command not in built-in list below -// - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE -// - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) -{ -  // read10 & write10 has their own callback and MUST not be handled here - -  void const* response = NULL; -  uint16_t resplen = 0; - -  // most scsi handled is input -  bool in_xfer = true; - -  switch (scsi_cmd[0]) -  { -    case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: -      // Host is about to read/write etc ... better not to disconnect disk -      resplen = 0; -    break; - -    default: -      // Set Sense = Invalid Command Operation -      tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - -      // negative means error -> tinyusb could stall and/or response with failed status -      resplen = -1; -    break; -  } - -  // return resplen must not larger than bufsize -  if ( resplen > bufsize ) resplen = bufsize; - -  if ( response && (resplen > 0) ) -  { -    if(in_xfer) -    { -      memcpy(buffer, response, resplen); -    }else -    { -      // SCSI output -    } -  } - -  return resplen; -} - -#endif diff --git a/tinyusb/examples/device/cdc_msc/src/tusb_config.h b/tinyusb/examples/device/cdc_msc/src/tusb_config.h deleted file mode 100755 index bf6af06b..00000000 --- a/tinyusb/examples/device/cdc_msc/src/tusb_config.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -// This example doesn't use an RTOS -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC              1 -#define CFG_TUD_MSC              1 -#define CFG_TUD_HID              0 -#define CFG_TUD_MIDI             0 -#define CFG_TUD_VENDOR           0 - -// CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE   512 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c b/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c deleted file mode 100755 index 1a89ce56..00000000 --- a/tinyusb/examples/device/cdc_msc/src/usb_descriptors.c +++ /dev/null @@ -1,224 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_CDC = 0, -  ITF_NUM_CDC_DATA, -  ITF_NUM_MSC, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x82 - -  #define EPNUM_MSC_OUT     0x05 -  #define EPNUM_MSC_IN      0x85 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG  || CFG_TUSB_MCU ==  OPT_MCU_SAMX7X -  // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x83 - -  #define EPNUM_MSC_OUT     0x04 -  #define EPNUM_MSC_IN      0x85 - -#elif CFG_TUSB_MCU == OPT_MCU_CXD56 -  // CXD56 doesn't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  // CXD56 USB driver has fixed endpoint type (bulk/interrupt/iso) and direction (IN/OUT) by its number -  // 0 control (IN/OUT), 1 Bulk (IN), 2 Bulk (OUT), 3 In (IN), 4 Bulk (IN), 5 Bulk (OUT), 6 In (IN) -  #define EPNUM_CDC_NOTIF   0x83 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x81 - -  #define EPNUM_MSC_OUT     0x05 -  #define EPNUM_MSC_IN      0x84 - -#else -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x82 - -  #define EPNUM_MSC_OUT     0x03 -  #define EPNUM_MSC_IN      0x83 - -#endif - -uint8_t const desc_fs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), -}; - -#if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), -}; -#endif - - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations - -#if TUD_OPT_HIGH_SPEED -  // Although we are highspeed, host may be fullspeed. -  return (tud_speed_get() == TUSB_SPEED_HIGH) ?  desc_hs_configuration : desc_fs_configuration; -#else -  return desc_fs_configuration; -#endif -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB CDC",                 // 4: CDC Interface -  "TinyUSB MSC",                 // 5: MSC Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_CXD56 b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_CXD56 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_CXD56 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_EFM32GG12 b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_EFM32GG12 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_EFM32GG12 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_GD32VF103 b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_GD32VF103 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_GD32VF103 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MKL25ZXX b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MKL25ZXX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MKL25ZXX +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MSP430x5xx b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MSP430x5xx deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_MSP430x5xx +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_RP2040 b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_RP2040 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_RP2040 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMD11 b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMX7X b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMX7X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_SAMX7X +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_VALENTYUSB_EPTRI b/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_VALENTYUSB_EPTRI deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/.skip.MCU_VALENTYUSB_EPTRI +++ /dev/null diff --git a/tinyusb/examples/device/cdc_msc_freertos/CMakeLists.txt b/tinyusb/examples/device/cdc_msc_freertos/CMakeLists.txt deleted file mode 100755 index 639dde99..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -# TOP is absolute path to root directory of TinyUSB git repo -# needed for esp32sx build. TOOD could be removed later on -set(TOP "../../..") -get_filename_component(TOP "${TOP}" REALPATH) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -# Check for -DFAMILY= -if(FAMILY MATCHES "^esp32s[2-3]") -else() -  message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}") -endif() diff --git a/tinyusb/examples/device/cdc_msc_freertos/Makefile b/tinyusb/examples/device/cdc_msc_freertos/Makefile deleted file mode 100755 index 86bacd2d..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -DEPS_SUBMODULES += lib/FreeRTOS-Kernel - -include ../../../tools/top.mk -include ../../make.mk - -FREERTOS_SRC = lib/FreeRTOS-Kernel - -INC += \ -	src \ -	$(TOP)/hw \ -	$(TOP)/$(FREERTOS_SRC)/include \ -	$(TOP)/$(FREERTOS_SRC)/portable/GCC/$(FREERTOS_PORT) -	 -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -# FreeRTOS source, all files in port folder -SRC_C += \ -	$(FREERTOS_SRC)/list.c \ -	$(FREERTOS_SRC)/queue.c \ -	$(FREERTOS_SRC)/tasks.c \ -	$(FREERTOS_SRC)/timers.c \ -	$(subst ../../../,,$(wildcard ../../../$(FREERTOS_SRC)/portable/GCC/$(FREERTOS_PORT)/*.c)) - -# FreeRTOS (lto + Os) linker issue -LDFLAGS += -Wl,--undefined=vTaskSwitchContext - -include ../../rules.mk diff --git a/tinyusb/examples/device/cdc_msc_freertos/sdkconfig.defaults b/tinyusb/examples/device/cdc_msc_freertos/sdkconfig.defaults deleted file mode 100755 index 83871619..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/sdkconfig.defaults +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_CMAKE=y -CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/CMakeLists.txt b/tinyusb/examples/device/cdc_msc_freertos/src/CMakeLists.txt deleted file mode 100755 index 6b188fd3..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -idf_component_register(SRCS "main.c" "usb_descriptors.c" "msc_disk.c" -                    INCLUDE_DIRS "." -                    REQUIRES freertos soc) - -file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) - -if(EXISTS ${board_cmake}) -    include(${board_cmake}) -endif() - -idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) -target_include_directories(${COMPONENT_TARGET} PUBLIC -  "${FREERTOS_ORIG_INCLUDE_PATH}" -  "${TOP}/hw" -  "${TOP}/src" -) - -target_sources(${COMPONENT_TARGET} PUBLIC -  "${TOP}/src/tusb.c" -  "${TOP}/src/common/tusb_fifo.c" -  "${TOP}/src/device/usbd.c" -  "${TOP}/src/device/usbd_control.c" -  "${TOP}/src/class/cdc/cdc_device.c" -  "${TOP}/src/class/dfu/dfu_rt_device.c" -  "${TOP}/src/class/hid/hid_device.c" -  "${TOP}/src/class/midi/midi_device.c" -  "${TOP}/src/class/msc/msc_device.c" -  "${TOP}/src/class/net/net_device.c" -  "${TOP}/src/class/usbtmc/usbtmc_device.c" -  "${TOP}/src/class/vendor/vendor_device.c" -  "${TOP}/src/portable/espressif/esp32sx/dcd_esp32sx.c" -) diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig.h b/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig.h deleted file mode 100755 index 568b27a1..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/FreeRTOSConfig.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * FreeRTOS Kernel V10.0.0 - * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved. - * - * 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. If you wish to use our Amazon - * FreeRTOS name, please do so in a fair use way that does not cause confusion. - * - * 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. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef FREERTOS_CONFIG_H -#define FREERTOS_CONFIG_H - -/*----------------------------------------------------------- - * Application specific definitions. - * - * These definitions should be adjusted for your particular hardware and - * application requirements. - * - * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE - * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. - * - * See http://www.freertos.org/a00110.html. - *----------------------------------------------------------*/ - -// Include MCU header -#include "bsp/board_mcu.h" - -extern uint32_t SystemCoreClock; - -/* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU								        0 -#define configENABLE_FPU								        1 -#define configENABLE_TRUSTZONE					        0 -#define configMINIMAL_SECURE_STACK_SIZE					( 1024 ) - -#define configUSE_PREEMPTION                    1 -#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ                      SystemCoreClock -#define configTICK_RATE_HZ                      ( 1000 ) -#define configMAX_PRIORITIES                    ( 5 ) -#define configMINIMAL_STACK_SIZE                ( 128 ) -#define configTOTAL_HEAP_SIZE                   ( 0*1024 ) // dynamic is not used -#define configMAX_TASK_NAME_LEN                 16 -#define configUSE_16_BIT_TICKS                  0 -#define configIDLE_SHOULD_YIELD                 1 -#define configUSE_MUTEXES                       1 -#define configUSE_RECURSIVE_MUTEXES             1 -#define configUSE_COUNTING_SEMAPHORES           1 -#define configQUEUE_REGISTRY_SIZE               2 -#define configUSE_QUEUE_SETS                    0 -#define configUSE_TIME_SLICING                  0 -#define configUSE_NEWLIB_REENTRANT              0 -#define configENABLE_BACKWARD_COMPATIBILITY     1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP   0 - -#define configSUPPORT_STATIC_ALLOCATION         1 -#define configSUPPORT_DYNAMIC_ALLOCATION        0 - -/* Hook function related definitions. */ -#define configUSE_IDLE_HOOK                    0 -#define configUSE_TICK_HOOK                    0 -#define configUSE_MALLOC_FAILED_HOOK           0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW         2 - -/* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS          0 -#define configUSE_TRACE_FACILITY               1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS   0 - -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES                  0 -#define configMAX_CO_ROUTINE_PRIORITIES        2 - -/* Software timer related definitions. */ -#define configUSE_TIMERS                       1 -#define configTIMER_TASK_PRIORITY              (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH               32 -#define configTIMER_TASK_STACK_DEPTH           configMINIMAL_STACK_SIZE - -/* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet               0 -#define INCLUDE_uxTaskPriorityGet              0 -#define INCLUDE_vTaskDelete                    0 -#define INCLUDE_vTaskSuspend                   1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR                 0 -#define INCLUDE_vTaskDelayUntil                1 -#define INCLUDE_vTaskDelay                     1 -#define INCLUDE_xTaskGetSchedulerState         0 -#define INCLUDE_xTaskGetCurrentTaskHandle      0 -#define INCLUDE_uxTaskGetStackHighWaterMark    0 -#define INCLUDE_xTaskGetIdleTaskHandle         0 -#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName              0 -#define INCLUDE_eTaskGetState                  0 -#define INCLUDE_xEventGroupSetBitFromISR       0 -#define INCLUDE_xTimerPendFunctionCall         0 - -/* Define to trap errors during development. */ -// Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7 -#if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) -  #define configASSERT(_exp) \ -    do {\ -      if ( !(_exp) ) { \ -        volatile uint32_t* ARM_CM_DHCSR =  ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ -        if ( (*ARM_CM_DHCSR) & 1UL ) {  /* Only halt mcu if debugger is attached */ \ -          taskDISABLE_INTERRUPTS(); \ -           __asm("BKPT #0\n"); \ -        }\ -      }\ -    } while(0) -#else -  #define configASSERT( x ) -#endif - -#ifdef __RX__ -/* Renesas RX series */ -#define vSoftwareInterruptISR					INT_Excep_ICU_SWINT -#define vTickISR								INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ				(configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY			1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY	4 - -#else - -/* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler    PendSV_Handler -#define xPortSysTickHandler   SysTick_Handler -#define vPortSVCHandler       SVC_Handler - -//--------------------------------------------------------------------+ -// Interrupt nesting behavior configuration. -//--------------------------------------------------------------------+ -#if defined(__NVIC_PRIO_BITS) -  // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -	#define configPRIO_BITS       __NVIC_PRIO_BITS -#elif defined(__ECLIC_INTCTLBITS) -  // RISC-V Bumblebee core from nuclei -  #define configPRIO_BITS       __ECLIC_INTCTLBITS -#else -  #error "FreeRTOS configPRIO_BITS to be defined" -#endif - -/* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			  ((1<<configPRIO_BITS) - 1) - -/* The highest interrupt priority that can be used by any interrupt service -routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL -INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER -PRIORITY THAN THIS! (higher priorities are lower numeric values. */ -#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	2 - -/* Interrupt priorities used by the kernel port layer itself.  These are generic -to all Cortex-M ports, and do not rely on any particular library functions. */ -#define configKERNEL_INTERRUPT_PRIORITY 		          ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! -See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	        ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -#endif - -#endif /* __FREERTOS_CONFIG__H */ diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/freertos_hook.c b/tinyusb/examples/device/cdc_msc_freertos/src/freertos_hook.c deleted file mode 100755 index ab885947..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/freertos_hook.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -//--------------------------------------------------------------------+ -// INCLUDE -//--------------------------------------------------------------------+ -#include "FreeRTOS.h" -#include "task.h" -#include "common/tusb_common.h" - - -void vApplicationMallocFailedHook(void) -{ -  taskDISABLE_INTERRUPTS(); -  TU_ASSERT(false, ); -} - -void vApplicationStackOverflowHook(xTaskHandle pxTask, char *pcTaskName) -{ -  (void) pxTask; -  (void) pcTaskName; - -  taskDISABLE_INTERRUPTS(); -  TU_ASSERT(false, ); -} - -/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an - * implementation of vApplicationGetIdleTaskMemory() to provide the memory that is - * used by the Idle task. */ -void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) -{ -  /* If the buffers to be provided to the Idle task are declared inside this -   * function then they must be declared static - otherwise they will be allocated on -   * the stack and so not exists after this function exits. */ -  static StaticTask_t xIdleTaskTCB; -  static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ]; - -  /* Pass out a pointer to the StaticTask_t structure in which the Idle task's -    state will be stored. */ -  *ppxIdleTaskTCBBuffer = &xIdleTaskTCB; - -  /* Pass out the array that will be used as the Idle task's stack. */ -  *ppxIdleTaskStackBuffer = uxIdleTaskStack; - -  /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer. -    Note that, as the array is necessarily of type StackType_t, -    configMINIMAL_STACK_SIZE is specified in words, not bytes. */ -  *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; -} - -/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the - * application must provide an implementation of vApplicationGetTimerTaskMemory() - * to provide the memory that is used by the Timer service task. */ -void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ) -{ -  /* If the buffers to be provided to the Timer task are declared inside this -   * function then they must be declared static - otherwise they will be allocated on -   * the stack and so not exists after this function exits. */ -  static StaticTask_t xTimerTaskTCB; -  static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ]; - -  /* Pass out a pointer to the StaticTask_t structure in which the Timer -    task's state will be stored. */ -  *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; - -  /* Pass out the array that will be used as the Timer task's stack. */ -  *ppxTimerTaskStackBuffer = uxTimerTaskStack; - -  /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer. -    Note that, as the array is necessarily of type StackType_t, -    configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */ -  *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; -} - -#if CFG_TUSB_MCU == OPT_MCU_RX63X | CFG_TUSB_MCU == OPT_MCU_RX65X -#include "iodefine.h" -void vApplicationSetupTimerInterrupt(void) -{ -  /* Enable CMT0 */ -  SYSTEM.PRCR.WORD = (0xA5u<<8) | TU_BIT(1); -  MSTP(CMT0)       = 0; -  SYSTEM.PRCR.WORD = (0xA5u<<8); - -  CMT0.CMCNT      = 0; -  CMT0.CMCOR      = (unsigned short)(((configPERIPHERAL_CLOCK_HZ/configTICK_RATE_HZ)-1)/128); -  CMT0.CMCR.WORD  = TU_BIT(6) | 2; -  IR(CMT0, CMI0)  = 0; -  IPR(CMT0, CMI0) = configKERNEL_INTERRUPT_PRIORITY; -  IEN(CMT0, CMI0) = 1; -  CMT.CMSTR0.BIT.STR0 = 1; -} -#endif diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/main.c b/tinyusb/examples/device/cdc_msc_freertos/src/main.c deleted file mode 100755 index c27b7fed..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/main.c +++ /dev/null @@ -1,230 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "queue.h" -#include "semphr.h" - -#include "bsp/board.h" -#include "tusb.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 timer -StaticTimer_t blinky_tmdef; -TimerHandle_t blinky_tm; - -// static task for usbd -// Increase stack size when debug log is enabled -#if CFG_TUSB_DEBUG -  #define USBD_STACK_SIZE     (3*configMINIMAL_STACK_SIZE) -#else -  #define USBD_STACK_SIZE     (3*configMINIMAL_STACK_SIZE/2) -#endif - -StackType_t  usb_device_stack[USBD_STACK_SIZE]; -StaticTask_t usb_device_taskdef; - -// static task for cdc -#define CDC_STACK_SZIE      configMINIMAL_STACK_SIZE -StackType_t  cdc_stack[CDC_STACK_SZIE]; -StaticTask_t cdc_taskdef; - - -void led_blinky_cb(TimerHandle_t xTimer); -void usb_device_task(void* param); -void cdc_task(void* params); - -//--------------------------------------------------------------------+ -// Main -//--------------------------------------------------------------------+ - -int main(void) -{ -  board_init(); - -  // soft timer for blinky -  blinky_tm = xTimerCreateStatic(NULL, pdMS_TO_TICKS(BLINK_NOT_MOUNTED), true, NULL, led_blinky_cb, &blinky_tmdef); -  xTimerStart(blinky_tm, 0); - -  // Create a task for tinyusb device stack -  (void) xTaskCreateStatic( usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); - -  // Create CDC task -  (void) xTaskCreateStatic( cdc_task, "cdc", CDC_STACK_SZIE, NULL, configMAX_PRIORITIES-2, cdc_stack, &cdc_taskdef); - -  // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 -#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 && CFG_TUSB_MCU != OPT_MCU_ESP32S3 -  vTaskStartScheduler(); -#endif - -  return 0; -} - -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -void app_main(void) -{ -  main(); -} -#endif - -// USB Device Driver task -// This top level thread process all usb events and invoke callbacks -void usb_device_task(void* param) -{ -  (void) param; - -  // This should be called after scheduler/kernel is started. -  // Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API. -  tusb_init(); - -  // RTOS forever loop -  while (1) -  { -    // tinyusb device task -    tud_task(); -  } -} - -//--------------------------------------------------------------------+ -// Device callbacks -//--------------------------------------------------------------------+ - -// Invoked when device is mounted -void tud_mount_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_MOUNTED), 0); -} - -// Invoked when device is unmounted -void tud_umount_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_NOT_MOUNTED), 0); -} - -// 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; -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_SUSPENDED), 0); -} - -// Invoked when usb bus is resumed -void tud_resume_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_MOUNTED), 0); -} - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -void cdc_task(void* params) -{ -  (void) params; - -  // RTOS forever loop -  while ( 1 ) -  { -    // connected() check for DTR bit -    // Most but not all terminal client set this when making connection -    // if ( tud_cdc_connected() ) -    { -      // There are data available -      if ( tud_cdc_available() ) -      { -        uint8_t buf[64]; - -        // read and echo back -        uint32_t count = tud_cdc_read(buf, sizeof(buf)); -        (void) count; - -        // Echo back -        // Note: Skip echo by commenting out write() and write_flush() -        // for throughput test e.g -        //    $ dd if=/dev/zero of=/dev/ttyACM0 count=10000 -        tud_cdc_write(buf, count); -        tud_cdc_write_flush(); -      } -    } - -    // For ESP32-S2 this delay is essential to allow idle how to run and reset wdt -    vTaskDelay(pdMS_TO_TICKS(10)); -  } -} - -// Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) -{ -  (void) itf; -  (void) rts; - -  // TODO set some indicator -  if ( dtr ) -  { -    // Terminal connected -  }else -  { -    // Terminal disconnected -  } -} - -// Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) -{ -  (void) itf; -} - -//--------------------------------------------------------------------+ -// BLINKING TASK -//--------------------------------------------------------------------+ -void led_blinky_cb(TimerHandle_t xTimer) -{ -  (void) xTimer; -  static bool led_state = false; - -  board_led_write(led_state); -  led_state = 1 - led_state; // toggle -} diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/msc_disk.c b/tinyusb/examples/device/cdc_msc_freertos/src/msc_disk.c deleted file mode 100755 index 5aa7befc..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/msc_disk.c +++ /dev/null @@ -1,249 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -#if CFG_TUD_MSC - -// Some MCU doesn't have enough 8KB SRAM to store the whole disk -// We will use Flash as read-only disk with board that has -// CFG_EXAMPLE_MSC_READONLY defined - -#define README_CONTENTS \ -"This is tinyusb's MassStorage Class demo.\r\n\r\n\ -If you find any bugs or get any questions, feel free to file an\r\n\ -issue at github.com/hathach/tinyusb" - -enum -{ -  DISK_BLOCK_NUM  = 16, // 8KB is the smallest size that windows allow to mount -  DISK_BLOCK_SIZE = 512 -}; - -#ifdef CFG_EXAMPLE_MSC_READONLY -const -#endif -uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ -  //------------- Block0: Boot Sector -------------// -  // byte_per_sector    = DISK_BLOCK_SIZE; fat12_sector_num_16  = DISK_BLOCK_NUM; -  // sector_per_cluster = 1; reserved_sectors = 1; -  // fat_num            = 1; fat12_root_entry_num = 16; -  // sector_per_fat     = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; -  // drive_number       = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; -  // filesystem_type    = "FAT12   "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; -  // FAT magic code at offset 510-511 -  { -      0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, -      0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , -      'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - -      // Zero up to 2 last bytes of FAT magic code -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA -  }, - -  //------------- Block1: FAT12 Table -------------// -  { -      0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file -  }, - -  //------------- Block2: Root Directory -------------// -  { -      // first entry is volume label -      'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      // second entry is readme file -      'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, -      0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, -      sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) -  }, - -  //------------- Block3: Readme Content -------------// -  README_CONTENTS -}; - -// Invoked when received SCSI_CMD_INQUIRY -// Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) -{ -  (void) lun; - -  const char vid[] = "TinyUSB"; -  const char pid[] = "Mass Storage"; -  const char rev[] = "1.0"; - -  memcpy(vendor_id  , vid, strlen(vid)); -  memcpy(product_id , pid, strlen(pid)); -  memcpy(product_rev, rev, strlen(rev)); -} - -// Invoked when received Test Unit Ready command. -// return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) -{ -  (void) lun; - -  return true; // RAM disk is always ready -} - -// Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size -// Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) -{ -  (void) lun; - -  *block_count = DISK_BLOCK_NUM; -  *block_size  = DISK_BLOCK_SIZE; -} - -// Invoked when received Start Stop Unit command -// - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage -// - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) -{ -  (void) lun; -  (void) power_condition; - -  if ( load_eject ) -  { -    if (start) -    { -      // load disk storage -    }else -    { -      // unload disk storage -    } -  } - -  return true; -} - -// Callback invoked when received READ10 command. -// Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ -  (void) lun; - -  uint8_t const* addr = msc_disk[lba] + offset; -  memcpy(buffer, addr, bufsize); - -  return bufsize; -} - -// Callback invoked when received WRITE10 command. -// Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) -{ -  (void) lun; - -#ifndef CFG_EXAMPLE_MSC_READONLY -  uint8_t* addr = msc_disk[lba] + offset; -  memcpy(addr, buffer, bufsize); -#else -  (void) lba; (void) offset; (void) buffer; -#endif - -  return bufsize; -} - -// Callback invoked when received an SCSI command not in built-in list below -// - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE -// - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) -{ -  // read10 & write10 has their own callback and MUST not be handled here - -  void const* response = NULL; -  uint16_t resplen = 0; - -  // most scsi handled is input -  bool in_xfer = true; - -  switch (scsi_cmd[0]) -  { -    case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: -      // Host is about to read/write etc ... better not to disconnect disk -      resplen = 0; -    break; - -    default: -      // Set Sense = Invalid Command Operation -      tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - -      // negative means error -> tinyusb could stall and/or response with failed status -      resplen = -1; -    break; -  } - -  // return resplen must not larger than bufsize -  if ( resplen > bufsize ) resplen = bufsize; - -  if ( response && (resplen > 0) ) -  { -    if(in_xfer) -    { -      memcpy(buffer, response, resplen); -    }else -    { -      // SCSI output -    } -  } - -  return resplen; -} - -#endif diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h b/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h deleted file mode 100755 index ff543834..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/tusb_config.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -// This examples use FreeRTOS -#define CFG_TUSB_OS               OPT_OS_FREERTOS - -// can be defined by compiler in DEBUG build -#ifndef CFG_TUSB_DEBUG -  #define CFG_TUSB_DEBUG           0 -#endif - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC              1 -#define CFG_TUD_MSC              1 -#define CFG_TUD_HID              0 -#define CFG_TUD_MIDI             0 -#define CFG_TUD_VENDOR           0 - -// CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// CDC Endpoint transfer buffer size, more is faster -#define CFG_TUD_CDC_EP_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE   512 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c b/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c deleted file mode 100755 index 75b5ce7b..00000000 --- a/tinyusb/examples/device/cdc_msc_freertos/src/usb_descriptors.c +++ /dev/null @@ -1,211 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_CDC = 0, -  ITF_NUM_CDC_DATA, -  ITF_NUM_MSC, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x82 - -  #define EPNUM_MSC_OUT     0x05 -  #define EPNUM_MSC_IN      0x85 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG -  // SAMG doesn't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x83 - -  #define EPNUM_MSC_OUT     0x04 -  #define EPNUM_MSC_IN      0x85 - -#else -  #define EPNUM_CDC_NOTIF   0x81 -  #define EPNUM_CDC_OUT     0x02 -  #define EPNUM_CDC_IN      0x82 - -  #define EPNUM_MSC_OUT     0x03 -  #define EPNUM_MSC_IN      0x83 - -#endif - -uint8_t const desc_fs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), -}; - -#if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 512), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), -}; -#endif - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations - -#if TUD_OPT_HIGH_SPEED -  // Although we are highspeed, host may be fullspeed. -  return (tud_speed_get() == TUSB_SPEED_HIGH) ?  desc_hs_configuration : desc_fs_configuration; -#else -  return desc_fs_configuration; -#endif -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB CDC",                 // 4: CDC Interface -  "TinyUSB MSC",                 // 5: MSC Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/dfu/CMakeLists.txt b/tinyusb/examples/device/dfu/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/dfu/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/dfu/Makefile b/tinyusb/examples/device/dfu/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/dfu/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/dfu/src/main.c b/tinyusb/examples/device/dfu/src/main.c deleted file mode 100755 index 5c846452..00000000 --- a/tinyusb/examples/device/dfu/src/main.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - - /* -  * After device is enumerated in dfu mode run the following commands -  * -  * To transfer firmware from host to device (best to test with text file) -  * -  * $ dfu-util -d cafe -a 0 -D [filename] -  * $ dfu-util -d cafe -a 1 -D [filename] -  * -  * To transfer firmware from device to host: -  * -  * $ dfu-util -d cafe -a 0 -U [filename] -  * $ dfu-util -d cafe -a 1 -U [filename] -  * -  */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ -const char* upload_image[2]= -{ -  "Hello world from TinyUSB DFU! - Partition 0", -  "Hello world from TinyUSB DFU! - Partition 1" -}; - -/* 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; - -void led_blinking_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// DFU callbacks -// Note: alt is used as the partition number, in order to support multiple partitions like FLASH, EEPROM, etc. -//--------------------------------------------------------------------+ - -// Invoked right before tud_dfu_download_cb() (state=DFU_DNBUSY) or tud_dfu_manifest_cb() (state=DFU_MANIFEST) -// Application return timeout in milliseconds (bwPollTimeout) for the next download/manifest operation. -// During this period, USB host won't try to communicate with us. -uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state) -{ -  if ( state == DFU_DNBUSY ) -  { -    // For this example -    // - Atl0 Flash is fast : 1   ms -    // - Alt1 EEPROM is slow: 100 ms -    return (alt == 0) ? 1 : 100; -  } -  else if (state == DFU_MANIFEST) -  { -    // since we don't buffer entire image and do any flashing in manifest stage -    return 0; -  } - -  return 0; -} - -// Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests -// This callback could be returned before flashing op is complete (async). -// Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const* data, uint16_t length) -{ -  (void) alt; -  (void) block_num; - -  //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length); - -  for(uint16_t i=0; i<length; i++) -  { -    printf("%c", data[i]); -  } - -  // flashing op for download complete without error -  tud_dfu_finish_flashing(DFU_STATUS_OK); -} - -// Invoked when download process is complete, received DFU_DNLOAD (wLength=0) following by DFU_GETSTATUS (state=Manifest) -// Application can do checksum, or actual flashing if buffered entire image previously. -// Once finished flashing, application must call tud_dfu_finish_flashing() -void tud_dfu_manifest_cb(uint8_t alt) -{ -  (void) alt; -  printf("Download completed, enter manifestation\r\n"); - -  // flashing op for manifest is complete without error -  // Application can perform checksum, should it fail, use appropriate status such as errVERIFY. -  tud_dfu_finish_flashing(DFU_STATUS_OK); -} - -// Invoked when received DFU_UPLOAD request -// Application must populate data with up to length bytes and -// Return the number of written bytes -uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t* data, uint16_t length) -{ -  (void) block_num; -  (void) length; - -  uint16_t const xfer_len = (uint16_t) strlen(upload_image[alt]); -  memcpy(data, upload_image[alt], xfer_len); - -  return xfer_len; -} - -// Invoked when the Host has terminated a download or upload transfer -void tud_dfu_abort_cb(uint8_t alt) -{ -  (void) alt; -  printf("Host aborted transfer\r\n"); -} - -// Invoked when a DFU_DETACH request is received -void tud_dfu_detach_cb(void) -{ -  printf("Host detach, we should probably reboot\r\n"); -} - -//--------------------------------------------------------------------+ -// BLINKING TASK + Indicator pulse -//--------------------------------------------------------------------+ - -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 -} diff --git a/tinyusb/examples/device/dfu/src/tusb_config.h b/tinyusb/examples/device/dfu/src/tusb_config.h deleted file mode 100755 index 66e35702..00000000 --- a/tinyusb/examples/device/dfu/src/tusb_config.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * tusb_config.h - * - *  Created on: May 5, 2021 - *      Author: Jeremiah McCarthy - */ - -#ifndef TUSB_CONFIG_H_ -#define TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_DFU    1 - -// DFU buffer size, it has to be set to the buffer size used in TUD_DFU_DESCRIPTOR -#define CFG_TUD_DFU_XFER_BUFSIZE    512 - -#ifdef __cplusplus - } -#endif - -#endif /* TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/dfu/src/usb_descriptors.c b/tinyusb/examples/device/dfu/src/usb_descriptors.c deleted file mode 100755 index 1cfe29c5..00000000 --- a/tinyusb/examples/device/dfu/src/usb_descriptors.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "class/dfu/dfu_device.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -  #if CFG_TUD_CDC -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -  #else -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -  #endif - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -// Number of Alternate Interface (each for 1 flash partition) -#define ALT_COUNT   2 - -enum -{ -  ITF_NUM_DFU_MODE, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_DFU_DESC_LEN(ALT_COUNT)) - -#define FUNC_ATTRS (DFU_ATTR_CAN_UPLOAD | DFU_ATTR_CAN_DOWNLOAD | DFU_ATTR_MANIFESTATION_TOLERANT) - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, Alternate count, starting string index, attributes, detach timeout, transfer size -  TUD_DFU_DESCRIPTOR(ITF_NUM_DFU_MODE, ALT_COUNT, 4, FUNC_ATTRS, 1000, CFG_TUD_DFU_XFER_BUFSIZE), -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "FLASH",                       // 4: DFU Partition 1 -  "EEPROM",                      // 5: DFU Partition 2 -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  size_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  } -  else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) { -      chr_count = 31; -    } - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (uint16_t)((((uint16_t)TUSB_DESC_STRING) << 8 ) | (2u*chr_count + 2u)); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/dfu_runtime/CMakeLists.txt b/tinyusb/examples/device/dfu_runtime/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/dfu_runtime/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/dfu_runtime/Makefile b/tinyusb/examples/device/dfu_runtime/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/dfu_runtime/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/dfu_runtime/src/main.c b/tinyusb/examples/device/dfu_runtime/src/main.c deleted file mode 100755 index 823c71ae..00000000 --- a/tinyusb/examples/device/dfu_runtime/src/main.c +++ /dev/null @@ -1,135 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -/* After device is enumerated, run following command - * - * $ dfu-util -l - * - * It should be able to list our device as in Runtime mode. Then run - * - * $ dfu-util -e - * - * This will send DETTACH command to put device into bootloader. Since this example - * is minimal, it doesn't actually go into DFU mode but rather change the LED blinking - * pattern to fast rate as indicator. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -/* Blink pattern - * - 1000 ms : device should reboot - * - 250 ms  : device not mounted - * - 0 ms : device mounted - * - 2500 ms : device is suspended - */ -enum  { -  BLINK_DFU_MODE = 100, -  BLINK_NOT_MOUNTED = 250, -  BLINK_MOUNTED = 1000, -  BLINK_SUSPENDED = 2500, -}; - -static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; - -void led_blinking_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_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 = BLINK_MOUNTED; -} - -// Invoked on DFU_DETACH request to reboot to the bootloader -void tud_dfu_runtime_reboot_to_dfu_cb(void) -{ -  blink_interval_ms = BLINK_DFU_MODE; -} - -//--------------------------------------------------------------------+ -// BLINKING TASK + Indicator pulse -//--------------------------------------------------------------------+ - -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 -} diff --git a/tinyusb/examples/device/dfu_runtime/src/tusb_config.h b/tinyusb/examples/device/dfu_runtime/src/tusb_config.h deleted file mode 100755 index bdae1d2e..00000000 --- a/tinyusb/examples/device/dfu_runtime/src/tusb_config.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * tusb_config.h - * - *  Created on: Oct 28, 2019 - *      Author: Sylvain Munaut - */ - -#ifndef TUSB_CONFIG_H_ -#define TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// - -#define CFG_TUD_DFU_RUNTIME 1 - -#ifdef __cplusplus - } -#endif - -#endif /* TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c b/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c deleted file mode 100755 index 8b2bd265..00000000 --- a/tinyusb/examples/device/dfu_runtime/src/usb_descriptors.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "class/dfu/dfu_rt_device.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -  #if CFG_TUD_CDC -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -  #else -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -  #endif - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_DFU_RT, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_DFU_RT_DESC_LEN) - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, attributes, detach timeout, transfer size */ -  TUD_DFU_RT_DESCRIPTOR(ITF_NUM_DFU_RT, 4, 0x0d, 1000, 4096), -}; - - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB DFU runtime",         // 4: DFU runtime -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  size_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  } -  else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) { -      chr_count = 31; -    } - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (uint16_t)((((uint16_t)TUSB_DESC_STRING) << 8 ) | (2u*chr_count + 2u)); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/dynamic_configuration/.skip.MCU_SAMD11 b/tinyusb/examples/device/dynamic_configuration/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/dynamic_configuration/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/dynamic_configuration/CMakeLists.txt b/tinyusb/examples/device/dynamic_configuration/CMakeLists.txt deleted file mode 100755 index fa6e83b7..00000000 --- a/tinyusb/examples/device/dynamic_configuration/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/dynamic_configuration/Makefile b/tinyusb/examples/device/dynamic_configuration/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/dynamic_configuration/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/dynamic_configuration/src/main.c b/tinyusb/examples/device/dynamic_configuration/src/main.c deleted file mode 100755 index 4c10f55b..00000000 --- a/tinyusb/examples/device/dynamic_configuration/src/main.c +++ /dev/null @@ -1,217 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.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; - -void led_blinking_task(void); -void cdc_task(void); -void midi_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); -    cdc_task(); -    midi_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 = BLINK_MOUNTED; -} - - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -void cdc_task(void) -{ -  if ( tud_cdc_connected() ) -  { -    // connected and there are data available -    if ( tud_cdc_available() ) -    { -      uint8_t buf[64]; - -      // read and echo back -      uint32_t count = tud_cdc_read(buf, sizeof(buf)); - -      for(uint32_t i=0; i<count; i++) -      { -        tud_cdc_write_char(buf[i]); - -        if ( buf[i] == '\r' ) tud_cdc_write_char('\n'); -      } - -      tud_cdc_write_flush(); -    } -  } -} - -// Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) -{ -  (void) itf; - -  // connected -  if ( dtr && rts ) -  { -    // print initial message when connected -    tud_cdc_write_str("\r\nTinyUSB CDC MSC device example\r\n"); -  } -} - -// Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) -{ -  (void) itf; -} - -//--------------------------------------------------------------------+ -// MIDI Task -//--------------------------------------------------------------------+ - -// Variable that holds the current position in the sequence. -uint32_t note_pos = 0; - -// Store example melody as an array of note values -static const uint8_t note_sequence[] = -{ -  74,78,81,86,90,93,98,102,57,61,66,69,73,78,81,85,88,92,97,100,97,92,88,85,81,78, -  74,69,66,62,57,62,66,69,74,78,81,86,90,93,97,102,97,93,90,85,81,78,73,68,64,61, -  56,61,64,68,74,78,81,86,90,93,98,102 -}; - -void midi_task(void) -{ -  static uint32_t start_ms = 0; - -  uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint -  uint8_t const channel   = 0; // 0 for channel 1 - -  // The MIDI interface always creates input and output port/jack descriptors -  // regardless of these being used or not. Therefore incoming traffic should be read -  // (possibly just discarded) to avoid the sender blocking in IO -  uint8_t packet[4]; -  while( tud_midi_available() ) tud_midi_packet_read(packet); - -  // send note every 1000 ms -  if (board_millis() - start_ms < 286) return; // not enough time -  start_ms += 286; - -  // Previous positions in the note sequence. -  int previous = note_pos - 1; - -  // If we currently are at position 0, set the -  // previous position to the last note in the sequence. -  if (previous < 0) previous = sizeof(note_sequence) - 1; - -  // Send Note On for current position at full velocity (127) on channel 1. -  uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; -  tud_midi_stream_write(cable_num, note_on, 3); - -  // Send Note Off for previous note. -  uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0}; -  tud_midi_stream_write(cable_num, note_off, 3); - -  // Increment position -  note_pos++; - -  // If we are at the end of the sequence, start over. -  if (note_pos >= sizeof(note_sequence)) note_pos = 0; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c b/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c deleted file mode 100755 index 5aa7befc..00000000 --- a/tinyusb/examples/device/dynamic_configuration/src/msc_disk.c +++ /dev/null @@ -1,249 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -#if CFG_TUD_MSC - -// Some MCU doesn't have enough 8KB SRAM to store the whole disk -// We will use Flash as read-only disk with board that has -// CFG_EXAMPLE_MSC_READONLY defined - -#define README_CONTENTS \ -"This is tinyusb's MassStorage Class demo.\r\n\r\n\ -If you find any bugs or get any questions, feel free to file an\r\n\ -issue at github.com/hathach/tinyusb" - -enum -{ -  DISK_BLOCK_NUM  = 16, // 8KB is the smallest size that windows allow to mount -  DISK_BLOCK_SIZE = 512 -}; - -#ifdef CFG_EXAMPLE_MSC_READONLY -const -#endif -uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ -  //------------- Block0: Boot Sector -------------// -  // byte_per_sector    = DISK_BLOCK_SIZE; fat12_sector_num_16  = DISK_BLOCK_NUM; -  // sector_per_cluster = 1; reserved_sectors = 1; -  // fat_num            = 1; fat12_root_entry_num = 16; -  // sector_per_fat     = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; -  // drive_number       = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; -  // filesystem_type    = "FAT12   "; volume_serial_number = 0x1234; volume_label = "TinyUSB MSC"; -  // FAT magic code at offset 510-511 -  { -      0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, -      0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , -      'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - -      // Zero up to 2 last bytes of FAT magic code -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA -  }, - -  //------------- Block1: FAT12 Table -------------// -  { -      0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file -  }, - -  //------------- Block2: Root Directory -------------// -  { -      // first entry is volume label -      'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      // second entry is readme file -      'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, -      0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, -      sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) -  }, - -  //------------- Block3: Readme Content -------------// -  README_CONTENTS -}; - -// Invoked when received SCSI_CMD_INQUIRY -// Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) -{ -  (void) lun; - -  const char vid[] = "TinyUSB"; -  const char pid[] = "Mass Storage"; -  const char rev[] = "1.0"; - -  memcpy(vendor_id  , vid, strlen(vid)); -  memcpy(product_id , pid, strlen(pid)); -  memcpy(product_rev, rev, strlen(rev)); -} - -// Invoked when received Test Unit Ready command. -// return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) -{ -  (void) lun; - -  return true; // RAM disk is always ready -} - -// Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size -// Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) -{ -  (void) lun; - -  *block_count = DISK_BLOCK_NUM; -  *block_size  = DISK_BLOCK_SIZE; -} - -// Invoked when received Start Stop Unit command -// - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage -// - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) -{ -  (void) lun; -  (void) power_condition; - -  if ( load_eject ) -  { -    if (start) -    { -      // load disk storage -    }else -    { -      // unload disk storage -    } -  } - -  return true; -} - -// Callback invoked when received READ10 command. -// Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ -  (void) lun; - -  uint8_t const* addr = msc_disk[lba] + offset; -  memcpy(buffer, addr, bufsize); - -  return bufsize; -} - -// Callback invoked when received WRITE10 command. -// Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) -{ -  (void) lun; - -#ifndef CFG_EXAMPLE_MSC_READONLY -  uint8_t* addr = msc_disk[lba] + offset; -  memcpy(addr, buffer, bufsize); -#else -  (void) lba; (void) offset; (void) buffer; -#endif - -  return bufsize; -} - -// Callback invoked when received an SCSI command not in built-in list below -// - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE -// - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) -{ -  // read10 & write10 has their own callback and MUST not be handled here - -  void const* response = NULL; -  uint16_t resplen = 0; - -  // most scsi handled is input -  bool in_xfer = true; - -  switch (scsi_cmd[0]) -  { -    case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: -      // Host is about to read/write etc ... better not to disconnect disk -      resplen = 0; -    break; - -    default: -      // Set Sense = Invalid Command Operation -      tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - -      // negative means error -> tinyusb could stall and/or response with failed status -      resplen = -1; -    break; -  } - -  // return resplen must not larger than bufsize -  if ( resplen > bufsize ) resplen = bufsize; - -  if ( response && (resplen > 0) ) -  { -    if(in_xfer) -    { -      memcpy(buffer, response, resplen); -    }else -    { -      // SCSI output -    } -  } - -  return resplen; -} - -#endif diff --git a/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h b/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h deleted file mode 100755 index 23073faf..00000000 --- a/tinyusb/examples/device/dynamic_configuration/src/tusb_config.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               1 -#define CFG_TUD_MSC               1 -#define CFG_TUD_MIDI              1 -#define CFG_TUD_HID               0 -#define CFG_TUD_VENDOR            0 - -// CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE    (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE    (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE    512 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c b/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c deleted file mode 100755 index 9ccb3765..00000000 --- a/tinyusb/examples/device/dynamic_configuration/src/usb_descriptors.c +++ /dev/null @@ -1,243 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "bsp/board.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -// Configuration mode -// 0 : enumerated as CDC/MIDI. Board button is not pressed when enumerating -// 1 : enumerated as MSC. Board button is pressed when enumerating -static uint32_t mode = 0; - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device_0 = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -tusb_desc_device_t const desc_device_1 = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0, -    .bDeviceSubClass    = 0, -    .bDeviceProtocol    = 0, - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID + 11, // should be different PID than desc0 -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  mode = board_button_read(); -  return (uint8_t const*) (mode ? &desc_device_1 : &desc_device_0); -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_0_NUM_CDC = 0, -  ITF_0_NUM_CDC_DATA, -  ITF_0_NUM_MIDI, -  ITF_0_NUM_MIDI_STREAMING, -  ITF_0_NUM_TOTAL -}; - -enum -{ -  ITF_1_NUM_MSC = 0, -  ITF_1_NUM_TOTAL -}; - -#define CONFIG_0_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MIDI_DESC_LEN) -#define CONFIG_1_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -  #define EPNUM_0_CDC_NOTIF   0x81 -  #define EPNUM_0_CDC_OUT     0x02 -  #define EPNUM_0_CDC_IN      0x82 - -  #define EPNUM_0_MIDI_OUT    0x05 -  #define EPNUM_0_MIDI_IN     0x85 - -  #define EPNUM_1_MSC_OUT     0x02 -  #define EPNUM_1_MSC_IN      0x82 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG -  // SAMG doesn't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_0_CDC_NOTIF   0x81 -  #define EPNUM_0_CDC_OUT     0x02 -  #define EPNUM_0_CDC_IN      0x83 - -  #define EPNUM_0_MIDI_OUT    0x04 -  #define EPNUM_0_MIDI_IN     0x85 - -  #define EPNUM_1_MSC_OUT     0x01 -  #define EPNUM_1_MSC_IN      0x82 - -#else -  #define EPNUM_0_CDC_NOTIF   0x81 -  #define EPNUM_0_CDC_OUT     0x02 -  #define EPNUM_0_CDC_IN      0x82 - -  #define EPNUM_0_MIDI_OUT    0x03 -  #define EPNUM_0_MIDI_IN     0x83 - -  #define EPNUM_1_MSC_OUT     0x01 -  #define EPNUM_1_MSC_IN      0x81 -#endif - -uint8_t const desc_configuration_0[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_0_NUM_TOTAL, 0, CONFIG_0_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_0_NUM_CDC, 0, EPNUM_0_CDC_NOTIF, 8, EPNUM_0_CDC_OUT, EPNUM_0_CDC_IN, 64), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MIDI_DESCRIPTOR(ITF_0_NUM_MIDI, 0, EPNUM_0_MIDI_OUT, EPNUM_0_MIDI_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), -}; - - -uint8_t const desc_configuraiton_1[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_1_NUM_TOTAL, 0, CONFIG_1_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_1_NUM_MSC, 0, EPNUM_1_MSC_OUT, EPNUM_1_MSC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), -}; - - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return mode ? desc_configuraiton_1 : desc_configuration_0; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/hid_boot_interface/CMakeLists.txt b/tinyusb/examples/device/hid_boot_interface/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/hid_boot_interface/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/hid_boot_interface/Makefile b/tinyusb/examples/device/hid_boot_interface/Makefile deleted file mode 100755 index 138c2784..00000000 --- a/tinyusb/examples/device/hid_boot_interface/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += \ -	src/main.c \ -	src/usb_descriptors.c -	 -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/hid_boot_interface/src/main.c b/tinyusb/examples/device/hid_boot_interface/src/main.c deleted file mode 100755 index e5e2f685..00000000 --- a/tinyusb/examples/device/hid_boot_interface/src/main.c +++ /dev/null @@ -1,255 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.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; - -void led_blinking_task(void); -void hid_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); - -    hid_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// USB HID -//--------------------------------------------------------------------+ - -// Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..) -// tud_hid_report_complete_cb() is used to send the next report after previous one is complete -void hid_task(void) -{ -  // Poll every 10ms -  const uint32_t interval_ms = 10; -  static uint32_t start_ms = 0; - -  if ( board_millis() - start_ms < interval_ms) return; // not enough time -  start_ms += interval_ms; - -  uint32_t const btn = board_button_read(); - -  if ( tud_suspended() && btn ) -  { -    // Wake up host if we are in suspend mode -    // and REMOTE_WAKEUP feature is enabled by host -    tud_remote_wakeup(); -  } -  else -  { -    // keyboard interface -    if ( tud_hid_n_ready(ITF_NUM_KEYBOARD) ) -    { -      // used to avoid send multiple consecutive zero report for keyboard -      static bool has_keyboard_key = false; - -      uint8_t const report_id = 0; -      uint8_t const modifier  = 0; - -      if ( btn ) -      { -        uint8_t keycode[6] = { 0 }; -        keycode[0] = HID_KEY_ARROW_RIGHT; - -        tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, keycode); -        has_keyboard_key = true; -      }else -      { -        // send empty key report if previously has key pressed -        if (has_keyboard_key) tud_hid_n_keyboard_report(ITF_NUM_KEYBOARD, report_id, modifier, NULL); -        has_keyboard_key = false; -      } -    } - -    // mouse interface -    if ( tud_hid_n_ready(ITF_NUM_MOUSE) ) -    { -      if ( btn ) -      { -        uint8_t const report_id   = 0; -        uint8_t const button_mask = 0; -        uint8_t const veritical   = 0; -        uint8_t const horizontal  = 0; -        int8_t  const delta       = 5; - -        tud_hid_n_mouse_report(ITF_NUM_MOUSE, report_id, button_mask, delta, delta, veritical, horizontal); -      } -    } -  } -} - -// Invoked when received SET_PROTOCOL request -// protocol is either HID_PROTOCOL_BOOT (0) or HID_PROTOCOL_REPORT (1) -void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol) -{ -  (void) instance; -  (void) protocol; - -  // nothing to do since we use the same compatible boot report for both Boot and Report mode. -  // TOOD set a indicator for user -} - -// Invoked when sent REPORT successfully to host -// Application can use this to send the next report -// Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint8_t len) -{ -  (void) instance; -  (void) report; -  (void) len; - -  // nothing to do -} - -// Invoked when received GET_REPORT control request -// Application must fill buffer report's content and return its length. -// Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) -{ -  // TODO not Implemented -  (void) instance; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) reqlen; - -  return 0; -} - -// Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) -{ -  (void) report_id; - -  // keyboard interface -  if (instance == ITF_NUM_KEYBOARD) -  { -    // Set keyboard LED e.g Capslock, Numlock etc... -    if (report_type == HID_REPORT_TYPE_OUTPUT) -    { -      // bufsize should be (at least) 1 -      if ( bufsize < 1 ) return; - -      uint8_t const kbd_leds = buffer[0]; - -      if (kbd_leds & KEYBOARD_LED_CAPSLOCK) -      { -        // Capslock On: disable blink, turn led on -        blink_interval_ms = 0; -        board_led_write(true); -      }else -      { -        // Caplocks Off: back to normal blink -        board_led_write(false); -        blink_interval_ms = BLINK_MOUNTED; -      } -    } -  } -} - -//--------------------------------------------------------------------+ -// BLINKING TASK -//--------------------------------------------------------------------+ -void led_blinking_task(void) -{ -  static uint32_t start_ms = 0; -  static bool led_state = false; - -  // blink is disabled -  if (!blink_interval_ms) return; - -  // 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 -} diff --git a/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h b/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h deleted file mode 100755 index 59fb9962..00000000 --- a/tinyusb/examples/device/hid_boot_interface/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_HID               2 // 1 for boot keyboard, 1 for boot mouse -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE    8 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c b/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c deleted file mode 100755 index 3fa48d98..00000000 --- a/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.c +++ /dev/null @@ -1,180 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "usb_descriptors.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// HID Report Descriptor -//--------------------------------------------------------------------+ - -uint8_t const desc_hid_keyboard_report[] = -{ -  TUD_HID_REPORT_DESC_KEYBOARD() -}; - -uint8_t const desc_hid_mouse_report[] = -{ -  TUD_HID_REPORT_DESC_MOUSE() -}; - -// Invoked when received GET HID REPORT DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) -{ -  return (instance == 0) ? desc_hid_keyboard_report : desc_hid_mouse_report; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -#define CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + 2*TUD_HID_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 1 Interrupt, 2 Bulk, 3 Iso, 4 Interrupt, 5 Bulk etc ... -  #define EPNUM_KEYBOARD   0x81 -  #define EPNUM_MOUSE      0x84 -#else -  #define EPNUM_KEYBOARD   0x81 -  #define EPNUM_MOUSE      0x82 -#endif - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -  TUD_HID_DESCRIPTOR(ITF_NUM_KEYBOARD, 0, HID_ITF_PROTOCOL_KEYBOARD, sizeof(desc_hid_keyboard_report), EPNUM_KEYBOARD, CFG_TUD_HID_EP_BUFSIZE, 10), - -  // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -  TUD_HID_DESCRIPTOR(ITF_NUM_MOUSE, 0, HID_ITF_PROTOCOL_MOUSE, sizeof(desc_hid_mouse_report), EPNUM_MOUSE, CFG_TUD_HID_EP_BUFSIZE, 10) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h b/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h deleted file mode 100755 index 57cf0e2c..00000000 --- a/tinyusb/examples/device/hid_boot_interface/src/usb_descriptors.h +++ /dev/null @@ -1,35 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - */ - -#ifndef USB_DESCRIPTORS_H_ -#define USB_DESCRIPTORS_H_ - -enum -{ -  ITF_NUM_KEYBOARD, -  ITF_NUM_MOUSE, -  ITF_NUM_TOTAL -}; - -#endif diff --git a/tinyusb/examples/device/hid_composite/CMakeLists.txt b/tinyusb/examples/device/hid_composite/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/hid_composite/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/hid_composite/Makefile b/tinyusb/examples/device/hid_composite/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/hid_composite/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/hid_composite/src/main.c b/tinyusb/examples/device/hid_composite/src/main.c deleted file mode 100755 index fd25e620..00000000 --- a/tinyusb/examples/device/hid_composite/src/main.c +++ /dev/null @@ -1,302 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.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; - -void led_blinking_task(void); -void hid_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); - -    hid_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// USB HID -//--------------------------------------------------------------------+ - -static void send_hid_report(uint8_t report_id, uint32_t btn) -{ -  // skip if hid is not ready yet -  if ( !tud_hid_ready() ) return; - -  switch(report_id) -  { -    case REPORT_ID_KEYBOARD: -    { -      // use to avoid send multiple consecutive zero report for keyboard -      static bool has_keyboard_key = false; - -      if ( btn ) -      { -        uint8_t keycode[6] = { 0 }; -        keycode[0] = HID_KEY_A; - -        tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); -        has_keyboard_key = true; -      }else -      { -        // send empty key report if previously has key pressed -        if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); -        has_keyboard_key = false; -      } -    } -    break; - -    case REPORT_ID_MOUSE: -    { -      int8_t const delta = 5; - -      // no button, right + down, no scroll, no pan -      tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); -    } -    break; - -    case REPORT_ID_CONSUMER_CONTROL: -    { -      // use to avoid send multiple consecutive zero report -      static bool has_consumer_key = false; - -      if ( btn ) -      { -        // volume down -        uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; -        tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); -        has_consumer_key = true; -      }else -      { -        // send empty key report (release key) if previously has key pressed -        uint16_t empty_key = 0; -        if (has_consumer_key) tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); -        has_consumer_key = false; -      } -    } -    break; - -    case REPORT_ID_GAMEPAD: -    { -      // use to avoid send multiple consecutive zero report for keyboard -      static bool has_gamepad_key = false; - -      hid_gamepad_report_t report = -      { -        .x   = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, -        .hat = 0, .buttons = 0 -      }; - -      if ( btn ) -      { -        report.hat = GAMEPAD_HAT_UP; -        report.buttons = GAMEPAD_BUTTON_A; -        tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - -        has_gamepad_key = true; -      }else -      { -        report.hat = GAMEPAD_HAT_CENTERED; -        report.buttons = 0; -        if (has_gamepad_key) tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); -        has_gamepad_key = false; -      } -    } -    break; - -    default: break; -  } -} - -// Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..) -// tud_hid_report_complete_cb() is used to send the next report after previous one is complete -void hid_task(void) -{ -  // Poll every 10ms -  const uint32_t interval_ms = 10; -  static uint32_t start_ms = 0; - -  if ( board_millis() - start_ms < interval_ms) return; // not enough time -  start_ms += interval_ms; - -  uint32_t const btn = board_button_read(); - -  // Remote wakeup -  if ( tud_suspended() && btn ) -  { -    // Wake up host if we are in suspend mode -    // and REMOTE_WAKEUP feature is enabled by host -    tud_remote_wakeup(); -  }else -  { -    // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() -    send_hid_report(REPORT_ID_KEYBOARD, btn); -  } -} - -// Invoked when sent REPORT successfully to host -// Application can use this to send the next report -// Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint8_t len) -{ -  (void) instance; -  (void) len; - -  uint8_t next_report_id = report[0] + 1; - -  if (next_report_id < REPORT_ID_COUNT) -  { -    send_hid_report(next_report_id, board_button_read()); -  } -} - -// Invoked when received GET_REPORT control request -// Application must fill buffer report's content and return its length. -// Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) -{ -  // TODO not Implemented -  (void) instance; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) reqlen; - -  return 0; -} - -// Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) -{ -  (void) instance; - -  if (report_type == HID_REPORT_TYPE_OUTPUT) -  { -    // Set keyboard LED e.g Capslock, Numlock etc... -    if (report_id == REPORT_ID_KEYBOARD) -    { -      // bufsize should be (at least) 1 -      if ( bufsize < 1 ) return; - -      uint8_t const kbd_leds = buffer[0]; - -      if (kbd_leds & KEYBOARD_LED_CAPSLOCK) -      { -        // Capslock On: disable blink, turn led on -        blink_interval_ms = 0; -        board_led_write(true); -      }else -      { -        // Caplocks Off: back to normal blink -        board_led_write(false); -        blink_interval_ms = BLINK_MOUNTED; -      } -    } -  } -} - -//--------------------------------------------------------------------+ -// BLINKING TASK -//--------------------------------------------------------------------+ -void led_blinking_task(void) -{ -  static uint32_t start_ms = 0; -  static bool led_state = false; - -  // blink is disabled -  if (!blink_interval_ms) return; - -  // 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 -} diff --git a/tinyusb/examples/device/hid_composite/src/tusb_config.h b/tinyusb/examples/device/hid_composite/src/tusb_config.h deleted file mode 100755 index 868424e6..00000000 --- a/tinyusb/examples/device/hid_composite/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_HID               1 -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE    16 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/hid_composite/src/usb_descriptors.c b/tinyusb/examples/device/hid_composite/src/usb_descriptors.c deleted file mode 100755 index b9a6e729..00000000 --- a/tinyusb/examples/device/hid_composite/src/usb_descriptors.c +++ /dev/null @@ -1,174 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "usb_descriptors.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// HID Report Descriptor -//--------------------------------------------------------------------+ - -uint8_t const desc_hid_report[] = -{ -  TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD         )), -  TUD_HID_REPORT_DESC_MOUSE   ( HID_REPORT_ID(REPORT_ID_MOUSE            )), -  TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )), -  TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD          )) -}; - -// Invoked when received GET HID REPORT DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) -{ -  (void) instance; -  return desc_hid_report; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_HID, -  ITF_NUM_TOTAL -}; - -#define  CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) - -#define EPNUM_HID   0x81 - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -  TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 5) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/hid_composite/src/usb_descriptors.h b/tinyusb/examples/device/hid_composite/src/usb_descriptors.h deleted file mode 100755 index ca8925ad..00000000 --- a/tinyusb/examples/device/hid_composite/src/usb_descriptors.h +++ /dev/null @@ -1,37 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - */ - -#ifndef USB_DESCRIPTORS_H_ -#define USB_DESCRIPTORS_H_ - -enum -{ -  REPORT_ID_KEYBOARD = 1, -  REPORT_ID_MOUSE, -  REPORT_ID_CONSUMER_CONTROL, -  REPORT_ID_GAMEPAD, -  REPORT_ID_COUNT -}; - -#endif /* USB_DESCRIPTORS_H_ */ diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_CXD56 b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_CXD56 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_CXD56 +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_EFM32GG12 b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_EFM32GG12 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_EFM32GG12 +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_GD32VF103 b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_GD32VF103 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_GD32VF103 +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_MSP430x5xx b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_MSP430x5xx deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_MSP430x5xx +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_RP2040 b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_RP2040 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_RP2040 +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMD11 b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMX7X b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMX7X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_SAMX7X +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_VALENTYUSB_EPTRI b/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_VALENTYUSB_EPTRI deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/.skip.MCU_VALENTYUSB_EPTRI +++ /dev/null diff --git a/tinyusb/examples/device/hid_composite_freertos/CMakeLists.txt b/tinyusb/examples/device/hid_composite_freertos/CMakeLists.txt deleted file mode 100755 index ed734b95..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -# use BOARD-Directory name for project id -get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME) -set(PROJECT ${BOARD}-${PROJECT}) - -# TOP is absolute path to root directory of TinyUSB git repo -set(TOP "../../..") -get_filename_component(TOP "${TOP}" REALPATH) - -# Check for -DFAMILY= -if(FAMILY MATCHES "^esp32s[2-3]") -  include(${TOP}/hw/bsp/${FAMILY}/family.cmake) -  project(${PROJECT}) -else() -  message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}") -endif() diff --git a/tinyusb/examples/device/hid_composite_freertos/Makefile b/tinyusb/examples/device/hid_composite_freertos/Makefile deleted file mode 100755 index 1c195959..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -DEPS_SUBMODULES += lib/FreeRTOS-Kernel - -include ../../../tools/top.mk -include ../../make.mk - -FREERTOS_SRC = lib/FreeRTOS-Kernel - -INC += \ -	src \ -	$(TOP)/hw \ -	$(TOP)/$(FREERTOS_SRC)/include \ -	$(TOP)/$(FREERTOS_SRC)/portable/GCC/$(FREERTOS_PORT)	 - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -# FreeRTOS source, all files in port folder -SRC_C += \ -	$(FREERTOS_SRC)/list.c \ -	$(FREERTOS_SRC)/queue.c \ -	$(FREERTOS_SRC)/tasks.c \ -	$(FREERTOS_SRC)/timers.c \ -	$(subst ../../../,,$(wildcard ../../../$(FREERTOS_SRC)/portable/GCC/$(FREERTOS_PORT)/*.c)) - -# FreeRTOS (lto + Os) linker issue -LDFLAGS += -Wl,--undefined=vTaskSwitchContext - -include ../../rules.mk diff --git a/tinyusb/examples/device/hid_composite_freertos/sdkconfig.defaults b/tinyusb/examples/device/hid_composite_freertos/sdkconfig.defaults deleted file mode 100755 index 83871619..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/sdkconfig.defaults +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_CMAKE=y -CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y diff --git a/tinyusb/examples/device/hid_composite_freertos/src/CMakeLists.txt b/tinyusb/examples/device/hid_composite_freertos/src/CMakeLists.txt deleted file mode 100755 index 6d4a3c1e..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -idf_component_register(SRCS "main.c" "usb_descriptors.c" -                    INCLUDE_DIRS "." -                    REQUIRES freertos soc) - -file(TO_NATIVE_PATH "${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake" board_cmake) - -if(EXISTS ${board_cmake}) -    include(${board_cmake}) -endif() - -idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) -target_include_directories(${COMPONENT_TARGET} PUBLIC -  "${FREERTOS_ORIG_INCLUDE_PATH}" -  "${TOP}/hw" -  "${TOP}/src" -) - -target_sources(${COMPONENT_TARGET} PUBLIC -  "${TOP}/src/tusb.c" -  "${TOP}/src/common/tusb_fifo.c" -  "${TOP}/src/device/usbd.c" -  "${TOP}/src/device/usbd_control.c" -  "${TOP}/src/class/cdc/cdc_device.c" -  "${TOP}/src/class/dfu/dfu_rt_device.c" -  "${TOP}/src/class/hid/hid_device.c" -  "${TOP}/src/class/midi/midi_device.c" -  "${TOP}/src/class/msc/msc_device.c" -  "${TOP}/src/class/net/net_device.c" -  "${TOP}/src/class/usbtmc/usbtmc_device.c" -  "${TOP}/src/class/vendor/vendor_device.c" -  "${TOP}/src/portable/espressif/esp32sx/dcd_esp32sx.c" -) diff --git a/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig.h b/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig.h deleted file mode 100755 index 568b27a1..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/FreeRTOSConfig.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * FreeRTOS Kernel V10.0.0 - * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved. - * - * 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. If you wish to use our Amazon - * FreeRTOS name, please do so in a fair use way that does not cause confusion. - * - * 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. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef FREERTOS_CONFIG_H -#define FREERTOS_CONFIG_H - -/*----------------------------------------------------------- - * Application specific definitions. - * - * These definitions should be adjusted for your particular hardware and - * application requirements. - * - * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE - * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. - * - * See http://www.freertos.org/a00110.html. - *----------------------------------------------------------*/ - -// Include MCU header -#include "bsp/board_mcu.h" - -extern uint32_t SystemCoreClock; - -/* Cortex M23/M33 port configuration. */ -#define configENABLE_MPU								        0 -#define configENABLE_FPU								        1 -#define configENABLE_TRUSTZONE					        0 -#define configMINIMAL_SECURE_STACK_SIZE					( 1024 ) - -#define configUSE_PREEMPTION                    1 -#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configCPU_CLOCK_HZ                      SystemCoreClock -#define configTICK_RATE_HZ                      ( 1000 ) -#define configMAX_PRIORITIES                    ( 5 ) -#define configMINIMAL_STACK_SIZE                ( 128 ) -#define configTOTAL_HEAP_SIZE                   ( 0*1024 ) // dynamic is not used -#define configMAX_TASK_NAME_LEN                 16 -#define configUSE_16_BIT_TICKS                  0 -#define configIDLE_SHOULD_YIELD                 1 -#define configUSE_MUTEXES                       1 -#define configUSE_RECURSIVE_MUTEXES             1 -#define configUSE_COUNTING_SEMAPHORES           1 -#define configQUEUE_REGISTRY_SIZE               2 -#define configUSE_QUEUE_SETS                    0 -#define configUSE_TIME_SLICING                  0 -#define configUSE_NEWLIB_REENTRANT              0 -#define configENABLE_BACKWARD_COMPATIBILITY     1 -#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP   0 - -#define configSUPPORT_STATIC_ALLOCATION         1 -#define configSUPPORT_DYNAMIC_ALLOCATION        0 - -/* Hook function related definitions. */ -#define configUSE_IDLE_HOOK                    0 -#define configUSE_TICK_HOOK                    0 -#define configUSE_MALLOC_FAILED_HOOK           0 // cause nested extern warning -#define configCHECK_FOR_STACK_OVERFLOW         2 - -/* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS          0 -#define configUSE_TRACE_FACILITY               1 // legacy trace -#define configUSE_STATS_FORMATTING_FUNCTIONS   0 - -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES                  0 -#define configMAX_CO_ROUTINE_PRIORITIES        2 - -/* Software timer related definitions. */ -#define configUSE_TIMERS                       1 -#define configTIMER_TASK_PRIORITY              (configMAX_PRIORITIES-2) -#define configTIMER_QUEUE_LENGTH               32 -#define configTIMER_TASK_STACK_DEPTH           configMINIMAL_STACK_SIZE - -/* Optional functions - most linkers will remove unused functions anyway. */ -#define INCLUDE_vTaskPrioritySet               0 -#define INCLUDE_uxTaskPriorityGet              0 -#define INCLUDE_vTaskDelete                    0 -#define INCLUDE_vTaskSuspend                   1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY -#define INCLUDE_xResumeFromISR                 0 -#define INCLUDE_vTaskDelayUntil                1 -#define INCLUDE_vTaskDelay                     1 -#define INCLUDE_xTaskGetSchedulerState         0 -#define INCLUDE_xTaskGetCurrentTaskHandle      0 -#define INCLUDE_uxTaskGetStackHighWaterMark    0 -#define INCLUDE_xTaskGetIdleTaskHandle         0 -#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 -#define INCLUDE_pcTaskGetTaskName              0 -#define INCLUDE_eTaskGetState                  0 -#define INCLUDE_xEventGroupSetBitFromISR       0 -#define INCLUDE_xTimerPendFunctionCall         0 - -/* Define to trap errors during development. */ -// Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7 -#if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) -  #define configASSERT(_exp) \ -    do {\ -      if ( !(_exp) ) { \ -        volatile uint32_t* ARM_CM_DHCSR =  ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ -        if ( (*ARM_CM_DHCSR) & 1UL ) {  /* Only halt mcu if debugger is attached */ \ -          taskDISABLE_INTERRUPTS(); \ -           __asm("BKPT #0\n"); \ -        }\ -      }\ -    } while(0) -#else -  #define configASSERT( x ) -#endif - -#ifdef __RX__ -/* Renesas RX series */ -#define vSoftwareInterruptISR					INT_Excep_ICU_SWINT -#define vTickISR								INT_Excep_CMT0_CMI0 -#define configPERIPHERAL_CLOCK_HZ				(configCPU_CLOCK_HZ/2) -#define configKERNEL_INTERRUPT_PRIORITY			1 -#define configMAX_SYSCALL_INTERRUPT_PRIORITY	4 - -#else - -/* FreeRTOS hooks to NVIC vectors */ -#define xPortPendSVHandler    PendSV_Handler -#define xPortSysTickHandler   SysTick_Handler -#define vPortSVCHandler       SVC_Handler - -//--------------------------------------------------------------------+ -// Interrupt nesting behavior configuration. -//--------------------------------------------------------------------+ -#if defined(__NVIC_PRIO_BITS) -  // For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h -	#define configPRIO_BITS       __NVIC_PRIO_BITS -#elif defined(__ECLIC_INTCTLBITS) -  // RISC-V Bumblebee core from nuclei -  #define configPRIO_BITS       __ECLIC_INTCTLBITS -#else -  #error "FreeRTOS configPRIO_BITS to be defined" -#endif - -/* The lowest interrupt priority that can be used in a call to a "set priority" function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			  ((1<<configPRIO_BITS) - 1) - -/* The highest interrupt priority that can be used by any interrupt service -routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL -INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER -PRIORITY THAN THIS! (higher priorities are lower numeric values. */ -#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	2 - -/* Interrupt priorities used by the kernel port layer itself.  These are generic -to all Cortex-M ports, and do not rely on any particular library functions. */ -#define configKERNEL_INTERRUPT_PRIORITY 		          ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! -See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ -#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	        ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -#endif - -#endif /* __FREERTOS_CONFIG__H */ diff --git a/tinyusb/examples/device/hid_composite_freertos/src/freertos_hook.c b/tinyusb/examples/device/hid_composite_freertos/src/freertos_hook.c deleted file mode 100755 index ab885947..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/freertos_hook.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -//--------------------------------------------------------------------+ -// INCLUDE -//--------------------------------------------------------------------+ -#include "FreeRTOS.h" -#include "task.h" -#include "common/tusb_common.h" - - -void vApplicationMallocFailedHook(void) -{ -  taskDISABLE_INTERRUPTS(); -  TU_ASSERT(false, ); -} - -void vApplicationStackOverflowHook(xTaskHandle pxTask, char *pcTaskName) -{ -  (void) pxTask; -  (void) pcTaskName; - -  taskDISABLE_INTERRUPTS(); -  TU_ASSERT(false, ); -} - -/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an - * implementation of vApplicationGetIdleTaskMemory() to provide the memory that is - * used by the Idle task. */ -void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) -{ -  /* If the buffers to be provided to the Idle task are declared inside this -   * function then they must be declared static - otherwise they will be allocated on -   * the stack and so not exists after this function exits. */ -  static StaticTask_t xIdleTaskTCB; -  static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ]; - -  /* Pass out a pointer to the StaticTask_t structure in which the Idle task's -    state will be stored. */ -  *ppxIdleTaskTCBBuffer = &xIdleTaskTCB; - -  /* Pass out the array that will be used as the Idle task's stack. */ -  *ppxIdleTaskStackBuffer = uxIdleTaskStack; - -  /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer. -    Note that, as the array is necessarily of type StackType_t, -    configMINIMAL_STACK_SIZE is specified in words, not bytes. */ -  *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; -} - -/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the - * application must provide an implementation of vApplicationGetTimerTaskMemory() - * to provide the memory that is used by the Timer service task. */ -void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ) -{ -  /* If the buffers to be provided to the Timer task are declared inside this -   * function then they must be declared static - otherwise they will be allocated on -   * the stack and so not exists after this function exits. */ -  static StaticTask_t xTimerTaskTCB; -  static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ]; - -  /* Pass out a pointer to the StaticTask_t structure in which the Timer -    task's state will be stored. */ -  *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; - -  /* Pass out the array that will be used as the Timer task's stack. */ -  *ppxTimerTaskStackBuffer = uxTimerTaskStack; - -  /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer. -    Note that, as the array is necessarily of type StackType_t, -    configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */ -  *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; -} - -#if CFG_TUSB_MCU == OPT_MCU_RX63X | CFG_TUSB_MCU == OPT_MCU_RX65X -#include "iodefine.h" -void vApplicationSetupTimerInterrupt(void) -{ -  /* Enable CMT0 */ -  SYSTEM.PRCR.WORD = (0xA5u<<8) | TU_BIT(1); -  MSTP(CMT0)       = 0; -  SYSTEM.PRCR.WORD = (0xA5u<<8); - -  CMT0.CMCNT      = 0; -  CMT0.CMCOR      = (unsigned short)(((configPERIPHERAL_CLOCK_HZ/configTICK_RATE_HZ)-1)/128); -  CMT0.CMCR.WORD  = TU_BIT(6) | 2; -  IR(CMT0, CMI0)  = 0; -  IPR(CMT0, CMI0) = configKERNEL_INTERRUPT_PRIORITY; -  IEN(CMT0, CMI0) = 1; -  CMT.CMSTR0.BIT.STR0 = 1; -} -#endif diff --git a/tinyusb/examples/device/hid_composite_freertos/src/main.c b/tinyusb/examples/device/hid_composite_freertos/src/main.c deleted file mode 100755 index 9c9830e3..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/main.c +++ /dev/null @@ -1,355 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "queue.h" -#include "semphr.h" - -#include "bsp/board.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 timer -StaticTimer_t blinky_tmdef; -TimerHandle_t blinky_tm; - -// static task for usbd -#if CFG_TUSB_DEBUG -  #define USBD_STACK_SIZE     (3*configMINIMAL_STACK_SIZE) -#else -  #define USBD_STACK_SIZE     (3*configMINIMAL_STACK_SIZE/2) -#endif - -StackType_t  usb_device_stack[USBD_STACK_SIZE]; -StaticTask_t usb_device_taskdef; - -// static task for hid -#define HID_STACK_SZIE      configMINIMAL_STACK_SIZE -StackType_t  hid_stack[HID_STACK_SZIE]; -StaticTask_t hid_taskdef; - - -void led_blinky_cb(TimerHandle_t xTimer); -void usb_device_task(void* param); -void hid_task(void* params); - -//--------------------------------------------------------------------+ -// Main -//--------------------------------------------------------------------+ - -int main(void) -{ -  board_init(); - -  // soft timer for blinky -  blinky_tm = xTimerCreateStatic(NULL, pdMS_TO_TICKS(BLINK_NOT_MOUNTED), true, NULL, led_blinky_cb, &blinky_tmdef); -  xTimerStart(blinky_tm, 0); - -  // Create a task for tinyusb device stack -  (void) xTaskCreateStatic( usb_device_task, "usbd", USBD_STACK_SIZE, NULL, configMAX_PRIORITIES-1, usb_device_stack, &usb_device_taskdef); - -  // Create HID task -  (void) xTaskCreateStatic( hid_task, "hid", HID_STACK_SZIE, NULL, configMAX_PRIORITIES-2, hid_stack, &hid_taskdef); - -  // skip starting scheduler (and return) for ESP32-S2 or ESP32-S3 -#if CFG_TUSB_MCU != OPT_MCU_ESP32S2 && CFG_TUSB_MCU != OPT_MCU_ESP32S3 -  vTaskStartScheduler(); -#endif - -  return 0; -} - -#if CFG_TUSB_MCU == OPT_MCU_ESP32S2 || CFG_TUSB_MCU == OPT_MCU_ESP32S3 -void app_main(void) -{ -  main(); -} -#endif - -// USB Device Driver task -// This top level thread process all usb events and invoke callbacks -void usb_device_task(void* param) -{ -  (void) param; - -  // This should be called after scheduler/kernel is started. -  // Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API. -  tusb_init(); - -  // RTOS forever loop -  while (1) -  { -    // tinyusb device task -    tud_task(); -  } -} - -//--------------------------------------------------------------------+ -// Device callbacks -//--------------------------------------------------------------------+ - -// Invoked when device is mounted -void tud_mount_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_MOUNTED), 0); -} - -// Invoked when device is unmounted -void tud_umount_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_NOT_MOUNTED), 0); -} - -// 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; -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_SUSPENDED), 0); -} - -// Invoked when usb bus is resumed -void tud_resume_cb(void) -{ -  xTimerChangePeriod(blinky_tm, pdMS_TO_TICKS(BLINK_MOUNTED), 0); -} - -//--------------------------------------------------------------------+ -// USB HID -//--------------------------------------------------------------------+ - -static void send_hid_report(uint8_t report_id, uint32_t btn) -{ -  // skip if hid is not ready yet -  if ( !tud_hid_ready() ) return; - -  switch(report_id) -  { -    case REPORT_ID_KEYBOARD: -    { -      // use to avoid send multiple consecutive zero report for keyboard -      static bool has_keyboard_key = false; - -      if ( btn ) -      { -        uint8_t keycode[6] = { 0 }; -        keycode[0] = HID_KEY_A; - -        tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); -        has_keyboard_key = true; -      }else -      { -        // send empty key report if previously has key pressed -        if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); -        has_keyboard_key = false; -      } -    } -    break; - -    case REPORT_ID_MOUSE: -    { -      int8_t const delta = 5; - -      // no button, right + down, no scroll, no pan -      tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); -    } -    break; - -    case REPORT_ID_CONSUMER_CONTROL: -    { -      // use to avoid send multiple consecutive zero report -      static bool has_consumer_key = false; - -      if ( btn ) -      { -        // volume down -        uint16_t volume_down = HID_USAGE_CONSUMER_VOLUME_DECREMENT; -        tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &volume_down, 2); -        has_consumer_key = true; -      }else -      { -        // send empty key report (release key) if previously has key pressed -        uint16_t empty_key = 0; -        if (has_consumer_key) tud_hid_report(REPORT_ID_CONSUMER_CONTROL, &empty_key, 2); -        has_consumer_key = false; -      } -    } -    break; - -    case REPORT_ID_GAMEPAD: -    { -      // use to avoid send multiple consecutive zero report for keyboard -      static bool has_gamepad_key = false; - -      hid_gamepad_report_t report = -      { -        .x   = 0, .y = 0, .z = 0, .rz = 0, .rx = 0, .ry = 0, -        .hat = 0, .buttons = 0 -      }; - -      if ( btn ) -      { -        report.hat = GAMEPAD_HAT_UP; -        report.buttons = GAMEPAD_BUTTON_A; -        tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); - -        has_gamepad_key = true; -      }else -      { -        report.hat = GAMEPAD_HAT_CENTERED; -        report.buttons = 0; -        if (has_gamepad_key) tud_hid_report(REPORT_ID_GAMEPAD, &report, sizeof(report)); -        has_gamepad_key = false; -      } -    } -    break; - -    default: break; -  } -} - -void hid_task(void* param) -{ -  (void) param; - -  while(1) -  { -    // Poll every 10ms -    vTaskDelay(pdMS_TO_TICKS(10)); - -    uint32_t const btn = board_button_read(); - -    // Remote wakeup -    if ( tud_suspended() && btn ) -    { -      // Wake up host if we are in suspend mode -      // and REMOTE_WAKEUP feature is enabled by host -      tud_remote_wakeup(); -    } -    else -    { -      // Send the 1st of report chain, the rest will be sent by tud_hid_report_complete_cb() -      send_hid_report(REPORT_ID_KEYBOARD, btn); -    } -  } -} - -// Invoked when sent REPORT successfully to host -// Application can use this to send the next report -// Note: For composite reports, report[0] is report ID -void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint8_t len) -{ -  (void) instance; -  (void) len; - -  uint8_t next_report_id = report[0] + 1; - -  if (next_report_id < REPORT_ID_COUNT) -  { -    send_hid_report(next_report_id, board_button_read()); -  } -} - - -// Invoked when received GET_REPORT control request -// Application must fill buffer report's content and return its length. -// Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) -{ -  // TODO not Implemented -  (void) instance; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) reqlen; - -  return 0; -} - -// Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) -{ -  (void) instance; - -  if (report_type == HID_REPORT_TYPE_OUTPUT) -  { -    // Set keyboard LED e.g Capslock, Numlock etc... -    if (report_id == REPORT_ID_KEYBOARD) -    { -      // bufsize should be (at least) 1 -      if ( bufsize < 1 ) return; - -      uint8_t const kbd_leds = buffer[0]; - -      if (kbd_leds & KEYBOARD_LED_CAPSLOCK) -      { -        // Capslock On: disable blink, turn led on -        xTimerStop(blinky_tm, portMAX_DELAY); -        board_led_write(true); -      }else -      { -        // Caplocks Off: back to normal blink -        board_led_write(false); -        xTimerStart(blinky_tm, portMAX_DELAY); -      } -    } -  } -} - -//--------------------------------------------------------------------+ -// BLINKING TASK -//--------------------------------------------------------------------+ -void led_blinky_cb(TimerHandle_t xTimer) -{ -  (void) xTimer; -  static bool led_state = false; - -  board_led_write(led_state); -  led_state = 1 - led_state; // toggle -} diff --git a/tinyusb/examples/device/hid_composite_freertos/src/tusb_config.h b/tinyusb/examples/device/hid_composite_freertos/src/tusb_config.h deleted file mode 100755 index 4b0458ef..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/tusb_config.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -// This examples use FreeRTOS -#define CFG_TUSB_OS               OPT_OS_FREERTOS - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_HID               1 -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE    16 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.c b/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.c deleted file mode 100755 index b9a6e729..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.c +++ /dev/null @@ -1,174 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "usb_descriptors.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// HID Report Descriptor -//--------------------------------------------------------------------+ - -uint8_t const desc_hid_report[] = -{ -  TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD         )), -  TUD_HID_REPORT_DESC_MOUSE   ( HID_REPORT_ID(REPORT_ID_MOUSE            )), -  TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )), -  TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD          )) -}; - -// Invoked when received GET HID REPORT DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t instance) -{ -  (void) instance; -  return desc_hid_report; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_HID, -  ITF_NUM_TOTAL -}; - -#define  CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN) - -#define EPNUM_HID   0x81 - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -  TUD_HID_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 5) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h b/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h deleted file mode 100755 index ca8925ad..00000000 --- a/tinyusb/examples/device/hid_composite_freertos/src/usb_descriptors.h +++ /dev/null @@ -1,37 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - */ - -#ifndef USB_DESCRIPTORS_H_ -#define USB_DESCRIPTORS_H_ - -enum -{ -  REPORT_ID_KEYBOARD = 1, -  REPORT_ID_MOUSE, -  REPORT_ID_CONSUMER_CONTROL, -  REPORT_ID_GAMEPAD, -  REPORT_ID_COUNT -}; - -#endif /* USB_DESCRIPTORS_H_ */ diff --git a/tinyusb/examples/device/hid_generic_inout/CMakeLists.txt b/tinyusb/examples/device/hid_generic_inout/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/hid_generic_inout/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/hid_generic_inout/Makefile b/tinyusb/examples/device/hid_generic_inout/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/hid_generic_inout/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/hid_generic_inout/boards.js b/tinyusb/examples/device/hid_generic_inout/boards.js deleted file mode 100755 index 6b78231a..00000000 --- a/tinyusb/examples/device/hid_generic_inout/boards.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { -	"Adafruit Boards":[0x239A,0xFFFF], -	"TinyUSB example":[0xCAFE,0xFFFF] -} diff --git a/tinyusb/examples/device/hid_generic_inout/hid_test.js b/tinyusb/examples/device/hid_generic_inout/hid_test.js deleted file mode 100755 index daa958fd..00000000 --- a/tinyusb/examples/device/hid_generic_inout/hid_test.js +++ /dev/null @@ -1,68 +0,0 @@ -// IMPORTANT: install the dependency via 'npm i node-hid' in the same location as the script -// If the install fails on windows you may need to run 'npm i -g windows-build-tools' first to be able to compile native code needed for this library - -var HID = require('node-hid'); -var os = require('os') -// list of supported devices -var boards = require('./boards.js') -var devices = HID.devices(); - -// this will choose any device found in the boards.js file -var deviceInfo = devices.find(anySupportedBoard); -var reportLen = 64; - -var message = "Hello World!" - -// Turn our string into an array of integers e.g. 'ascii codes', though charCodeAt spits out UTF-16 -// This means if you have characters in your string that are not Latin-1 you will have to add additional logic for character codes above 255 -var messageBuffer = Array.from(message, function(c){return c.charCodeAt(0)}); - -// HIDAPI requires us to prepend a 0 for single hid report as dummy reportID -messageBuffer.unshift(0) - -// Some OSes expect that you always send a buffer that equals your report length -// So lets fill up the rest of the buffer with zeros -var paddingBuf = Array(reportLen-messageBuffer.length); -paddingBuf.fill(0) -messageBuffer = messageBuffer.concat(paddingBuf) - -// check if we actually found a device and if so send our messageBuffer to it -if( deviceInfo ) { -	console.log(deviceInfo) -	var device = new HID.HID( deviceInfo.path ); - -	// register an event listener for data coming from the device -	device.on("data", function(data) { -		// Print what we get from the device -		console.log(data.toString('ascii')); -	}); - -	// the same for any error that occur -	device.on("error", function(err) {console.log(err)}); - -	// send our message to the device every 500ms -	setInterval(function () { -		device.write(messageBuffer); -	},500) -} - - -function anySupportedBoard(d) { -	 -	for (var key in boards) { -	    if (boards.hasOwnProperty(key)) { -	        if (isDevice(boards[key],d)) { -	        	console.log("Found " + d.product); -	        	return true; -	        } -	    } -	} -	return false; -} - - -function isDevice(board,d){ -	// product id 0xff is matches all -	return d.vendorId==board[0] && (d.productId==board[1] || board[1] == 0xFFFF); -} - diff --git a/tinyusb/examples/device/hid_generic_inout/hid_test.py b/tinyusb/examples/device/hid_generic_inout/hid_test.py deleted file mode 100755 index a42930fb..00000000 --- a/tinyusb/examples/device/hid_generic_inout/hid_test.py +++ /dev/null @@ -1,20 +0,0 @@ -# Install python3 HID package https://pypi.org/project/hid/ -import hid - -USB_VID = 0xcafe - -print("Openning HID device with VID = 0x%X" % USB_VID) - -for dict in hid.enumerate(USB_VID): -    print(dict) -    dev = hid.Device(dict['vendor_id'], dict['product_id']) -    if dev: -        while True: -            # Get input from console and encode to UTF8 for array of chars. -            # hid generic inout is single report therefore by HIDAPI requirement -            # it must be preceeded with 0x00 as dummy reportID -            str_out = b'\x00' -            str_out += input("Send text to HID Device : ").encode('utf-8') -            dev.write(str_out) -            str_in = dev.read(64) -            print("Received from HID Device:", str_in, '\n') diff --git a/tinyusb/examples/device/hid_generic_inout/src/main.c b/tinyusb/examples/device/hid_generic_inout/src/main.c deleted file mode 100755 index 32185560..00000000 --- a/tinyusb/examples/device/hid_generic_inout/src/main.c +++ /dev/null @@ -1,171 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -/* This example demonstrate HID Generic raw Input & Output. - * It will receive data from Host (In endpoint) and echo back (Out endpoint). - * HID Report descriptor use vendor for usage page (using template TUD_HID_REPORT_DESC_GENERIC_INOUT) - * - * There are 2 ways to test the sketch - * 1. Using nodejs - * - Install nodejs and npm to your PC - * - * - Install excellent node-hid (https://github.com/node-hid/node-hid) by - *   $ npm install node-hid - * - * - Run provided hid test script - *   $ node hid_test.js - * - * 2. Using python - * - Install `hid` package (https://pypi.org/project/hid/) by - *   $ pip install hid - * - * - hid package replies on hidapi (https://github.com/libusb/hidapi) for backend, - *   which already available in Linux. However on windows, you may need to download its dlls from their release page and - *   copy it over to folder where python is installed. - * - * - Run provided hid test script to send and receive data to this device. - *   $ python3 hid_test.py - */ - -//--------------------------------------------------------------------+ -// 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; - -void led_blinking_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// USB HID -//--------------------------------------------------------------------+ - -// Invoked when received GET_REPORT control request -// Application must fill buffer report's content and return its length. -// Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) -{ -  // TODO not Implemented -  (void) itf; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) reqlen; - -  return 0; -} - -// Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) -{ -  // This example doesn't use multiple report and report ID -  (void) itf; -  (void) report_id; -  (void) report_type; - -  // echo back anything we received from host -  tud_hid_report(0, buffer, bufsize); -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h b/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h deleted file mode 100755 index 1b8b91c4..00000000 --- a/tinyusb/examples/device/hid_generic_inout/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               1 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE    64 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c b/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c deleted file mode 100755 index 5a2f5ffd..00000000 --- a/tinyusb/examples/device/hid_generic_inout/src/usb_descriptors.c +++ /dev/null @@ -1,170 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// HID Report Descriptor -//--------------------------------------------------------------------+ - -uint8_t const desc_hid_report[] = -{ -  TUD_HID_REPORT_DESC_GENERIC_INOUT(CFG_TUD_HID_EP_BUFSIZE) -}; - -// Invoked when received GET HID REPORT DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) -{ -  (void) itf; -  return desc_hid_report; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_HID, -  ITF_NUM_TOTAL -}; - -#define  CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN) - -#define EPNUM_HID   0x01 - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, protocol, report descriptor len, EP In & Out address, size & polling interval -  TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID, 0, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report), EPNUM_HID, 0x80 | EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 10) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/hid_multiple_interface/CMakeLists.txt b/tinyusb/examples/device/hid_multiple_interface/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/hid_multiple_interface/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/hid_multiple_interface/Makefile b/tinyusb/examples/device/hid_multiple_interface/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/hid_multiple_interface/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/hid_multiple_interface/src/main.c b/tinyusb/examples/device/hid_multiple_interface/src/main.c deleted file mode 100755 index 7cb1d75a..00000000 --- a/tinyusb/examples/device/hid_multiple_interface/src/main.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -// Interface index depends on the order in configuration descriptor -enum { -  ITF_KEYBOARD = 0, -  ITF_MOUSE = 1 -}; - -/* 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; - -void led_blinking_task(void); -void hid_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); - -    hid_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// USB HID -//--------------------------------------------------------------------+ - -void hid_task(void) -{ -  // Poll every 10ms -  const uint32_t interval_ms = 10; -  static uint32_t start_ms = 0; - -  if ( board_millis() - start_ms < interval_ms) return; // not enough time -  start_ms += interval_ms; - -  uint32_t const btn = board_button_read(); - -  // Remote wakeup -  if ( tud_suspended() && btn ) -  { -    // Wake up host if we are in suspend mode -    // and REMOTE_WAKEUP feature is enabled by host -    tud_remote_wakeup(); -  } - -  /*------------- Keyboard -------------*/ -  if ( tud_hid_n_ready(ITF_KEYBOARD) ) -  { -    // use to avoid send multiple consecutive zero report for keyboard -    static bool has_key = false; - -    if ( btn ) -    { -      uint8_t keycode[6] = { 0 }; -      keycode[0] = HID_KEY_A; - -      tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, keycode); - -      has_key = true; -    }else -    { -      // send empty key report if previously has key pressed -      if (has_key) tud_hid_n_keyboard_report(ITF_KEYBOARD, 0, 0, NULL); -      has_key = false; -    } -  } - -  /*------------- Mouse -------------*/ -  if ( tud_hid_n_ready(ITF_MOUSE) ) -  { -    if ( btn ) -    { -      int8_t const delta = 5; - -      // no button, right + down, no scroll pan -      tud_hid_n_mouse_report(ITF_MOUSE, 0, 0x00, delta, delta, 0, 0); -    } -  } -} - - -// Invoked when received GET_REPORT control request -// Application must fill buffer report's content and return its length. -// Return zero will cause the stack to STALL request -uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) -{ -  // TODO not Implemented -  (void) itf; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) reqlen; - -  return 0; -} - -// Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) -{ -  // TODO set LED based on CAPLOCK, NUMLOCK etc... -  (void) itf; -  (void) report_id; -  (void) report_type; -  (void) buffer; -  (void) bufsize; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h b/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h deleted file mode 100755 index a0aa17a9..00000000 --- a/tinyusb/examples/device/hid_multiple_interface/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_HID               2 -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_EP_BUFSIZE    8 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c b/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c deleted file mode 100755 index 9eef2150..00000000 --- a/tinyusb/examples/device/hid_multiple_interface/src/usb_descriptors.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// HID Report Descriptor -//--------------------------------------------------------------------+ - -uint8_t const desc_hid_report1[] = -{ -  TUD_HID_REPORT_DESC_KEYBOARD() -}; - -uint8_t const desc_hid_report2[] = -{ -  TUD_HID_REPORT_DESC_MOUSE() -}; - -// Invoked when received GET HID REPORT DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) -{ -  if (itf == 0) -  { -    return desc_hid_report1; -  } -  else if (itf == 1) -  { -    return desc_hid_report2; -  } - -  return NULL; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_HID1, -  ITF_NUM_HID2, -  ITF_NUM_TOTAL -}; - -#define  CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN + TUD_HID_DESC_LEN) - -#define EPNUM_HID1   0x81 -#define EPNUM_HID2   0x82 - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval -  TUD_HID_DESCRIPTOR(ITF_NUM_HID1, 4, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report1), EPNUM_HID1, CFG_TUD_HID_EP_BUFSIZE, 10), -  TUD_HID_DESCRIPTOR(ITF_NUM_HID2, 5, HID_ITF_PROTOCOL_NONE, sizeof(desc_hid_report2), EPNUM_HID2, CFG_TUD_HID_EP_BUFSIZE, 10) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 },  // 0: is supported language is English (0x0409) -  "TinyUSB",                      // 1: Manufacturer -  "TinyUSB Device",               // 2: Product -  "123456",                       // 3: Serials, should use chip ID -  "Keyboard Interface",           // 4: Interface 1 String -  "Mouse Interface",              // 5: Interface 2 String -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/midi_test/CMakeLists.txt b/tinyusb/examples/device/midi_test/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/midi_test/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/midi_test/Makefile b/tinyusb/examples/device/midi_test/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/midi_test/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/midi_test/src/main.c b/tinyusb/examples/device/midi_test/src/main.c deleted file mode 100755 index 19374847..00000000 --- a/tinyusb/examples/device/midi_test/src/main.c +++ /dev/null @@ -1,177 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -/* This MIDI example send sequence of note (on/off) repeatedly. To test on PC, you need to install - * synth software and midi connection management software. On - * - Linux (Ubuntu): install qsynth, qjackctl. Then connect TinyUSB output port to FLUID Synth input port - * - Windows: install MIDI-OX - * - MacOS: SimpleSynth - */ - -//--------------------------------------------------------------------+ -// 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; - -void led_blinking_task(void); -void midi_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); -    midi_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// MIDI Task -//--------------------------------------------------------------------+ - -// Variable that holds the current position in the sequence. -uint32_t note_pos = 0; - -// Store example melody as an array of note values -uint8_t note_sequence[] = -{ -  74,78,81,86,90,93,98,102,57,61,66,69,73,78,81,85,88,92,97,100,97,92,88,85,81,78, -  74,69,66,62,57,62,66,69,74,78,81,86,90,93,97,102,97,93,90,85,81,78,73,68,64,61, -  56,61,64,68,74,78,81,86,90,93,98,102 -}; - -void midi_task(void) -{ -  static uint32_t start_ms = 0; - -  uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint -  uint8_t const channel   = 0; // 0 for channel 1 - -  // The MIDI interface always creates input and output port/jack descriptors -  // regardless of these being used or not. Therefore incoming traffic should be read -  // (possibly just discarded) to avoid the sender blocking in IO -  uint8_t packet[4]; -  while ( tud_midi_available() ) tud_midi_packet_read(packet); - -  // send note periodically -  if (board_millis() - start_ms < 286) return; // not enough time -  start_ms += 286; - -  // Previous positions in the note sequence. -  int previous = note_pos - 1; - -  // If we currently are at position 0, set the -  // previous position to the last note in the sequence. -  if (previous < 0) previous = sizeof(note_sequence) - 1; - -  // Send Note On for current position at full velocity (127) on channel 1. -  uint8_t note_on[3] = { 0x90 | channel, note_sequence[note_pos], 127 }; -  tud_midi_stream_write(cable_num, note_on, 3); - -  // Send Note Off for previous note. -  uint8_t note_off[3] = { 0x80 | channel, note_sequence[previous], 0}; -  tud_midi_stream_write(cable_num, note_off, 3); - -  // Increment position -  note_pos++; - -  // If we are at the end of the sequence, start over. -  if (note_pos >= sizeof(note_sequence)) note_pos = 0; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/midi_test/src/tusb_config.h b/tinyusb/examples/device/midi_test/src/tusb_config.h deleted file mode 100755 index 61b9b655..00000000 --- a/tinyusb/examples/device/midi_test/src/tusb_config.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              1 -#define CFG_TUD_VENDOR            0 - -// MIDI FIFO size of TX and RX -#define CFG_TUD_MIDI_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_MIDI_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64) - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/midi_test/src/usb_descriptors.c b/tinyusb/examples/device/midi_test/src/usb_descriptors.c deleted file mode 100755 index 9d92a775..00000000 --- a/tinyusb/examples/device/midi_test/src/usb_descriptors.c +++ /dev/null @@ -1,177 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]       MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_MIDI = 0, -  ITF_NUM_MIDI_STREAMING, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN  (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -  #define EPNUM_MIDI   0x02 -#else -  #define EPNUM_MIDI   0x01 -#endif - -uint8_t const desc_fs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI, 0x80 | EPNUM_MIDI, 64) -}; - -#if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI, 0x80 | EPNUM_MIDI, 512) -}; -#endif - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations - -#if TUD_OPT_HIGH_SPEED -  // Although we are highspeed, host may be fullspeed. -  return (tud_speed_get() == TUSB_SPEED_HIGH) ?  desc_hs_configuration : desc_fs_configuration; -#else -  return desc_fs_configuration; -#endif -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/msc_dual_lun/.skip.MCU_MKL25ZXX b/tinyusb/examples/device/msc_dual_lun/.skip.MCU_MKL25ZXX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/msc_dual_lun/.skip.MCU_MKL25ZXX +++ /dev/null diff --git a/tinyusb/examples/device/msc_dual_lun/.skip.MCU_SAMD11 b/tinyusb/examples/device/msc_dual_lun/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/msc_dual_lun/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/msc_dual_lun/CMakeLists.txt b/tinyusb/examples/device/msc_dual_lun/CMakeLists.txt deleted file mode 100755 index 9e834ae2..00000000 --- a/tinyusb/examples/device/msc_dual_lun/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk_dual.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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/msc_dual_lun/Makefile b/tinyusb/examples/device/msc_dual_lun/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/msc_dual_lun/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/msc_dual_lun/src/main.c b/tinyusb/examples/device/msc_dual_lun/src/main.c deleted file mode 100755 index 0293261a..00000000 --- a/tinyusb/examples/device/msc_dual_lun/src/main.c +++ /dev/null @@ -1,113 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.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; - -void led_blinking_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c b/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c deleted file mode 100755 index 2ab050da..00000000 --- a/tinyusb/examples/device/msc_dual_lun/src/msc_disk_dual.c +++ /dev/null @@ -1,349 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -#if CFG_TUD_MSC - -// Some MCU doesn't have enough 8KB SRAM to store the whole disk -// We will use Flash as read-only disk with board that has -// CFG_EXAMPLE_MSC_READONLY defined - -enum -{ -  DISK_BLOCK_NUM  = 16, // 8KB is the smallest size that windows allow to mount -  DISK_BLOCK_SIZE = 512 -}; - - -//--------------------------------------------------------------------+ -// LUN 0 -//--------------------------------------------------------------------+ -#define README0_CONTENTS \ -"LUN0: This is tinyusb's MassStorage Class demo.\r\n\r\n\ -If you find any bugs or get any questions, feel free to file an\r\n\ -issue at github.com/hathach/tinyusb" - - -#ifdef CFG_EXAMPLE_MSC_READONLY -const -#endif -uint8_t msc_disk0[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ -  //------------- Block0: Boot Sector -------------// -  // byte_per_sector    = DISK_BLOCK_SIZE; fat12_sector_num_16  = DISK_BLOCK_NUM; -  // sector_per_cluster = 1; reserved_sectors = 1; -  // fat_num            = 1; fat12_root_entry_num = 16; -  // sector_per_fat     = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; -  // drive_number       = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; -  // filesystem_type    = "FAT12   "; volume_serial_number = 0x1234; volume_label = "TinyUSB 0  "; -  // FAT magic code at offset 510-511 -  { -      0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, -      0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , -      'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - -      // Zero up to 2 last bytes of FAT magic code -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA -  }, - -  //------------- Block1: FAT12 Table -------------// -  { -      0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file -  }, - -  //------------- Block2: Root Directory -------------// -  { -      // first entry is volume label -      'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '0' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      // second entry is readme file -      'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '0' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, -      0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, -      sizeof(README0_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) -  }, - -  //------------- Block3: Readme Content -------------// -  README0_CONTENTS -}; - -//--------------------------------------------------------------------+ -// LUN 1 -//--------------------------------------------------------------------+ -#define README1_CONTENTS \ -"LUN1: This is tinyusb's MassStorage Class demo.\r\n\r\n\ -If you find any bugs or get any questions, feel free to file an\r\n\ -issue at github.com/hathach/tinyusb" - -#ifdef CFG_EXAMPLE_MSC_READONLY -const -#endif -uint8_t msc_disk1[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = -{ -  //------------- Block0: Boot Sector -------------// -  // byte_per_sector    = DISK_BLOCK_SIZE; fat12_sector_num_16  = DISK_BLOCK_NUM; -  // sector_per_cluster = 1; reserved_sectors = 1; -  // fat_num            = 1; fat12_root_entry_num = 16; -  // sector_per_fat     = 1; sector_per_track = 1; head_num = 1; hidden_sectors = 0; -  // drive_number       = 0x80; media_type = 0xf8; extended_boot_signature = 0x29; -  // filesystem_type    = "FAT12   "; volume_serial_number = 0x5678; volume_label = "TinyUSB 1  "; -  // FAT magic code at offset 510-511 -  { -      0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, -      0x01, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x78, 0x56, 0x00, 0x00, 'T' , 'i' , 'n' , 'y' , 'U' , -      'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, - -      // Zero up to 2 last bytes of FAT magic code -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA -  }, - -  //------------- Block1: FAT12 Table -------------// -  { -      0xF8, 0xFF, 0xFF, 0xFF, 0x0F // // first 2 entries must be F8FF, third entry is cluster end of readme file -  }, - -  //------------- Block2: Root Directory -------------// -  { -      // first entry is volume label -      'T' , 'i' , 'n' , 'y' , 'U' , 'S' , 'B' , ' ' , '1' , ' ' , ' ' , 0x08, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x65, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      // second entry is readme file -      'R' , 'E' , 'A' , 'D' , 'M' , 'E' , '1' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, -      0x65, 0x43, 0x65, 0x43, 0x00, 0x00, 0x88, 0x6D, 0x65, 0x43, 0x02, 0x00, -      sizeof(README1_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) -  }, - -  //------------- Block3: Readme Content -------------// -  README1_CONTENTS -}; - -// Invoked to determine max LUN -uint8_t tud_msc_get_maxlun_cb(void) -{ -  return 2; // dual LUN -} - -// Invoked when received SCSI_CMD_INQUIRY -// Application fill vendor id, product id and revision with string up to 8, 16, 4 characters respectively -void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]) -{ -  (void) lun; // use same ID for both LUNs - -  const char vid[] = "TinyUSB"; -  const char pid[] = "Mass Storage"; -  const char rev[] = "1.0"; - -  memcpy(vendor_id  , vid, strlen(vid)); -  memcpy(product_id , pid, strlen(pid)); -  memcpy(product_rev, rev, strlen(rev)); -} - -// Invoked when received Test Unit Ready command. -// return true allowing host to read/write this LUN e.g SD card inserted -bool tud_msc_test_unit_ready_cb(uint8_t lun) -{ -  (void) lun; - -  return true; // RAM disk is always ready -} - -// Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size -// Application update block count and block size -void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) -{ -  (void) lun; - -  *block_count = DISK_BLOCK_NUM; -  *block_size  = DISK_BLOCK_SIZE; -} - -// Invoked when received Start Stop Unit command -// - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage -// - Start = 1 : active mode, if load_eject = 1 : load disk storage -bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject) -{ -  (void) lun; -  (void) power_condition; - -  if ( load_eject ) -  { -    if (start) -    { -      // load disk storage -    }else -    { -      // unload disk storage -    } -  } - -  return true; -} - -// Callback invoked when received READ10 command. -// Copy disk's data to buffer (up to bufsize) and return number of copied bytes. -int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ -  uint8_t const* addr = (lun ? msc_disk1[lba] : msc_disk0[lba]) + offset; -  memcpy(buffer, addr, bufsize); - -  return bufsize; -} - -// Callback invoked when received WRITE10 command. -// Process data in buffer to disk's storage and return number of written bytes -int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) -{ -#ifndef CFG_EXAMPLE_MSC_READONLY -  uint8_t* addr = (lun ? msc_disk1[lba] : msc_disk0[lba])  + offset; -  memcpy(addr, buffer, bufsize); -#else -  (void) lun; (void) lba; (void) offset; (void) buffer; -#endif - -  return bufsize; -} - -// Callback invoked when received an SCSI command not in built-in list below -// - READ_CAPACITY10, READ_FORMAT_CAPACITY, INQUIRY, MODE_SENSE6, REQUEST_SENSE -// - READ10 and WRITE10 has their own callbacks -int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) -{ -  // read10 & write10 has their own callback and MUST not be handled here - -  void const* response = NULL; -  uint16_t resplen = 0; - -  // most scsi handled is input -  bool in_xfer = true; - -  switch (scsi_cmd[0]) -  { -    case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: -      // Host is about to read/write etc ... better not to disconnect disk -      resplen = 0; -    break; - -    case SCSI_CMD_START_STOP_UNIT: -      // Host try to eject/safe remove/poweroff us. We could safely disconnect with disk storage, or go into lower power -      /* scsi_start_stop_unit_t const * start_stop = (scsi_start_stop_unit_t const *) scsi_cmd; -        // Start bit = 0 : low power mode, if load_eject = 1 : unmount disk storage as well -        // Start bit = 1 : Ready mode, if load_eject = 1 : mount disk storage -        start_stop->start; -        start_stop->load_eject; -       */ -       resplen = 0; -    break; - - -    default: -      // Set Sense = Invalid Command Operation -      tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00); - -      // negative means error -> tinyusb could stall and/or response with failed status -      resplen = -1; -    break; -  } - -  // return resplen must not larger than bufsize -  if ( resplen > bufsize ) resplen = bufsize; - -  if ( response && (resplen > 0) ) -  { -    if(in_xfer) -    { -      memcpy(buffer, response, resplen); -    }else -    { -      // SCSI output -    } -  } - -  return resplen; -} - -#endif diff --git a/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h b/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h deleted file mode 100755 index 44da21e5..00000000 --- a/tinyusb/examples/device/msc_dual_lun/src/tusb_config.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               1 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 - -// MSC Buffer size of Device Mass storage -#define CFG_TUD_MSC_EP_BUFSIZE    512 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c b/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c deleted file mode 100755 index 138de62a..00000000 --- a/tinyusb/examples/device/msc_dual_lun/src/usb_descriptors.c +++ /dev/null @@ -1,185 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -enum -{ -  ITF_NUM_MSC, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  //  0 control, 1 In, 2 Bulk, 3 Iso, 4 In, 5 Bulk etc ... -  #define EPNUM_MSC_OUT   0x02 -  #define EPNUM_MSC_IN    0x82 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG -  // SAMG doesn't support a same endpoint number with different direction IN and OUT -  //  e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_MSC_OUT   0x01 -  #define EPNUM_MSC_IN    0x82 - -#else -  #define EPNUM_MSC_OUT   0x01 -  #define EPNUM_MSC_IN    0x81 - -#endif - -uint8_t const desc_fs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), -}; - -#if TUD_OPT_HIGH_SPEED -uint8_t const desc_hs_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP Out & EP In address, EP size -  TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 0, EPNUM_MSC_OUT, EPNUM_MSC_IN, 512), -}; -#endif - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations - -#if TUD_OPT_HIGH_SPEED -  // Although we are highspeed, host may be fullspeed. -  return (tud_speed_get() == TUSB_SPEED_HIGH) ?  desc_hs_configuration : desc_fs_configuration; -#else -  return desc_fs_configuration; -#endif -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC11UXX b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC11UXX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC11UXX +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC13XX b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC13XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_LPC13XX +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MKL25ZXX b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MKL25ZXX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MKL25ZXX +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MSP430x5xx b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MSP430x5xx deleted file mode 100755 index 17600f06..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_MSP430x5xx +++ /dev/null @@ -1 +0,0 @@ -too many warnings for 16-bit integer overflow diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_NUC121 b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_NUC121 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_NUC121 +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_SAMD11 b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_STM32L0 b/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_STM32L0 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/.skip.MCU_STM32L0 +++ /dev/null diff --git a/tinyusb/examples/device/net_lwip_webserver/CMakeLists.txt b/tinyusb/examples/device/net_lwip_webserver/CMakeLists.txt deleted file mode 100755 index 7500f6e9..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/CMakeLists.txt +++ /dev/null @@ -1,81 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -set(TOP "../../..") -get_filename_component(TOP "${TOP}" REALPATH) - -if (EXISTS ${TOP}/lib/lwip/src) -    include(${TOP}/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}) - -    # Checks this example is valid for the family and initializes the project -    family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -    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 -            ${TOP}/lib/lwip/src/include -            ${TOP}/lib/lwip/src/include/ipv4 -            ${TOP}/lib/lwip/src/include/lwip/apps -            ${TOP}/lib/networking -            ) - -    target_sources(${PROJECT} PUBLIC -            ${TOP}/lib/lwip/src/core/altcp.c -            ${TOP}/lib/lwip/src/core/altcp_alloc.c -            ${TOP}/lib/lwip/src/core/altcp_tcp.c -            ${TOP}/lib/lwip/src/core/def.c -            ${TOP}/lib/lwip/src/core/dns.c -            ${TOP}/lib/lwip/src/core/inet_chksum.c -            ${TOP}/lib/lwip/src/core/init.c -            ${TOP}/lib/lwip/src/core/ip.c -            ${TOP}/lib/lwip/src/core/mem.c -            ${TOP}/lib/lwip/src/core/memp.c -            ${TOP}/lib/lwip/src/core/netif.c -            ${TOP}/lib/lwip/src/core/pbuf.c -            ${TOP}/lib/lwip/src/core/raw.c -            ${TOP}/lib/lwip/src/core/stats.c -            ${TOP}/lib/lwip/src/core/sys.c -            ${TOP}/lib/lwip/src/core/tcp.c -            ${TOP}/lib/lwip/src/core/tcp_in.c -            ${TOP}/lib/lwip/src/core/tcp_out.c -            ${TOP}/lib/lwip/src/core/timeouts.c -            ${TOP}/lib/lwip/src/core/udp.c -            ${TOP}/lib/lwip/src/core/ipv4/autoip.c -            ${TOP}/lib/lwip/src/core/ipv4/dhcp.c -            ${TOP}/lib/lwip/src/core/ipv4/etharp.c -            ${TOP}/lib/lwip/src/core/ipv4/icmp.c -            ${TOP}/lib/lwip/src/core/ipv4/igmp.c -            ${TOP}/lib/lwip/src/core/ipv4/ip4.c -            ${TOP}/lib/lwip/src/core/ipv4/ip4_addr.c -            ${TOP}/lib/lwip/src/core/ipv4/ip4_frag.c -            ${TOP}/lib/lwip/src/netif/ethernet.c -            ${TOP}/lib/lwip/src/netif/slipif.c -            ${TOP}/lib/lwip/src/apps/http/httpd.c -            ${TOP}/lib/lwip/src/apps/http/fs.c -            ${TOP}/lib/networking/dhserver.c -            ${TOP}/lib/networking/dnserver.c -            ${TOP}/lib/networking/rndis_reports.c -            ) - -    target_compile_definitions(${PROJECT} PUBLIC -            PBUF_POOL_SIZE=2 -            TCP_WND=2*TCP_MSS -            HTTPD_USE_CUSTOM_FSDATA=0 -            ) - -    # Configure compilation flags and libraries for the example... see the corresponding function -    # in hw/bsp/FAMILY/family.cmake for details. -    family_configure_device_example(${PROJECT}) -endif()
\ No newline at end of file diff --git a/tinyusb/examples/device/net_lwip_webserver/Makefile b/tinyusb/examples/device/net_lwip_webserver/Makefile deleted file mode 100755 index c3e0d889..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -DEPS_SUBMODULES += lib/lwip - -include ../../../tools/top.mk -include ../../make.mk - -CFLAGS += \ -  -DPBUF_POOL_SIZE=2 \ -  -DTCP_WND=2*TCP_MSS \ -  -DHTTPD_USE_CUSTOM_FSDATA=0 - -INC += \ -  src \ -  $(TOP)/hw \ -  $(TOP)/lib/lwip/src/include \ -  $(TOP)/lib/lwip/src/include/ipv4 \ -  $(TOP)/lib/lwip/src/include/lwip/apps \ -  $(TOP)/lib/networking - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -# lwip sources -SRC_C += \ -  lib/lwip/src/core/altcp.c \ -  lib/lwip/src/core/altcp_alloc.c \ -  lib/lwip/src/core/altcp_tcp.c \ -  lib/lwip/src/core/def.c \ -  lib/lwip/src/core/dns.c \ -  lib/lwip/src/core/inet_chksum.c \ -  lib/lwip/src/core/init.c \ -  lib/lwip/src/core/ip.c \ -  lib/lwip/src/core/mem.c \ -  lib/lwip/src/core/memp.c \ -  lib/lwip/src/core/netif.c \ -  lib/lwip/src/core/pbuf.c \ -  lib/lwip/src/core/raw.c \ -  lib/lwip/src/core/stats.c \ -  lib/lwip/src/core/sys.c \ -  lib/lwip/src/core/tcp.c \ -  lib/lwip/src/core/tcp_in.c \ -  lib/lwip/src/core/tcp_out.c \ -  lib/lwip/src/core/timeouts.c \ -  lib/lwip/src/core/udp.c \ -  lib/lwip/src/core/ipv4/autoip.c \ -  lib/lwip/src/core/ipv4/dhcp.c \ -  lib/lwip/src/core/ipv4/etharp.c \ -  lib/lwip/src/core/ipv4/icmp.c \ -  lib/lwip/src/core/ipv4/igmp.c \ -  lib/lwip/src/core/ipv4/ip4.c \ -  lib/lwip/src/core/ipv4/ip4_addr.c \ -  lib/lwip/src/core/ipv4/ip4_frag.c \ -  lib/lwip/src/netif/ethernet.c \ -  lib/lwip/src/netif/slipif.c \ -  lib/lwip/src/apps/http/httpd.c \ -  lib/lwip/src/apps/http/fs.c \ -  lib/networking/dhserver.c \ -  lib/networking/dnserver.c \ -  lib/networking/rndis_reports.c - -include ../../rules.mk diff --git a/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h b/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h deleted file mode 100755 index 56a0cacf..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/src/arch/cc.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __CC_H__ -#define __CC_H__ - -//#include "cpu.h" - -typedef int sys_prot_t; - - - -/* define compiler specific symbols */ -#if defined (__ICCARM__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT  -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x -#define PACK_STRUCT_USE_INCLUDES - -#elif defined (__CC_ARM) - -#define PACK_STRUCT_BEGIN __packed -#define PACK_STRUCT_STRUCT  -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__GNUC__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__TASKING__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#endif - -#define LWIP_PLATFORM_ASSERT(x) do { if(!(x)) while(1); } while(0) - -#endif /* __CC_H__ */ diff --git a/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h b/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h deleted file mode 100755 index 5a8096f5..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/src/lwipopts.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Simon Goldschmidt - * - */ -#ifndef __LWIPOPTS_H__ -#define __LWIPOPTS_H__ - -/* Prevent having to link sys_arch.c (we don't test the API layers in unit tests) */ -#define NO_SYS                          1 -#define MEM_ALIGNMENT                   4 -#define LWIP_RAW                        0 -#define LWIP_NETCONN                    0 -#define LWIP_SOCKET                     0 -#define LWIP_DHCP                       0 -#define LWIP_ICMP                       1 -#define LWIP_UDP                        1 -#define LWIP_TCP                        1 -#define ETH_PAD_SIZE                    0 -#define LWIP_IP_ACCEPT_UDP_PORT(p)      ((p) == PP_NTOHS(67)) - -#define TCP_MSS                         (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) -#define TCP_SND_BUF                     (2 * TCP_MSS) - -#define ETHARP_SUPPORT_STATIC_ENTRIES   1 - -#define LWIP_HTTPD_CGI                  0 -#define LWIP_HTTPD_SSI                  0 -#define LWIP_HTTPD_SSI_INCLUDE_TAG      0 - -#define LWIP_SINGLE_NETIF               1 - -#endif /* __LWIPOPTS_H__ */ diff --git a/tinyusb/examples/device/net_lwip_webserver/src/main.c b/tinyusb/examples/device/net_lwip_webserver/src/main.c deleted file mode 100755 index 80831921..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/src/main.c +++ /dev/null @@ -1,247 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Peter Lawrence - * - * influenced by lrndis https://github.com/fetisov/lrndis - * - * 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. - * - */ - -/* -this appears as either a RNDIS or CDC-ECM USB virtual network adapter; the OS picks its preference - -RNDIS should be valid on Linux and Windows hosts, and CDC-ECM should be valid on Linux and macOS hosts - -The MCU appears to the host as IP address 192.168.7.1, and provides a DHCP server, DNS server, and web server. -*/ -/* -Some smartphones *may* work with this implementation as well, but likely have limited (broken) drivers, -and likely their manufacturer has not tested such functionality.  Some code workarounds could be tried: - -The smartphone may only have an ECM driver, but refuse to automatically pick ECM (unlike the OSes above); -try modifying ./examples/devices/net_lwip_webserver/usb_descriptors.c so that CONFIG_ID_ECM is default. - -The smartphone may be artificially picky about which Ethernet MAC address to recognize; if this happens,  -try changing the first byte of tud_network_mac_address[] below from 0x02 to 0x00 (clearing bit 1). -*/ - -#include "bsp/board.h" -#include "tusb.h" - -#include "dhserver.h" -#include "dnserver.h" -#include "lwip/init.h" -#include "lwip/timeouts.h" -#include "httpd.h" - -/* lwip context */ -static struct netif netif_data; - -/* shared between tud_network_recv_cb() and service_traffic() */ -static struct pbuf *received_frame; - -/* this is used by this code, ./class/net/net_driver.c, and usb_descriptors.c */ -/* ideally speaking, this should be generated from the hardware's unique ID (if available) */ -/* it is suggested that the first byte is 0x02 to indicate a link-local address */ -const uint8_t tud_network_mac_address[6] = {0x02,0x02,0x84,0x6A,0x96,0x00}; - -/* network parameters of this MCU */ -static const ip_addr_t ipaddr  = IPADDR4_INIT_BYTES(192, 168, 7, 1); -static const ip_addr_t netmask = IPADDR4_INIT_BYTES(255, 255, 255, 0); -static const ip_addr_t gateway = IPADDR4_INIT_BYTES(0, 0, 0, 0); - -/* database IP addresses that can be offered to the host; this must be in RAM to store assigned MAC addresses */ -static dhcp_entry_t entries[] = -{ -    /* mac ip address                          lease time */ -    { {0}, IPADDR4_INIT_BYTES(192, 168, 7, 2), 24 * 60 * 60 }, -    { {0}, IPADDR4_INIT_BYTES(192, 168, 7, 3), 24 * 60 * 60 }, -    { {0}, IPADDR4_INIT_BYTES(192, 168, 7, 4), 24 * 60 * 60 }, -}; - -static const dhcp_config_t dhcp_config = -{ -    .router = IPADDR4_INIT_BYTES(0, 0, 0, 0),  /* router address (if any) */ -    .port = 67,                                /* listen port */ -    .dns = IPADDR4_INIT_BYTES(192, 168, 7, 1), /* dns server (if any) */ -    "usb",                                     /* dns suffix */ -    TU_ARRAY_SIZE(entries),                    /* num entry */ -    entries                                    /* entries */ -}; -static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) -{ -  (void)netif; - -  for (;;) -  { -    /* if TinyUSB isn't ready, we must signal back to lwip that there is nothing we can do */ -    if (!tud_ready()) -      return ERR_USE; - -    /* if the network driver can accept another packet, we make it happen */ -    if (tud_network_can_xmit()) -    { -      tud_network_xmit(p, 0 /* unused for this example */); -      return ERR_OK; -    } - -    /* transfer execution to TinyUSB in the hopes that it will finish transmitting the prior packet */ -    tud_task(); -  } -} - -static err_t output_fn(struct netif *netif, struct pbuf *p, const ip_addr_t *addr) -{ -  return etharp_output(netif, p, addr); -} - -static err_t netif_init_cb(struct netif *netif) -{ -  LWIP_ASSERT("netif != NULL", (netif != NULL)); -  netif->mtu = CFG_TUD_NET_MTU; -  netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_UP; -  netif->state = NULL; -  netif->name[0] = 'E'; -  netif->name[1] = 'X'; -  netif->linkoutput = linkoutput_fn; -  netif->output = output_fn; -  return ERR_OK; -} - -static void init_lwip(void) -{ -  struct netif *netif = &netif_data; - -  lwip_init(); - -  /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ -  netif->hwaddr_len = sizeof(tud_network_mac_address); -  memcpy(netif->hwaddr, tud_network_mac_address, sizeof(tud_network_mac_address)); -  netif->hwaddr[5] ^= 0x01; - -  netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, netif_init_cb, ip_input); -  netif_set_default(netif); -} - -/* handle any DNS requests from dns-server */ -bool dns_query_proc(const char *name, ip_addr_t *addr) -{ -  if (0 == strcmp(name, "tiny.usb")) -  { -    *addr = ipaddr; -    return true; -  } -  return false; -} - -bool tud_network_recv_cb(const uint8_t *src, uint16_t size) -{ -  /* this shouldn't happen, but if we get another packet before  -  parsing the previous, we must signal our inability to accept it */ -  if (received_frame) return false; - -  if (size) -  { -    struct pbuf *p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); - -    if (p) -    { -      /* pbuf_alloc() has already initialized struct; all we need to do is copy the data */ -      memcpy(p->payload, src, size); - -      /* store away the pointer for service_traffic() to later handle */ -      received_frame = p; -    } -  } - -  return true; -} - -uint16_t tud_network_xmit_cb(uint8_t *dst, void *ref, uint16_t arg) -{ -  struct pbuf *p = (struct pbuf *)ref; - -  (void)arg; /* unused for this example */ - -  return pbuf_copy_partial(p, dst, p->tot_len, 0); -} - -static void service_traffic(void) -{ -  /* handle any packet received by tud_network_recv_cb() */ -  if (received_frame) -  { -    ethernet_input(received_frame, &netif_data); -    pbuf_free(received_frame); -    received_frame = NULL; -    tud_network_recv_renew(); -  } - -  sys_check_timeouts(); -} - -void tud_network_init_cb(void) -{ -  /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ -  if (received_frame) -  { -    pbuf_free(received_frame); -    received_frame = NULL; -  } -} - -int main(void) -{ -  /* initialize TinyUSB */ -  board_init(); -  tusb_init(); - -  /* initialize lwip, dhcp-server, dns-server, and http */ -  init_lwip(); -  while (!netif_is_up(&netif_data)); -  while (dhserv_init(&dhcp_config) != ERR_OK); -  while (dnserv_init(&ipaddr, 53, dns_query_proc) != ERR_OK); -  httpd_init(); - -  while (1) -  { -    tud_task(); -    service_traffic(); -  } - -  return 0; -} - -/* lwip has provision for using a mutex, when applicable */ -sys_prot_t sys_arch_protect(void) -{ -  return 0; -} -void sys_arch_unprotect(sys_prot_t pval) -{ -  (void)pval; -} - -/* lwip needs a millisecond time source, and the TinyUSB board support code has one available */ -uint32_t sys_now(void) -{ -  return board_millis(); -} diff --git a/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h b/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h deleted file mode 100755 index 262d4ebc..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/src/tusb_config.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            0 -#define CFG_TUD_NET               1 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c b/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c deleted file mode 100755 index 71e6c458..00000000 --- a/tinyusb/examples/device/net_lwip_webserver/src/usb_descriptors.c +++ /dev/null @@ -1,224 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]       NET | VENDOR | MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) | _PID_MAP(NET, 5) ) - -// String Descriptor Index -enum -{ -  STRID_LANGID = 0, -  STRID_MANUFACTURER, -  STRID_PRODUCT, -  STRID_SERIAL, -  STRID_INTERFACE, -  STRID_MAC -}; - -enum -{ -  ITF_NUM_CDC = 0, -  ITF_NUM_CDC_DATA, -  ITF_NUM_TOTAL -}; - -enum -{ -  CONFIG_ID_RNDIS = 0, -  CONFIG_ID_ECM   = 1, -  CONFIG_ID_COUNT -}; - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) device class -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -     -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0101, - -    .iManufacturer      = STRID_MANUFACTURER, -    .iProduct           = STRID_PRODUCT, -    .iSerialNumber      = STRID_SERIAL, - -    .bNumConfigurations = CONFIG_ID_COUNT // multiple configurations -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -#define MAIN_CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) -#define ALT_CONFIG_TOTAL_LEN     (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -  #define EPNUM_NET_NOTIF   0x81 -  #define EPNUM_NET_OUT     0x02 -  #define EPNUM_NET_IN      0x82 - -#elif CFG_TUSB_MCU == OPT_MCU_SAMG  || CFG_TUSB_MCU ==  OPT_MCU_SAMX7X -  // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_NET_NOTIF   0x81 -  #define EPNUM_NET_OUT     0x02 -  #define EPNUM_NET_IN      0x83 - -#else -  #define EPNUM_NET_NOTIF   0x81 -  #define EPNUM_NET_OUT     0x02 -  #define EPNUM_NET_IN      0x82 -#endif - -static uint8_t const rndis_configuration[] = -{ -  // Config number (index+1), interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS+1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), -}; - -static uint8_t const ecm_configuration[] = -{ -  // Config number (index+1), interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM+1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), - -  // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. -  TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), -}; - -// Configuration array: RNDIS and CDC-ECM -// - Windows only works with RNDIS -// - MacOS only works with CDC-ECM -// - Linux will work on both -static uint8_t const * const configuration_arr[2] = -{ -  [CONFIG_ID_RNDIS] = rndis_configuration, -  [CONFIG_ID_ECM  ] = ecm_configuration -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  return (index < CONFIG_ID_COUNT) ? configuration_arr[index] : NULL; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -static char const* string_desc_arr [] = -{ -  [STRID_LANGID]       = (const char[]) { 0x09, 0x04 }, // supported language is English (0x0409) -  [STRID_MANUFACTURER] = "TinyUSB",                     // Manufacturer -  [STRID_PRODUCT]      = "TinyUSB Device",              // Product -  [STRID_SERIAL]       = "123456",                      // Serial -  [STRID_INTERFACE]    = "TinyUSB Network Interface"    // Interface Description - -  // STRID_MAC index is handled separately -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  unsigned int chr_count = 0; - -  if (STRID_LANGID == index) -  { -    memcpy(&_desc_str[1], string_desc_arr[STRID_LANGID], 2); -    chr_count = 1; -  } -  else if (STRID_MAC == index) -  { -    // Convert MAC address into UTF-16 - -    for (unsigned i=0; i<sizeof(tud_network_mac_address); i++) -    { -      _desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 4) & 0xf]; -      _desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf]; -    } -  } -  else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > (TU_ARRAY_SIZE(_desc_str) - 1)) chr_count = TU_ARRAY_SIZE(_desc_str) - 1; - -    // Convert ASCII string into UTF-16 -    for (unsigned int i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC11UXX b/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC11UXX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC11UXX +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC13XX b/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC13XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_LPC13XX +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_NUC121 b/tinyusb/examples/device/uac2_headset/.skip.MCU_NUC121 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_NUC121 +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMD11 b/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMD11 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMD11 +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAME5X b/tinyusb/examples/device/uac2_headset/.skip.MCU_SAME5X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAME5X +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMG b/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMG deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/device/uac2_headset/.skip.MCU_SAMG +++ /dev/null diff --git a/tinyusb/examples/device/uac2_headset/CMakeLists.txt b/tinyusb/examples/device/uac2_headset/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/uac2_headset/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/uac2_headset/Makefile b/tinyusb/examples/device/uac2_headset/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/uac2_headset/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/uac2_headset/src/main.c b/tinyusb/examples/device/uac2_headset/src/main.c deleted file mode 100755 index 790af088..00000000 --- a/tinyusb/examples/device/uac2_headset/src/main.c +++ /dev/null @@ -1,441 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Jerzy Kasenberg - * - * 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. - * - */ - -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" -#include "usb_descriptors.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTOTYPES -//--------------------------------------------------------------------+ - -// List of supported sample rates -#if defined(__RX__) -const uint32_t sample_rates[]       = {44100, 48000}; -#else -const uint32_t sample_rates[]       = {44100, 48000, 88200, 96000}; -#endif -uint32_t       current_sample_rate  = 44100; - -#define N_SAMPLE_RATES  TU_ARRAY_SIZE(sample_rates) - -/* Blink pattern - * - 25 ms   : streaming data - * - 250 ms  : device not mounted - * - 1000 ms : device mounted - * - 2500 ms : device is suspended - */ -enum -{ -  BLINK_STREAMING = 25, -  BLINK_NOT_MOUNTED = 250, -  BLINK_MOUNTED = 1000, -  BLINK_SUSPENDED = 2500, -}; - -enum -{ -  VOLUME_CTRL_0_DB = 0, -  VOLUME_CTRL_10_DB = 2560, -  VOLUME_CTRL_20_DB = 5120, -  VOLUME_CTRL_30_DB = 7680, -  VOLUME_CTRL_40_DB = 10240, -  VOLUME_CTRL_50_DB = 12800, -  VOLUME_CTRL_60_DB = 15360, -  VOLUME_CTRL_70_DB = 17920, -  VOLUME_CTRL_80_DB = 20480, -  VOLUME_CTRL_90_DB = 23040, -  VOLUME_CTRL_100_DB = 25600, -  VOLUME_CTRL_SILENCE = 0x8000, -}; - -static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; - -// Audio controls -// Current states -int8_t mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1];       // +1 for master channel 0 -int16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1];    // +1 for master channel 0 - -// Buffer for microphone data -int32_t mic_buf[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ / 4]; -// Buffer for speaker data -int32_t spk_buf[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ / 4]; -// Speaker data size received in the last frame -int spk_data_size; -// Resolution per format -const uint8_t resolutions_per_format[CFG_TUD_AUDIO_FUNC_1_N_FORMATS] = {CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX, -                                                                        CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX}; -// Current resolution, update on format change -uint8_t current_resolution; - -void led_blinking_task(void); -void audio_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  TU_LOG1("Headset running\r\n"); - -  while (1) -  { -    tud_task(); // TinyUSB device task -    audio_task(); -    led_blinking_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 = BLINK_MOUNTED; -} - -// Helper for clock get requests -static bool tud_audio_clock_get_request(uint8_t rhport, audio_control_request_t const *request) -{ -  TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); - -  if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) -  { -    if (request->bRequest == AUDIO_CS_REQ_CUR) -    { -      TU_LOG1("Clock get current freq %u\r\n", current_sample_rate); - -      audio_control_cur_4_t curf = { tu_htole32(current_sample_rate) }; -      return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &curf, sizeof(curf)); -    } -    else if (request->bRequest == AUDIO_CS_REQ_RANGE) -    { -      audio_control_range_4_n_t(N_SAMPLE_RATES) rangef = -      { -        .wNumSubRanges = tu_htole16(N_SAMPLE_RATES) -      }; -      TU_LOG1("Clock get %d freq ranges\r\n", N_SAMPLE_RATES); -      for(uint8_t i = 0; i < N_SAMPLE_RATES; i++) -      { -        rangef.subrange[i].bMin = sample_rates[i]; -        rangef.subrange[i].bMax = sample_rates[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, (tusb_control_request_t const *)request, &rangef, sizeof(rangef)); -    } -  } -  else if (request->bControlSelector == AUDIO_CS_CTRL_CLK_VALID && -           request->bRequest == AUDIO_CS_REQ_CUR) -  { -    audio_control_cur_1_t cur_valid = { .bCur = 1 }; -    TU_LOG1("Clock get is valid %u\r\n", cur_valid.bCur); -    return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_valid, sizeof(cur_valid)); -  } -  TU_LOG1("Clock get request not supported, entity = %u, selector = %u, request = %u\r\n", -          request->bEntityID, request->bControlSelector, request->bRequest); -  return false; -} - -// Helper for clock set requests -static bool tud_audio_clock_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) -{ -  (void)rhport; - -  TU_ASSERT(request->bEntityID == UAC2_ENTITY_CLOCK); -  TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - -  if (request->bControlSelector == AUDIO_CS_CTRL_SAM_FREQ) -  { -    TU_VERIFY(request->wLength == sizeof(audio_control_cur_4_t)); - -    current_sample_rate = ((audio_control_cur_4_t *)buf)->bCur; - -    TU_LOG1("Clock set current freq: %d\r\n", current_sample_rate); - -    return true; -  } -  else -  { -    TU_LOG1("Clock set request not supported, entity = %u, selector = %u, request = %u\r\n", -            request->bEntityID, request->bControlSelector, request->bRequest); -    return false; -  } -} - -// Helper for feature unit get requests -static bool tud_audio_feature_unit_get_request(uint8_t rhport, audio_control_request_t const *request) -{ -  TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); - -  if (request->bControlSelector == AUDIO_FU_CTRL_MUTE && request->bRequest == AUDIO_CS_REQ_CUR) -  { -    audio_control_cur_1_t mute1 = { .bCur = mute[request->bChannelNumber] }; -    TU_LOG1("Get channel %u mute %d\r\n", request->bChannelNumber, mute1.bCur); -    return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &mute1, sizeof(mute1)); -  } -  else if (UAC2_ENTITY_SPK_FEATURE_UNIT && request->bControlSelector == AUDIO_FU_CTRL_VOLUME) -  { -    if (request->bRequest == AUDIO_CS_REQ_RANGE) -    { -      audio_control_range_2_n_t(1) range_vol = { -        .wNumSubRanges = tu_htole16(1), -        .subrange[0] = { .bMin = tu_htole16(-VOLUME_CTRL_50_DB), tu_htole16(VOLUME_CTRL_0_DB), tu_htole16(256) } -      }; -      TU_LOG1("Get channel %u volume range (%d, %d, %u) dB\r\n", request->bChannelNumber, -              range_vol.subrange[0].bMin / 256, range_vol.subrange[0].bMax / 256, range_vol.subrange[0].bRes / 256); -      return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &range_vol, sizeof(range_vol)); -    } -    else if (request->bRequest == AUDIO_CS_REQ_CUR) -    { -      audio_control_cur_2_t cur_vol = { .bCur = tu_htole16(volume[request->bChannelNumber]) }; -      TU_LOG1("Get channel %u volume %d dB\r\n", request->bChannelNumber, cur_vol.bCur / 256); -      return tud_audio_buffer_and_schedule_control_xfer(rhport, (tusb_control_request_t const *)request, &cur_vol, sizeof(cur_vol)); -    } -  } -  TU_LOG1("Feature unit get request not supported, entity = %u, selector = %u, request = %u\r\n", -          request->bEntityID, request->bControlSelector, request->bRequest); - -  return false; -} - -// Helper for feature unit set requests -static bool tud_audio_feature_unit_set_request(uint8_t rhport, audio_control_request_t const *request, uint8_t const *buf) -{ -  (void)rhport; - -  TU_ASSERT(request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT); -  TU_VERIFY(request->bRequest == AUDIO_CS_REQ_CUR); - -  if (request->bControlSelector == AUDIO_FU_CTRL_MUTE) -  { -    TU_VERIFY(request->wLength == sizeof(audio_control_cur_1_t)); - -    mute[request->bChannelNumber] = ((audio_control_cur_1_t *)buf)->bCur; - -    TU_LOG1("Set channel %d Mute: %d\r\n", request->bChannelNumber, mute[request->bChannelNumber]); - -    return true; -  } -  else if (request->bControlSelector == AUDIO_FU_CTRL_VOLUME) -  { -    TU_VERIFY(request->wLength == sizeof(audio_control_cur_2_t)); - -    volume[request->bChannelNumber] = ((audio_control_cur_2_t const *)buf)->bCur; - -    TU_LOG1("Set channel %d volume: %d dB\r\n", request->bChannelNumber, volume[request->bChannelNumber] / 256); - -    return true; -  } -  else -  { -    TU_LOG1("Feature unit set request not supported, entity = %u, selector = %u, request = %u\r\n", -            request->bEntityID, request->bControlSelector, request->bRequest); -    return false; -  } -} - -//--------------------------------------------------------------------+ -// Application Callback API Implementations -//--------------------------------------------------------------------+ - -// 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) -{ -  audio_control_request_t *request = (audio_control_request_t *)p_request; - -  if (request->bEntityID == UAC2_ENTITY_CLOCK) -    return tud_audio_clock_get_request(rhport, request); -  if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) -    return tud_audio_feature_unit_get_request(rhport, request); -  else -  { -    TU_LOG1("Get request not handled, entity = %d, selector = %d, request = %d\r\n", -            request->bEntityID, request->bControlSelector, request->bRequest); -  } -  return false; -} - -// 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 *buf) -{ -  audio_control_request_t const *request = (audio_control_request_t const *)p_request; - -  if (request->bEntityID == UAC2_ENTITY_SPK_FEATURE_UNIT) -    return tud_audio_feature_unit_set_request(rhport, request, buf); -  if (request->bEntityID == UAC2_ENTITY_CLOCK) -    return tud_audio_clock_set_request(rhport, request, buf); -  TU_LOG1("Set request not handled, entity = %d, selector = %d, request = %d\r\n", -          request->bEntityID, request->bControlSelector, request->bRequest); - -  return false; -} - -bool tud_audio_set_itf_close_EP_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)); - -  if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt == 0) -      blink_interval_ms = BLINK_MOUNTED; - -  return true; -} - -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)); - -  TU_LOG2("Set interface %d alt %d\r\n", itf, alt); -  if (ITF_NUM_AUDIO_STREAMING_SPK == itf && alt != 0) -      blink_interval_ms = BLINK_STREAMING; - -  // Clear buffer when streaming format is changed -  spk_data_size = 0; -  if(alt != 0) -  { -    current_resolution = resolutions_per_format[alt-1]; -  } - -  return true; -} - -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 = tud_audio_read(spk_buf, n_bytes_received); -  return true; -} - -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; - -  // This callback could be used to fill microphone data separately -  return true; -} - -//--------------------------------------------------------------------+ -// AUDIO Task -//--------------------------------------------------------------------+ - -void audio_task(void) -{ -  // When new data arrived, copy data from speaker buffer, to microphone buffer -  // and send it over -  // Only support speaker & headphone both have the same resolution -  // If one is 16bit another is 24bit be care of LOUD noise ! -  if (spk_data_size) -  { -    if (current_resolution == 16) -    { -      int16_t *src = (int16_t*)spk_buf; -      int16_t *limit = (int16_t*)spk_buf + spk_data_size / 2; -      int16_t *dst = (int16_t*)mic_buf; -      while (src < limit) -      { -        // Combine two channels into one -        int32_t left = *src++; -        int32_t right = *src++; -        *dst++ = (left >> 1) + (right >> 1); -      } -      tud_audio_write((uint8_t *)mic_buf, spk_data_size / 2); -      spk_data_size = 0; -    } -    else if (current_resolution == 24) -    { -      int32_t *src = spk_buf; -      int32_t *limit = spk_buf + spk_data_size / 4; -      int32_t *dst = mic_buf; -      while (src < limit) -      { -        // Combine two channels into one -        int32_t left = *src++; -        int32_t right = *src++; -        *dst++ = ((left >> 1) + (right >> 1)) & 0xffffff00; -      } -      tud_audio_write((uint8_t *)mic_buf, spk_data_size / 2); -      spk_data_size = 0; -    } -  } -} - -//--------------------------------------------------------------------+ -// 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; -  start_ms += blink_interval_ms; - -  board_led_write(led_state); -  led_state = 1 - led_state; -} diff --git a/tinyusb/examples/device/uac2_headset/src/tusb_config.h b/tinyusb/examples/device/uac2_headset/src/tusb_config.h deleted file mode 100755 index e8d93f56..00000000 --- a/tinyusb/examples/device/uac2_headset/src/tusb_config.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2020 Ha Thach (tinyusb.org) - * Copyright (c) 2020 Jerzy Kasenberg - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -#include "usb_descriptors.h" - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -#error CFG_TUSB_MCU must be defined -#endif - -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX -#define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) -#else -#define CFG_TUSB_RHPORT0_MODE       OPT_MODE_DEVICE -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -#ifndef CFG_TUSB_DEBUG -// Can be set during compilation i.e.: make LOG=<value for CFG_TUSB_DEBUG> BOARD=<bsp> -// Keep in mind that enabling logs when data is streaming can disrupt data flow. -// It can be very helpful though when audio unit requests are tested/debugged. -#define CFG_TUSB_DEBUG              0 -#endif - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               0 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_AUDIO             1 -#define CFG_TUD_VENDOR            0 - -//-------------------------------------------------------------------- -// AUDIO CLASS DRIVER CONFIGURATION -//-------------------------------------------------------------------- - -#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN                                TUD_AUDIO_HEADSET_STEREO_DESC_LEN - -// How many formats are used, need to adjust USB descriptor if changed -#define CFG_TUD_AUDIO_FUNC_1_N_FORMATS                               2 - -// Audio format type I specifications -#if defined(__RX__) -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE                         48000     // 16bit/48kHz is the best quality for Renesas RX -#else -#define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE                         96000     // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this -#endif -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX                           1 -#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX                           2 - -// 16bit in 16bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX          2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX                  16 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX          2 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX                  16 - -#if defined(__RX__) -// 8bit in 8bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX          1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX                  8 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX          1 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX                  8 -#else -// 24bit in 32bit slots -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX          4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX                  24 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX          4 -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX                  24 -#endif - -// EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_IN                1 - -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN    TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) -#define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN    TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ      TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN)*2 -#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX         TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN) // Maximum EP IN size for all AS alternate settings used - -// EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense) -#define CFG_TUD_AUDIO_ENABLE_EP_OUT               1 - -#define CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT    TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) -#define CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT    TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX) - -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ     TU_MAX(CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT)*2 -#define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX        TU_MAX(CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT) // Maximum EP IN size for all AS alternate settings used - -// Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes) -#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT 	          2 - -// Size of control request buffer -#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ	64 - -#ifdef __cplusplus -} -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c b/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c deleted file mode 100755 index 4a26b0b1..00000000 --- a/tinyusb/examples/device/uac2_headset/src/usb_descriptors.c +++ /dev/null @@ -1,168 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Ha Thach (tinyusb.org) - * Copyright (c) 2020 Jerzy Kasenberg - * - * 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. - * - */ - -#include "tusb.h" -#include "usb_descriptors.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]     AUDIO | MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -    _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *)&desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -#define CONFIG_TOTAL_LEN    	(TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_HEADSET_STEREO_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -// 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -#define EPNUM_AUDIO_IN    0x03 -#define EPNUM_AUDIO_OUT   0x03 -#elif CFG_TUSB_MCU == OPT_MCU_NRF5X -// ISO endpoints for NRF5x are fixed to 0x08 (0x88) -#define EPNUM_AUDIO_IN    0x08 -#define EPNUM_AUDIO_OUT   0x08 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG  || CFG_TUSB_MCU ==  OPT_MCU_SAMX7X -// SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -//    e.g EP1 OUT & EP1 IN cannot exist together -#define EPNUM_AUDIO_IN    0x01 -#define EPNUM_AUDIO_OUT   0x02 -#else -#define EPNUM_AUDIO_IN    0x01 -#define EPNUM_AUDIO_OUT   0x01 -#endif - -uint8_t const desc_configuration[] = -{ -    // Interface count, string index, total length, attribute, power in mA -    TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -    // Interface number, string index, EP Out & EP In address, EP size -    TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2, EPNUM_AUDIO_OUT, EPNUM_AUDIO_IN | 0x80) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void)index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 },  // 0: is supported language is English (0x0409) -  "TinyUSB",                      // 1: Manufacturer -  "TinyUSB headset",              // 2: Product -  "000001",                       // 3: Serials, should use chip ID -  "TinyUSB Speakers",             // 4: Audio Interface -  "TinyUSB Microphone",           // 5: Audio Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void)langid; - -  uint8_t chr_count; - -  if (index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  } -  else -  { -    // Convert ASCII string into UTF-16 - -    if (!(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0]))) return NULL; - -    const char* str = string_desc_arr[index]; - -    // Cap at max char -    chr_count = strlen(str); -    if (chr_count > 31) chr_count = 31; - -    for (uint8_t i = 0; i < chr_count; i++) -    { -      _desc_str[1 + i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2 * chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h b/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h deleted file mode 100755 index d9510ea4..00000000 --- a/tinyusb/examples/device/uac2_headset/src/usb_descriptors.h +++ /dev/null @@ -1,155 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2020 Jerzy Kasenbreg - * - * 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. - * - */ - -#ifndef _USB_DESCRIPTORS_H_ -#define _USB_DESCRIPTORS_H_ - -// #include "tusb.h" - -// Unit numbers are arbitrary selected -#define UAC2_ENTITY_CLOCK               0x04 -// Speaker path -#define UAC2_ENTITY_SPK_INPUT_TERMINAL  0x01 -#define UAC2_ENTITY_SPK_FEATURE_UNIT    0x02 -#define UAC2_ENTITY_SPK_OUTPUT_TERMINAL 0x03 -// Microphone path -#define UAC2_ENTITY_MIC_INPUT_TERMINAL  0x11 -#define UAC2_ENTITY_MIC_OUTPUT_TERMINAL 0x13 - -enum -{ -  ITF_NUM_AUDIO_CONTROL = 0, -  ITF_NUM_AUDIO_STREAMING_SPK, -  ITF_NUM_AUDIO_STREAMING_MIC, -  ITF_NUM_TOTAL -}; - -#define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\ -    + TUD_AUDIO_DESC_STD_AC_LEN\ -    + TUD_AUDIO_DESC_CS_AC_LEN\ -    + TUD_AUDIO_DESC_CLK_SRC_LEN\ -    + TUD_AUDIO_DESC_INPUT_TERM_LEN\ -    + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\ -    + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ -    + TUD_AUDIO_DESC_INPUT_TERM_LEN\ -    + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\ -    /* Interface 1, Alternate 0 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    /* Interface 1, Alternate 0 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    + TUD_AUDIO_DESC_CS_AS_INT_LEN\ -    + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ -    + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ -    + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ -    /* Interface 1, Alternate 2 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    + TUD_AUDIO_DESC_CS_AS_INT_LEN\ -    + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ -    + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ -    + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ -    /* Interface 2, Alternate 0 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    /* Interface 2, Alternate 1 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    + TUD_AUDIO_DESC_CS_AS_INT_LEN\ -    + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ -    + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ -    + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\ -    /* Interface 2, Alternate 2 */\ -    + TUD_AUDIO_DESC_STD_AS_INT_LEN\ -    + TUD_AUDIO_DESC_CS_AS_INT_LEN\ -    + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\ -    + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\ -    + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN) - -#define TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(_stridx, _epout, _epin) \ -    /* Standard Interface Association Descriptor (IAD) */\ -    TUD_AUDIO_DESC_IAD(/*_firstitfs*/ ITF_NUM_AUDIO_CONTROL, /*_nitfs*/ ITF_NUM_TOTAL, /*_stridx*/ 0x00),\ -    /* Standard AC Interface Descriptor(4.7.1) */\ -    TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\ -    /* Class-Specific AC Interface Header Descriptor(4.7.2) */\ -    TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_HEADSET, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\ -    /* Clock Source Descriptor(4.7.2.1) */\ -    TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ UAC2_ENTITY_CLOCK, /*_attr*/ 3, /*_ctrl*/ 7, /*_assocTerm*/ 0x00,  /*_stridx*/ 0x00),    \ -    /* Input Terminal Descriptor(4.7.2.4) */\ -    TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x02, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ -    /* Feature Unit Descriptor(4.7.2.8) */\ -    TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL(/*_unitid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_srcid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrlch0master*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch1*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_ctrlch2*/ (AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), /*_stridx*/ 0x00),\ -    /* Output Terminal Descriptor(4.7.2.5) */\ -    TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_SPK_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_OUT_HEADPHONES, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_SPK_FEATURE_UNIT, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ -    /* Input Terminal Descriptor(4.7.2.4) */\ -    TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x00, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ 0 * (AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), /*_stridx*/ 0x00),\ -    /* Output Terminal Descriptor(4.7.2.5) */\ -    TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x00, /*_srcid*/ UAC2_ENTITY_MIC_INPUT_TERMINAL, /*_clkid*/ UAC2_ENTITY_CLOCK, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\ -    /* Standard AS Interface Descriptor(4.9.1) */\ -    /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x05),\ -    /* Standard AS Interface Descriptor(4.9.1) */\ -    /* Interface 1, Alternate 1 - alternate interface for data streaming */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ -    /* Class-Specific AS Interface Descriptor(4.9.2) */\ -    TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ -    /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ -    TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX),\ -    /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ -    TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ -    /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ -    TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ -    /* Interface 1, Alternate 2 - alternate interface for data streaming */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_SPK), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x05),\ -    /* Class-Specific AS Interface Descriptor(4.9.2) */\ -    TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_SPK_INPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ -    /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ -    TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX),\ -    /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ -    TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epout, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ADAPTIVE | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX), /*_interval*/ 0x01),\ -    /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ -    TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_MILLISEC, /*_lockdelay*/ 0x0001),\ -    /* Standard AS Interface Descriptor(4.9.1) */\ -    /* Interface 2, Alternate 0 - default alternate setting with 0 bandwidth */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x04),\ -    /* Standard AS Interface Descriptor(4.9.1) */\ -    /* Interface 2, Alternate 1 - alternate interface for data streaming */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ -    /* Class-Specific AS Interface Descriptor(4.9.2) */\ -    TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ -    /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ -    TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX),\ -    /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ -    TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ -    /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ -    TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000),\ -    /* Interface 2, Alternate 2 - alternate interface for data streaming */\ -    TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)(ITF_NUM_AUDIO_STREAMING_MIC), /*_altset*/ 0x02, /*_nEPs*/ 0x01, /*_stridx*/ 0x04),\ -    /* Class-Specific AS Interface Descriptor(4.9.2) */\ -    TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ UAC2_ENTITY_MIC_OUTPUT_TERMINAL, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\ -    /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\ -    TUD_AUDIO_DESC_TYPE_I_FORMAT(CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX),\ -    /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\ -    TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX), /*_interval*/ 0x01),\ -    /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\ -    TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000) - -#endif diff --git a/tinyusb/examples/device/usbtmc/CMakeLists.txt b/tinyusb/examples/device/usbtmc/CMakeLists.txt deleted file mode 100755 index c49603c2..00000000 --- a/tinyusb/examples/device/usbtmc/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/usbtmc_app.c -        ) - -# Example include -target_include_directories(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src -        ) - -# Configure compilation flags and libraries for the example... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/usbtmc/Makefile b/tinyusb/examples/device/usbtmc/Makefile deleted file mode 100755 index 69b633fe..00000000 --- a/tinyusb/examples/device/usbtmc/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/usbtmc/src/main.c b/tinyusb/examples/device/usbtmc/src/main.c deleted file mode 100755 index 1fce48f4..00000000 --- a/tinyusb/examples/device/usbtmc/src/main.c +++ /dev/null @@ -1,143 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" -#include "usbtmc_app.h" -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ - -/* Blink pattern - * - 250 ms  : device not mounted - * - 0 ms : device mounted - * - 2500 ms : device is suspended - */ -enum  { -  BLINK_NOT_MOUNTED = 250, -  BLINK_MOUNTED = 0, -  BLINK_SUSPENDED = 2500, -}; - -static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; - -void led_blinking_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    led_blinking_task(); -    usbtmc_app_task_iter(); -  } - -  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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// BLINKING TASK + Indicator pulse -//--------------------------------------------------------------------+ - - -volatile uint8_t doPulse = false; -// called from USB context -void led_indicator_pulse(void) { -	doPulse = true; -} - -void led_blinking_task(void) -{ -  static uint32_t start_ms = 0; -  static bool led_state = false; -  if(blink_interval_ms == BLINK_MOUNTED) // Mounted -  { -    if(doPulse) -    { -      led_state = true; -      board_led_write(true); -      start_ms = board_millis(); -      doPulse = false; -    } -    else if (led_state == true) -    { -      if ( board_millis() - start_ms < 750) //Spec says blink must be between 500 and 1000 ms. -      { -        return; // not enough time -      } -      led_state = false; -      board_led_write(false); -    } -  } -  else -  { -    // 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 -  } -} diff --git a/tinyusb/examples/device/usbtmc/src/main.h b/tinyusb/examples/device/usbtmc/src/main.h deleted file mode 100755 index 673247ec..00000000 --- a/tinyusb/examples/device/usbtmc/src/main.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef MAIN_H -#define MAIN_H -void led_indicator_pulse(void); - -#endif diff --git a/tinyusb/examples/device/usbtmc/src/tusb_config.h b/tinyusb/examples/device/usbtmc/src/tusb_config.h deleted file mode 100755 index a192d0db..00000000 --- a/tinyusb/examples/device/usbtmc/src/tusb_config.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * tusb_config.h - * - *  Created on: Sep 5, 2019 - *      Author: nconrad - */ - -#ifndef TUSB_CONFIG_H_ -#define TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// - -#define CFG_TUD_USBTMC                1 -#define CFG_TUD_USBTMC_ENABLE_INT_EP  1 -#define CFG_TUD_USBTMC_ENABLE_488     1 - -#ifdef __cplusplus - } -#endif - -#endif /* TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/usbtmc/src/usb_descriptors.c b/tinyusb/examples/device/usbtmc/src/usb_descriptors.c deleted file mode 100755 index 2336266b..00000000 --- a/tinyusb/examples/device/usbtmc/src/usb_descriptors.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "class/usbtmc/usbtmc.h" -#include "class/usbtmc/usbtmc_device.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]         HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0200, -    .bDeviceClass       = 0x00, -    .bDeviceSubClass    = 0x00, -    .bDeviceProtocol    = 0x00, - -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ - -#if defined(CFG_TUD_USBTMC) - -#  define TUD_USBTMC_DESC_MAIN(_itfnum,_bNumEndpoints) \ -     TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints,  /*_stridx = */ 4u, TUD_USBTMC_PROTOCOL_USB488), \ -     TUD_USBTMC_BULK_DESCRIPTORS(/* OUT = */0x01, /* IN = */ 0x81, /* packet size = */USBTMCD_MAX_PACKET_SIZE) - -#if CFG_TUD_USBTMC_ENABLE_INT_EP -// USBTMC Interrupt xfer always has length of 2, but we use epMaxSize=8 for -//  compatibility with mcus that only allow 8, 16, 32 or 64 for FS endpoints -#  define TUD_USBTMC_DESC(_itfnum) \ -     TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 3), \ -     TUD_USBTMC_INT_DESCRIPTOR(/* INT ep # */ 0x82, /* epMaxSize = */ 8, /* bInterval = */16u ) -#  define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN + TUD_USBTMC_INT_DESCRIPTOR_LEN) - -#else - -#  define TUD_USBTMC_DESC(_itfnum) \ -     TUD_USBTMC_DESC_MAIN(_itfnum, /* _epCount = */ 2u) -#  define TUD_USBTMC_DESC_LEN (TUD_USBTMC_IF_DESCRIPTOR_LEN + TUD_USBTMC_BULK_DESCRIPTORS_LEN) - -#endif /* CFG_TUD_USBTMC_ENABLE_INT_EP */ - -#else -#  define USBTMC_DESC_LEN (0) -#endif /* CFG_TUD_USBTMC */ - -enum -{ -  ITF_NUM_USBTMC, -  ITF_NUM_TOTAL -}; - - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_USBTMC_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -  // Note: since CDC EP ( 1 & 2), HID (4) are spot-on, thus we only need to force -  // endpoint number for MSC to 5 -  #define EPNUM_MSC   0x05 -#else -  #define EPNUM_MSC   0x03 -#endif - - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  TUD_USBTMC_DESC(ITF_NUM_USBTMC), -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB USBTMC",              // 4: USBTMC -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  size_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  } -  else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) { -      chr_count = 31; -    } - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (uint16_t)((((uint16_t)TUSB_DESC_STRING) << 8 ) | (2u*chr_count + 2u)); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/usbtmc/src/usbtmc_app.c b/tinyusb/examples/device/usbtmc/src/usbtmc_app.c deleted file mode 100755 index 8f87a6dc..00000000 --- a/tinyusb/examples/device/usbtmc/src/usbtmc_app.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Nathan Conrad - * - * 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. - * - */ - -#include <strings.h> -#include <stdlib.h>     /* atoi */ -#include "tusb.h" -#include "bsp/board.h" -#include "main.h" - -#if (CFG_TUD_USBTMC_ENABLE_488) -static usbtmc_response_capabilities_488_t const -#else -static usbtmc_response_capabilities_t const -#endif -tud_usbtmc_app_capabilities  = -{ -    .USBTMC_status = USBTMC_STATUS_SUCCESS, -    .bcdUSBTMC = USBTMC_VERSION, -    .bmIntfcCapabilities = -    { -        .listenOnly = 0, -        .talkOnly = 0, -        .supportsIndicatorPulse = 1 -    }, -    .bmDevCapabilities = { -        .canEndBulkInOnTermChar = 0 -    }, - -#if (CFG_TUD_USBTMC_ENABLE_488) -    .bcdUSB488 = USBTMC_488_VERSION, -    .bmIntfcCapabilities488 = -    { -        .supportsTrigger = 1, -        .supportsREN_GTL_LLO = 0, -        .is488_2 = 1 -    }, -    .bmDevCapabilities488 = -    { -      .SCPI = 1, -      .SR1 = 0, -      .RL1 = 0, -      .DT1 =0, -    } -#endif -}; - -#define IEEE4882_STB_QUESTIONABLE (0x08u) -#define IEEE4882_STB_MAV          (0x10u) -#define IEEE4882_STB_SER          (0x20u) -#define IEEE4882_STB_SRQ          (0x40u) - -static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n"; -//static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer and a bunch of other text to make it longer than a packet, perhaps? lets make it three transfers...\n"; -static volatile uint8_t status; - -// 0=not query, 1=queried, 2=delay,set(MAV), 3=delay 4=ready? -// (to simulate delay) -static volatile uint16_t queryState = 0; -static volatile uint32_t queryDelayStart; -static volatile uint32_t bulkInStarted; -static volatile uint32_t idnQuery; - -static uint32_t resp_delay = 125u; // Adjustable delay, to allow for better testing -static size_t buffer_len; -static size_t buffer_tx_ix; // for transmitting using multiple transfers -static uint8_t buffer[225]; // A few packets long should be enough. - - -static usbtmc_msg_dev_dep_msg_in_header_t rspMsg = { -    .bmTransferAttributes = -    { -      .EOM = 1, -      .UsingTermChar = 0 -    } -}; - -void tud_usbtmc_open_cb(uint8_t interface_id) -{ -  (void)interface_id; -  tud_usbtmc_start_bus_read(); -} - -#if (CFG_TUD_USBTMC_ENABLE_488) -usbtmc_response_capabilities_488_t const * -#else -usbtmc_response_capabilities_t const * -#endif -tud_usbtmc_get_capabilities_cb() -{ -  return &tud_usbtmc_app_capabilities; -} - - -bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg) { -  (void)msg; -  // Let trigger set the SRQ -  status |= IEEE4882_STB_SRQ; -  return true; -} - -bool tud_usbtmc_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader) -{ -  (void)msgHeader; -  buffer_len = 0; -  if(msgHeader->TransferSize > sizeof(buffer)) -  { - -    return false; -  } -  return true; -} - -bool tud_usbtmc_msg_data_cb(void *data, size_t len, bool transfer_complete) -{ -  // If transfer isn't finished, we just ignore it (for now) - -  if(len + buffer_len < sizeof(buffer)) -  { -    memcpy(&(buffer[buffer_len]), data, len); -    buffer_len += len; -  } -  else -  { -    return false; // buffer overflow! -  } -  queryState = transfer_complete; -  idnQuery = 0; - -  if(transfer_complete && (len >=4) && !strncasecmp("*idn?",data,4)) -  { -    idnQuery = 1; -  } -  if(transfer_complete && !strncasecmp("delay ",data,5)) -  { -    queryState = 0; -    int d = atoi((char*)data + 5); -    if(d > 10000) -      d = 10000; -    if(d<0) -      d=0; -    resp_delay = (uint32_t)d; -  } -  tud_usbtmc_start_bus_read(); -  return true; -} - -bool tud_usbtmc_msgBulkIn_complete_cb() -{ -  if((buffer_tx_ix == buffer_len) || idnQuery) // done -  { -    status &= (uint8_t)~(IEEE4882_STB_MAV); // clear MAV -    queryState = 0; -    bulkInStarted = 0; -    buffer_tx_ix = 0; -  } -  tud_usbtmc_start_bus_read(); - -  return true; -} - -static unsigned int msgReqLen; - -bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const * request) -{ -  rspMsg.header.MsgID = request->header.MsgID, -  rspMsg.header.bTag = request->header.bTag, -  rspMsg.header.bTagInverse = request->header.bTagInverse; -  msgReqLen = request->TransferSize; - -#ifdef xDEBUG -  uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n"); -#endif -  if(queryState == 0 || (buffer_tx_ix == 0)) -  { -    TU_ASSERT(bulkInStarted == 0); -    bulkInStarted = 1; - -    // > If a USBTMC interface receives a Bulk-IN request prior to receiving a USBTMC command message -    //   that expects a response, the device must NAK the request (*not stall*) -  } -  else -  { -    size_t txlen = tu_min32(buffer_len-buffer_tx_ix,msgReqLen); -    tud_usbtmc_transmit_dev_msg_data(&buffer[buffer_tx_ix], txlen, -        (buffer_tx_ix+txlen) == buffer_len, false); -    buffer_tx_ix += txlen; -  } -  // Always return true indicating not to stall the EP. -  return true; -} - -void usbtmc_app_task_iter(void) { -  switch(queryState) { -  case 0: -    break; -  case 1: -    queryDelayStart = board_millis(); -    queryState = 2; -    break; -  case 2: -    if( (board_millis() - queryDelayStart) > resp_delay) { -      queryDelayStart = board_millis(); -      queryState=3; -      status |= 0x10u; // MAV -      status |= 0x40u; // SRQ -    } -    break; -  case 3: -    if( (board_millis() - queryDelayStart) > resp_delay) { -      queryState = 4; -    } -    break; -  case 4: // time to transmit; -    if(bulkInStarted && (buffer_tx_ix == 0)) { -      if(idnQuery) -      { -        tud_usbtmc_transmit_dev_msg_data(idn,  tu_min32(sizeof(idn)-1,msgReqLen),true,false); -        queryState = 0; -        bulkInStarted = 0; -      } -      else -      { -        buffer_tx_ix = tu_min32(buffer_len,msgReqLen); -        tud_usbtmc_transmit_dev_msg_data(buffer, buffer_tx_ix, buffer_tx_ix == buffer_len, false); -      } -      // MAV is cleared in the transfer complete callback. -    } -    break; -  default: -    TU_ASSERT(false,); -    return; -  } -} - -bool tud_usbtmc_initiate_clear_cb(uint8_t *tmcResult) -{ -  *tmcResult = USBTMC_STATUS_SUCCESS; -  queryState = 0; -  bulkInStarted = false; -  status = 0; -  return true; -} - -bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t *rsp) -{ -  queryState = 0; -  bulkInStarted = false; -  status = 0; -  buffer_tx_ix = 0u; -  buffer_len = 0u; -  rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; -  rsp->bmClear.BulkInFifoBytes = 0u; -  return true; -} -bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t *tmcResult) -{ -  bulkInStarted = 0; -  *tmcResult = USBTMC_STATUS_SUCCESS; -  return true; -} -bool tud_usbtmc_check_abort_bulk_in_cb(usbtmc_check_abort_bulk_rsp_t *rsp) -{ -  (void)rsp; -  tud_usbtmc_start_bus_read(); -  return true; -} - -bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t *tmcResult) -{ -  *tmcResult = USBTMC_STATUS_SUCCESS; -  return true; - -} -bool tud_usbtmc_check_abort_bulk_out_cb(usbtmc_check_abort_bulk_rsp_t *rsp) -{ -  (void)rsp; -  tud_usbtmc_start_bus_read(); -  return true; -} - -void tud_usbtmc_bulkIn_clearFeature_cb(void) -{ -} -void tud_usbtmc_bulkOut_clearFeature_cb(void) -{ -  tud_usbtmc_start_bus_read(); -} - -// Return status byte, but put the transfer result status code in the rspResult argument. -uint8_t tud_usbtmc_get_stb_cb(uint8_t *tmcResult) -{ -  uint8_t old_status = status; -  status = (uint8_t)(status & ~(IEEE4882_STB_SRQ)); // clear SRQ - -  *tmcResult = USBTMC_STATUS_SUCCESS; -  // Increment status so that we see different results on each read... - -  return old_status; -} - -bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const * msg, uint8_t *tmcResult) -{ -  (void)msg; -  led_indicator_pulse(); -  *tmcResult = USBTMC_STATUS_SUCCESS; -  return true; -} diff --git a/tinyusb/examples/device/usbtmc/src/usbtmc_app.h b/tinyusb/examples/device/usbtmc/src/usbtmc_app.h deleted file mode 100755 index 4de30c2b..00000000 --- a/tinyusb/examples/device/usbtmc/src/usbtmc_app.h +++ /dev/null @@ -1,7 +0,0 @@ - -#ifndef USBTMC_APP_H -#define USBTMC_APP_H - -void usbtmc_app_task_iter(void); - -#endif diff --git a/tinyusb/examples/device/usbtmc/visaQuery.py b/tinyusb/examples/device/usbtmc/visaQuery.py deleted file mode 100755 index 50a765a0..00000000 --- a/tinyusb/examples/device/usbtmc/visaQuery.py +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env python3 - -import visa -import time -import sys - - -def test_idn(): -	idn = inst.query("*idn?"); -	assert (idn == "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n") -	assert (inst.is_4882_compliant) - -def test_echo(m,n): -	longstr = "0123456789abcdefghijklmnopqrstuvwxyz" * 50 -	t0 = time.monotonic() - -	#Next try echo from 1 to 175 characters (200 is max buffer size on DUT) -	for i in range(m,n): -		#print(i) -		x = longstr[0:i] -		xt = x + inst.write_termination -		y = inst.query(x) -		#print(x) -		#print (":".join("{:02x}".format(ord(c)) for c in xt)) -		#print (":".join("{:02x}".format(ord(c)) for c in y)) -		assert(xt == y), f"failed i={i}" -		#inst.read_stb();# Just to make USB logging easier by sending a control query (bad thing is that this made things slow) -	t = time.monotonic() - t0 -	print(f"  elapsed: {t:0.3} sec") - -def test_trig(): -	# clear SRQ -	inst.read_stb() -	assert (inst.read_stb() == 0) -	inst.assert_trigger() -	time.sleep(0.3) # SRQ may have some delay -	assert (inst.read_stb() & 0x40), "SRQ not set after 0.3 seconds" -	assert (inst.read_stb() == 0) -	 -	 -def test_mav(): -	inst.write("delay 50") -	inst.read_stb() # clear STB -	assert (inst.read_stb() == 0) -	inst.write("123") -	time.sleep(0.3) -	assert (inst.read_stb() & 0x10), "MAV not set after 0.5 seconds" -	 -	rsp = inst.read() -	assert(rsp == "123\r\n") -	 -	 -def test_srq(): -	assert (inst.read_stb() == 0) -	inst.write("123") -	 -	#inst.enable_event(visa.constants.VI_EVENT_SERVICE_REQ, visa.constants.VI_QUEUE) -	#waitrsp = inst.wait_on_event(visa.constants.VI_EVENT_SERVICE_REQ, 5000) -	#inst.discard_events(visa.constants.VI_EVENT_SERVICE_REQ, visa.constants.VI_QUEUE) -	#inst.wait_for_srq() -	time.sleep(0.3) -	stb = inst.read_stb() -	msg =  "SRQ not set after 0.5 seconds, was {:02x}".format(stb) -	assert (stb == 0x50),msg - -	assert (inst.read_stb() == 0x10), "SRQ set at second read!" -	 -	rsp = inst.read() -	assert(rsp == "123\r\n") - -def test_read_timeout(): -	inst.timeout = 500 -	# First read with no MAV -	inst.read_stb() -	assert (inst.read_stb() == 0) -	inst.write("delay 500") -	t0 = time.monotonic() -	try: -		rsp = inst.read() -		assert(false), "Read should have resulted in timeout" -	except visa.VisaIOError: -		print("  Got expected exception") -	t = time.monotonic() - t0 -	assert ((t*1000.0) > (inst.timeout - 300)) -	assert ((t*1000.0) < (inst.timeout + 300)) -	print(f"Delay was {t:0.3}") -	# Response is still in queue, so send a clear (to be more helpful to the next test) -	inst.clear() -	time.sleep(0.3) -	assert(0 ==  (inst.read_stb() & 0x10)), "MAV not reset after clear" - -def test_abort_in(): -	inst.timeout = 200 -	# First read with no MAV -	inst.read_stb() -	assert (inst.read_stb() == 0) -	inst.write("delay 500") -	inst.write("xxx") -	t0 = time.monotonic() -	try: -		rsp = inst.read() -		assert(false), "Read should have resulted in timeout" -	except visa.VisaIOError: -		print("  Got expected exception") -	t = time.monotonic() - t0 -	assert ((t*1000.0) > (inst.timeout - 300)) -	assert ((t*1000.0) < (inst.timeout + 300)) -	print(f"  Delay was {t:0.3}") -	# Response is still in queue, so send a clear (to be more helpful to the next test) -	inst.timeout = 800 -	y = inst.read() -	assert(y == "xxx\r\n") -	 -def test_indicate(): -	# perform indicator pulse -	usb_iface = inst.get_visa_attribute(visa.constants.VI_ATTR_USB_INTFC_NUM) -	retv = inst.control_in(request_type_bitmap_field=0xA1, request_id=64, request_value=0x0000, index=usb_iface, length=0x0001) -	assert((retv[1] == visa.constants.StatusCode(0)) and (retv[0] == b'\x01')), f"indicator pulse failed: retv={retv}" -	 -	 -def test_multi_read(): -	old_chunk_size = inst.chunk_size -	longstr = "0123456789abcdefghijklmnopqrstuvwxyz" * 10 -	timeout = 10 -	x = longstr[0:174] -	inst.chunk_size = 50 # Seems chunk size only applies to read but not write -	inst.write(x) -	# I'm not sure how to request just the remaining bit using a max count... so just read it all. -	y = inst.read() -	assert (x + "\r\n" == y) -	#inst.chunk_size = old_chunk_size -	 -def test_stall_ep0(): -	usb_iface = inst.get_visa_attribute(visa.constants.VI_ATTR_USB_INTFC_NUM) -	inst.read_stb() -	# This is an invalid request, should create stall. -	try: -		retv = inst.control_in(request_type_bitmap_field=0xA1, request_id=60, request_value=0x0000, index=usb_iface, length=0x0001) -		assert false -	except visa.VisaIOError: -		pass -	 -	assert (inst.read_stb() == 0) - - -rm = visa.ResourceManager() -reslist = rm.list_resources("USB?::?*::INSTR") -print(reslist) - -if (len(reslist) == 0): -    sys.exit() -	 -inst = rm.open_resource(reslist[0]); -inst.timeout = 3000 - -inst.clear() - -print("+ IDN") -test_idn() - -print("+test abort in") -test_abort_in() - - -inst.timeout = 2000 - -print("+ multi read") -test_multi_read() - - -print("+ echo delay=0") -inst.write("delay 0") -test_echo(1,175) - -print("+ echo delay=2") -inst.write("delay 2") -test_echo(1,175) - -print("+ echo delay=150") -inst.write("delay 150") -test_echo(53,76) -test_echo(165,170) - -print("+ Read timeout (no MAV)") -test_read_timeout() - -print("+ Test EP0 stall recovery") -test_stall_ep0() - -print("+ MAV") -test_mav() - -print("+ SRQ") -test_srq() - -print("+ indicate") -test_indicate() - -print("+ TRIG") -test_trig() - -# Untested: -#  abort bulk out -#  LLO, GTL, etc -#  Throughput rate? -#  Transmitting a message using multiple transfers - -inst.close() -print("Test complete") diff --git a/tinyusb/examples/device/webusb_serial/CMakeLists.txt b/tinyusb/examples/device/webusb_serial/CMakeLists.txt deleted file mode 100755 index abc4d91d..00000000 --- a/tinyusb/examples/device/webusb_serial/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -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... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_device_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/device/webusb_serial/Makefile b/tinyusb/examples/device/webusb_serial/Makefile deleted file mode 100755 index 5a455078..00000000 --- a/tinyusb/examples/device/webusb_serial/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -  src \ -  $(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -include ../../rules.mk diff --git a/tinyusb/examples/device/webusb_serial/src/main.c b/tinyusb/examples/device/webusb_serial/src/main.c deleted file mode 100755 index aba4aedf..00000000 --- a/tinyusb/examples/device/webusb_serial/src/main.c +++ /dev/null @@ -1,300 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -/* This example demonstrates WebUSB as web serial with browser with WebUSB support (e.g Chrome). - * After enumerated successfully, browser will pop-up notification - * with URL to landing page, click on it to test - *  - Click "Connect" and select device, When connected the on-board LED will litted up. - *  - Any charters received from either webusb/Serial will be echo back to webusb and Serial - * - * Note: - * - The WebUSB landing page notification is currently disabled in Chrome - * on Windows due to Chromium issue 656702 (https://crbug.com/656702). You have to - * go to landing page (below) to test - * - * - On Windows 7 and prior: You need to use Zadig tool to manually bind the - * WebUSB interface with the WinUSB driver for Chrome to access. From windows 8 and 10, this - * is done automatically by firmware. - * - * - On Linux/macOS, udev permission may need to be updated by - *   - copying '/examples/device/99-tinyusb.rules' file to /etc/udev/rules.d/ then - *   - run 'sudo udevadm control --reload-rules && sudo udevadm trigger' - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.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, - -  BLINK_ALWAYS_ON   = UINT32_MAX, -  BLINK_ALWAYS_OFF  = 0 -}; - -static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED; - -#define URL  "example.tinyusb.org/webusb-serial/" - -const tusb_desc_webusb_url_t desc_url = -{ -  .bLength         = 3 + sizeof(URL) - 1, -  .bDescriptorType = 3, // WEBUSB URL type -  .bScheme         = 1, // 0: http, 1: https -  .url             = URL -}; - -static bool web_serial_connected = false; - -//------------- prototypes -------------// -void led_blinking_task(void); -void cdc_task(void); -void webserial_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  tusb_init(); - -  while (1) -  { -    tud_task(); // tinyusb device task -    cdc_task(); -    webserial_task(); -    led_blinking_task(); -  } - -  return 0; -} - -// send characters to both CDC and WebUSB -void echo_all(uint8_t buf[], uint32_t count) -{ -  // echo to web serial -  if ( web_serial_connected ) -  { -    tud_vendor_write(buf, count); -  } - -  // echo to cdc -  if ( tud_cdc_connected() ) -  { -    for(uint32_t i=0; i<count; i++) -    { -      tud_cdc_write_char(buf[i]); - -      if ( buf[i] == '\r' ) tud_cdc_write_char('\n'); -    } -    tud_cdc_write_flush(); -  } -} - -//--------------------------------------------------------------------+ -// 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 = BLINK_MOUNTED; -} - -//--------------------------------------------------------------------+ -// WebUSB use vendor class -//--------------------------------------------------------------------+ - -// Invoked when a control transfer occurred on an interface of this class -// Driver response accordingly to the request and the transfer stage (setup/data/ack) -// return false to stall control endpoint (e.g unsupported request) -bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) -{ -  // nothing to with DATA & ACK stage -  if (stage != CONTROL_STAGE_SETUP) return true; - -  switch (request->bmRequestType_bit.type) -  { -    case TUSB_REQ_TYPE_VENDOR: -      switch (request->bRequest) -      { -        case VENDOR_REQUEST_WEBUSB: -          // match vendor request in BOS descriptor -          // Get landing page url -          return tud_control_xfer(rhport, request, (void*) &desc_url, desc_url.bLength); - -        case VENDOR_REQUEST_MICROSOFT: -          if ( request->wIndex == 7 ) -          { -            // Get Microsoft OS 2.0 compatible descriptor -            uint16_t total_len; -            memcpy(&total_len, desc_ms_os_20+8, 2); - -            return tud_control_xfer(rhport, request, (void*) desc_ms_os_20, total_len); -          }else -          { -            return false; -          } - -        default: break; -      } -    break; - -    case TUSB_REQ_TYPE_CLASS: -      if (request->bRequest == 0x22) -      { -        // Webserial simulate the CDC_REQUEST_SET_CONTROL_LINE_STATE (0x22) to connect and disconnect. -        web_serial_connected = (request->wValue != 0); - -        // Always lit LED if connected -        if ( web_serial_connected ) -        { -          board_led_write(true); -          blink_interval_ms = BLINK_ALWAYS_ON; - -          tud_vendor_write_str("\r\nTinyUSB WebUSB device example\r\n"); -        }else -        { -          blink_interval_ms = BLINK_MOUNTED; -        } - -        // response with status OK -        return tud_control_status(rhport, request); -      } -    break; - -    default: break; -  } - -  // stall unknown request -  return false; -} - -void webserial_task(void) -{ -  if ( web_serial_connected ) -  { -    if ( tud_vendor_available() ) -    { -      uint8_t buf[64]; -      uint32_t count = tud_vendor_read(buf, sizeof(buf)); - -      // echo back to both web serial and cdc -      echo_all(buf, count); -    } -  } -} - - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -void cdc_task(void) -{ -  if ( tud_cdc_connected() ) -  { -    // connected and there are data available -    if ( tud_cdc_available() ) -    { -      uint8_t buf[64]; - -      uint32_t count = tud_cdc_read(buf, sizeof(buf)); - -      // echo back to both web serial and cdc -      echo_all(buf, count); -    } -  } -} - -// Invoked when cdc when line state changed e.g connected/disconnected -void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) -{ -  (void) itf; - -  // connected -  if ( dtr && rts ) -  { -    // print initial message when connected -    tud_cdc_write_str("\r\nTinyUSB WebUSB device example\r\n"); -  } -} - -// Invoked when CDC interface received data from host -void tud_cdc_rx_cb(uint8_t itf) -{ -  (void) itf; -} - -//--------------------------------------------------------------------+ -// 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 -} diff --git a/tinyusb/examples/device/webusb_serial/src/tusb_config.h b/tinyusb/examples/device/webusb_serial/src/tusb_config.h deleted file mode 100755 index 26b81b38..00000000 --- a/tinyusb/examples/device/webusb_serial/src/tusb_config.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by board.mk -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -// RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM -  #define BOARD_DEVICE_RHPORT_NUM     0 -#endif - -// RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED -  #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ -       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56) -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED -  #else -    #define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED -  #endif -#endif - -// Device mode with rhport and speed defined by board.mk -#if   BOARD_DEVICE_RHPORT_NUM == 0 -  #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 -  #define CFG_TUSB_RHPORT1_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else -  #error "Incorrect RHPort configuration" -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS               OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// DEVICE CONFIGURATION -//-------------------------------------------------------------------- - -#ifndef CFG_TUD_ENDPOINT0_SIZE -#define CFG_TUD_ENDPOINT0_SIZE    64 -#endif - -//------------- CLASS -------------// -#define CFG_TUD_CDC               1 -#define CFG_TUD_MSC               0 -#define CFG_TUD_HID               0 -#define CFG_TUD_MIDI              0 -#define CFG_TUD_VENDOR            1 - -// CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE    (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_CDC_TX_BUFSIZE    (TUD_OPT_HIGH_SPEED ? 512 : 64) - -// Vendor FIFO size of TX and RX -// If not configured vendor endpoints will not be buffered -#define CFG_TUD_VENDOR_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) -#define CFG_TUD_VENDOR_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) - - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c b/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c deleted file mode 100755 index d1539488..00000000 --- a/tinyusb/examples/device/webusb_serial/src/usb_descriptors.c +++ /dev/null @@ -1,252 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" -#include "usb_descriptors.h" - -/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug. - * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC. - * - * Auto ProductID layout's Bitmap: - *   [MSB]       MIDI | HID | MSC | CDC          [LSB] - */ -#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) ) -#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ -                           _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) ) - -//--------------------------------------------------------------------+ -// Device Descriptors -//--------------------------------------------------------------------+ -tusb_desc_device_t const desc_device = -{ -    .bLength            = sizeof(tusb_desc_device_t), -    .bDescriptorType    = TUSB_DESC_DEVICE, -    .bcdUSB             = 0x0210, // at least 2.1 or 3.x for BOS & webUSB - -    // Use Interface Association Descriptor (IAD) for CDC -    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) -    .bDeviceClass       = TUSB_CLASS_MISC, -    .bDeviceSubClass    = MISC_SUBCLASS_COMMON, -    .bDeviceProtocol    = MISC_PROTOCOL_IAD, -    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE, - -    .idVendor           = 0xCafe, -    .idProduct          = USB_PID, -    .bcdDevice          = 0x0100, - -    .iManufacturer      = 0x01, -    .iProduct           = 0x02, -    .iSerialNumber      = 0x03, - -    .bNumConfigurations = 0x01 -}; - -// Invoked when received GET DEVICE DESCRIPTOR -// Application return pointer to descriptor -uint8_t const * tud_descriptor_device_cb(void) -{ -  return (uint8_t const *) &desc_device; -} - -//--------------------------------------------------------------------+ -// Configuration Descriptor -//--------------------------------------------------------------------+ -enum -{ -  ITF_NUM_CDC = 0, -  ITF_NUM_CDC_DATA, -  ITF_NUM_VENDOR, -  ITF_NUM_TOTAL -}; - -#define CONFIG_TOTAL_LEN    (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_VENDOR_DESC_LEN) - -#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX -  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number -  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ... -  #define EPNUM_CDC_IN     2 -  #define EPNUM_CDC_OUT    2 -  #define EPNUM_VENDOR_IN  5 -  #define EPNUM_VENDOR_OUT 5 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU ==  OPT_MCU_SAMX7X -  // SAMG & SAME70 don't support a same endpoint number with different direction IN and OUT -  //    e.g EP1 OUT & EP1 IN cannot exist together -  #define EPNUM_CDC_IN     2 -  #define EPNUM_CDC_OUT    3 -  #define EPNUM_VENDOR_IN  4 -  #define EPNUM_VENDOR_OUT 5 -#else -  #define EPNUM_CDC_IN     2 -  #define EPNUM_CDC_OUT    2 -  #define EPNUM_VENDOR_IN  3 -  #define EPNUM_VENDOR_OUT 3 -#endif - -uint8_t const desc_configuration[] = -{ -  // Config number, interface count, string index, total length, attribute, power in mA -  TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), - -  // Interface number, string index, EP notification address and size, EP data address (out, in) and size. -  TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, 0x81, 8, EPNUM_CDC_OUT, 0x80 | EPNUM_CDC_IN, TUD_OPT_HIGH_SPEED ? 512 : 64), - -  // Interface number, string index, EP Out & IN address, EP size -  TUD_VENDOR_DESCRIPTOR(ITF_NUM_VENDOR, 5, EPNUM_VENDOR_OUT, 0x80 | EPNUM_VENDOR_IN, TUD_OPT_HIGH_SPEED ? 512 : 64) -}; - -// Invoked when received GET CONFIGURATION DESCRIPTOR -// Application return pointer to descriptor -// Descriptor contents must exist long enough for transfer to complete -uint8_t const * tud_descriptor_configuration_cb(uint8_t index) -{ -  (void) index; // for multiple configurations -  return desc_configuration; -} - -//--------------------------------------------------------------------+ -// BOS Descriptor -//--------------------------------------------------------------------+ - -/* Microsoft OS 2.0 registry property descriptor -Per MS requirements https://msdn.microsoft.com/en-us/library/windows/hardware/hh450799(v=vs.85).aspx -device should create DeviceInterfaceGUIDs. It can be done by driver and -in case of real PnP solution device should expose MS "Microsoft OS 2.0 -registry property descriptor". Such descriptor can insert any record -into Windows registry per device/configuration/interface. In our case it -will insert "DeviceInterfaceGUIDs" multistring property. - -GUID is freshly generated and should be OK to use. - -https://developers.google.com/web/fundamentals/native-hardware/build-for-webusb/ -(Section Microsoft OS compatibility descriptors) -*/ - -#define BOS_TOTAL_LEN      (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN + TUD_BOS_MICROSOFT_OS_DESC_LEN) - -#define MS_OS_20_DESC_LEN  0xB2 - -// BOS Descriptor is required for webUSB -uint8_t const desc_bos[] = -{ -  // total length, number of device caps -  TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 2), - -  // Vendor Code, iLandingPage -  TUD_BOS_WEBUSB_DESCRIPTOR(VENDOR_REQUEST_WEBUSB, 1), - -  // Microsoft OS 2.0 descriptor -  TUD_BOS_MS_OS_20_DESCRIPTOR(MS_OS_20_DESC_LEN, VENDOR_REQUEST_MICROSOFT) -}; - -uint8_t const * tud_descriptor_bos_cb(void) -{ -  return desc_bos; -} - - -uint8_t const desc_ms_os_20[] = -{ -  // Set header: length, type, windows version, total length -  U16_TO_U8S_LE(0x000A), U16_TO_U8S_LE(MS_OS_20_SET_HEADER_DESCRIPTOR), U32_TO_U8S_LE(0x06030000), U16_TO_U8S_LE(MS_OS_20_DESC_LEN), - -  // Configuration subset header: length, type, configuration index, reserved, configuration total length -  U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_CONFIGURATION), 0, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A), - -  // Function Subset header: length, type, first interface, reserved, subset length -  U16_TO_U8S_LE(0x0008), U16_TO_U8S_LE(MS_OS_20_SUBSET_HEADER_FUNCTION), ITF_NUM_VENDOR, 0, U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08), - -  // MS OS 2.0 Compatible ID descriptor: length, type, compatible ID, sub compatible ID -  U16_TO_U8S_LE(0x0014), U16_TO_U8S_LE(MS_OS_20_FEATURE_COMPATBLE_ID), 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sub-compatible - -  // MS OS 2.0 Registry property descriptor: length, type -  U16_TO_U8S_LE(MS_OS_20_DESC_LEN-0x0A-0x08-0x08-0x14), U16_TO_U8S_LE(MS_OS_20_FEATURE_REG_PROPERTY), -  U16_TO_U8S_LE(0x0007), U16_TO_U8S_LE(0x002A), // wPropertyDataType, wPropertyNameLength and PropertyName "DeviceInterfaceGUIDs\0" in UTF-16 -  'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, -  'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, 'D', 0x00, 's', 0x00, 0x00, 0x00, -  U16_TO_U8S_LE(0x0050), // wPropertyDataLength -	//bPropertyData: “{975F44D9-0D08-43FD-8B3E-127CA8AFFF9D}”. -  '{', 0x00, '9', 0x00, '7', 0x00, '5', 0x00, 'F', 0x00, '4', 0x00, '4', 0x00, 'D', 0x00, '9', 0x00, '-', 0x00, -  '0', 0x00, 'D', 0x00, '0', 0x00, '8', 0x00, '-', 0x00, '4', 0x00, '3', 0x00, 'F', 0x00, 'D', 0x00, '-', 0x00, -  '8', 0x00, 'B', 0x00, '3', 0x00, 'E', 0x00, '-', 0x00, '1', 0x00, '2', 0x00, '7', 0x00, 'C', 0x00, 'A', 0x00, -  '8', 0x00, 'A', 0x00, 'F', 0x00, 'F', 0x00, 'F', 0x00, '9', 0x00, 'D', 0x00, '}', 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -TU_VERIFY_STATIC(sizeof(desc_ms_os_20) == MS_OS_20_DESC_LEN, "Incorrect size"); - -//--------------------------------------------------------------------+ -// String Descriptors -//--------------------------------------------------------------------+ - -// array of pointer to string descriptors -char const* string_desc_arr [] = -{ -  (const char[]) { 0x09, 0x04 }, // 0: is supported language is English (0x0409) -  "TinyUSB",                     // 1: Manufacturer -  "TinyUSB Device",              // 2: Product -  "123456",                      // 3: Serials, should use chip ID -  "TinyUSB CDC",                 // 4: CDC Interface -  "TinyUSB WebUSB"               // 5: Vendor Interface -}; - -static uint16_t _desc_str[32]; - -// Invoked when received GET STRING DESCRIPTOR request -// 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) -{ -  (void) langid; - -  uint8_t chr_count; - -  if ( index == 0) -  { -    memcpy(&_desc_str[1], string_desc_arr[0], 2); -    chr_count = 1; -  }else -  { -    // 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 -    chr_count = strlen(str); -    if ( chr_count > 31 ) chr_count = 31; - -    // Convert ASCII string into UTF-16 -    for(uint8_t i=0; i<chr_count; i++) -    { -      _desc_str[1+i] = str[i]; -    } -  } - -  // first byte is length (including header), second byte is string type -  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2); - -  return _desc_str; -} diff --git a/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h b/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h deleted file mode 100755 index 19f1ff3f..00000000 --- a/tinyusb/examples/device/webusb_serial/src/usb_descriptors.h +++ /dev/null @@ -1,36 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - */ - -#ifndef USB_DESCRIPTORS_H_ -#define USB_DESCRIPTORS_H_ - -enum -{ -  VENDOR_REQUEST_WEBUSB = 1, -  VENDOR_REQUEST_MICROSOFT = 2 -}; - -extern uint8_t const desc_ms_os_20[]; - -#endif /* USB_DESCRIPTORS_H_ */ diff --git a/tinyusb/examples/host/CMakeLists.txt b/tinyusb/examples/host/CMakeLists.txt deleted file mode 100755 index f185ac4f..00000000 --- a/tinyusb/examples/host/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/family_support.cmake) - -project(tinyusb_host_examples) -family_initialize_project(tinyusb_host_examples ${CMAKE_CURRENT_LIST_DIR}) - -# family_add_subdirectory will filter what to actually add based on selected FAMILY -family_add_subdirectory(cdc_msc_hid) diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC175X_6X b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC175X_6X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC175X_6X +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC177X_8X b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC177X_8X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC177X_8X +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC18XX b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC18XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC18XX +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC40XX b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC40XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC40XX +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC43XX b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC43XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_LPC43XX +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_MIMXRT10XX b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_MIMXRT10XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_MIMXRT10XX +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_RP2040 b/tinyusb/examples/host/cdc_msc_hid/.only.MCU_RP2040 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/.only.MCU_RP2040 +++ /dev/null diff --git a/tinyusb/examples/host/cdc_msc_hid/CMakeLists.txt b/tinyusb/examples/host/cdc_msc_hid/CMakeLists.txt deleted file mode 100755 index 0a99bc3a..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_app.c -        ) - -# Example include -target_include_directories(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src -        ) - -# Configure compilation flags and libraries for the example... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_host_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/host/cdc_msc_hid/Makefile b/tinyusb/examples/host/cdc_msc_hid/Makefile deleted file mode 100755 index 6a2b4d90..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += $(wildcard src/*.c) -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -CFLAGS += -Wno-error=cast-align - -# TinyUSB Host Stack source -SRC_C += \ -	src/class/cdc/cdc_host.c \ -	src/class/hid/hid_host.c \ -	src/class/msc/msc_host.c \ -	src/host/hub.c \ -	src/host/usbh.c \ -	src/host/usbh_control.c \ -	src/portable/ehci/ehci.c \ -	src/portable/ohci/ohci.c \ -	src/portable/nxp/transdimension/hcd_transdimension.c \ -	src/portable/nxp/lpc17_40/hcd_lpc17_40.c - -include ../../rules.mk diff --git a/tinyusb/examples/host/cdc_msc_hid/src/hid_app.c b/tinyusb/examples/host/cdc_msc_hid/src/hid_app.c deleted file mode 100755 index 11437c2b..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/src/hid_app.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2021, Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO TYPEDEF CONSTANT ENUM DECLARATION -//--------------------------------------------------------------------+ - -// If your host terminal support ansi escape code such as TeraTerm -// it can be use to simulate mouse cursor movement within terminal -#define USE_ANSI_ESCAPE   0 - -#define MAX_REPORT  4 - -static uint8_t const keycode2ascii[128][2] =  { HID_KEYCODE_TO_ASCII }; - -// Each HID instance can has multiple reports -static struct -{ -  uint8_t report_count; -  tuh_hid_report_info_t report_info[MAX_REPORT]; -}hid_info[CFG_TUH_HID]; - -static void process_kbd_report(hid_keyboard_report_t const *report); -static void process_mouse_report(hid_mouse_report_t const * report); -static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len); - -void hid_app_task(void) -{ -  // nothing to do -} - -//--------------------------------------------------------------------+ -// TinyUSB Callbacks -//--------------------------------------------------------------------+ - -// Invoked when device with hid interface is mounted -// Report descriptor is also available for use. tuh_hid_parse_report_descriptor() -// can be used to parse common/simple enough descriptor. -// Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped -// therefore report_desc = NULL, desc_len = 0 -void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_report, uint16_t desc_len) -{ -  printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance); - -  // Interface protocol (hid_interface_protocol_enum_t) -  const char* protocol_str[] = { "None", "Keyboard", "Mouse" }; -  uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); - -  printf("HID Interface Protocol = %s\r\n", protocol_str[itf_protocol]); - -  // By default host stack will use activate boot protocol on supported interface. -  // Therefore for this simple example, we only need to parse generic report descriptor (with built-in parser) -  if ( itf_protocol == HID_ITF_PROTOCOL_NONE ) -  { -    hid_info[instance].report_count = tuh_hid_parse_report_descriptor(hid_info[instance].report_info, MAX_REPORT, desc_report, desc_len); -    printf("HID has %u reports \r\n", hid_info[instance].report_count); -  } - -  // request to receive report -  // tuh_hid_report_received_cb() will be invoked when report is available -  if ( !tuh_hid_receive_report(dev_addr, instance) ) -  { -    printf("Error: cannot request to receive report\r\n"); -  } -} - -// Invoked when device with hid interface is un-mounted -void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) -{ -  printf("HID device address = %d, instance = %d is unmounted\r\n", dev_addr, instance); -} - -// Invoked when received report from device via interrupt endpoint -void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len) -{ -  uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance); - -  switch (itf_protocol) -  { -    case HID_ITF_PROTOCOL_KEYBOARD: -      TU_LOG2("HID receive boot keyboard report\r\n"); -      process_kbd_report( (hid_keyboard_report_t const*) report ); -    break; - -    case HID_ITF_PROTOCOL_MOUSE: -      TU_LOG2("HID receive boot mouse report\r\n"); -      process_mouse_report( (hid_mouse_report_t const*) report ); -    break; - -    default: -      // Generic report requires matching ReportID and contents with previous parsed report info -      process_generic_report(dev_addr, instance, report, len); -    break; -  } - -  // continue to request to receive report -  if ( !tuh_hid_receive_report(dev_addr, instance) ) -  { -    printf("Error: cannot request to receive report\r\n"); -  } -} - -//--------------------------------------------------------------------+ -// Keyboard -//--------------------------------------------------------------------+ - -// look up new key in previous keys -static inline bool find_key_in_report(hid_keyboard_report_t const *report, uint8_t keycode) -{ -  for(uint8_t i=0; i<6; i++) -  { -    if (report->keycode[i] == keycode)  return true; -  } - -  return false; -} - -static void process_kbd_report(hid_keyboard_report_t const *report) -{ -  static hid_keyboard_report_t prev_report = { 0, 0, {0} }; // previous report to check key released - -  //------------- example code ignore control (non-printable) key affects -------------// -  for(uint8_t i=0; i<6; i++) -  { -    if ( report->keycode[i] ) -    { -      if ( find_key_in_report(&prev_report, report->keycode[i]) ) -      { -        // exist in previous report means the current key is holding -      }else -      { -        // not existed in previous report means the current key is pressed -        bool const is_shift = report->modifier & (KEYBOARD_MODIFIER_LEFTSHIFT | KEYBOARD_MODIFIER_RIGHTSHIFT); -        uint8_t ch = keycode2ascii[report->keycode[i]][is_shift ? 1 : 0]; -        putchar(ch); -        if ( ch == '\r' ) putchar('\n'); // added new line for enter key - -        fflush(stdout); // flush right away, else nanolib will wait for newline -      } -    } -    // TODO example skips key released -  } - -  prev_report = *report; -} - -//--------------------------------------------------------------------+ -// Mouse -//--------------------------------------------------------------------+ - -void cursor_movement(int8_t x, int8_t y, int8_t wheel) -{ -#if USE_ANSI_ESCAPE -  // Move X using ansi escape -  if ( x < 0) -  { -    printf(ANSI_CURSOR_BACKWARD(%d), (-x)); // move left -  }else if ( x > 0) -  { -    printf(ANSI_CURSOR_FORWARD(%d), x); // move right -  } - -  // Move Y using ansi escape -  if ( y < 0) -  { -    printf(ANSI_CURSOR_UP(%d), (-y)); // move up -  }else if ( y > 0) -  { -    printf(ANSI_CURSOR_DOWN(%d), y); // move down -  } - -  // Scroll using ansi escape -  if (wheel < 0) -  { -    printf(ANSI_SCROLL_UP(%d), (-wheel)); // scroll up -  }else if (wheel > 0) -  { -    printf(ANSI_SCROLL_DOWN(%d), wheel); // scroll down -  } - -  printf("\r\n"); -#else -  printf("(%d %d %d)\r\n", x, y, wheel); -#endif -} - -static void process_mouse_report(hid_mouse_report_t const * report) -{ -  static hid_mouse_report_t prev_report = { 0 }; - -  //------------- button state  -------------// -  uint8_t button_changed_mask = report->buttons ^ prev_report.buttons; -  if ( button_changed_mask & report->buttons) -  { -    printf(" %c%c%c ", -       report->buttons & MOUSE_BUTTON_LEFT   ? 'L' : '-', -       report->buttons & MOUSE_BUTTON_MIDDLE ? 'M' : '-', -       report->buttons & MOUSE_BUTTON_RIGHT  ? 'R' : '-'); -  } - -  //------------- cursor movement -------------// -  cursor_movement(report->x, report->y, report->wheel); -} - -//--------------------------------------------------------------------+ -// Generic Report -//--------------------------------------------------------------------+ -static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len) -{ -  (void) dev_addr; - -  uint8_t const rpt_count = hid_info[instance].report_count; -  tuh_hid_report_info_t* rpt_info_arr = hid_info[instance].report_info; -  tuh_hid_report_info_t* rpt_info = NULL; - -  if ( rpt_count == 1 && rpt_info_arr[0].report_id == 0) -  { -    // Simple report without report ID as 1st byte -    rpt_info = &rpt_info_arr[0]; -  }else -  { -    // Composite report, 1st byte is report ID, data starts from 2nd byte -    uint8_t const rpt_id = report[0]; - -    // Find report id in the arrray -    for(uint8_t i=0; i<rpt_count; i++) -    { -      if (rpt_id == rpt_info_arr[i].report_id ) -      { -        rpt_info = &rpt_info_arr[i]; -        break; -      } -    } - -    report++; -    len--; -  } - -  if (!rpt_info) -  { -    printf("Couldn't find the report info for this report !\r\n"); -    return; -  } - -  // For complete list of Usage Page & Usage checkout src/class/hid/hid.h. For examples: -  // - Keyboard                     : Desktop, Keyboard -  // - Mouse                        : Desktop, Mouse -  // - Gamepad                      : Desktop, Gamepad -  // - Consumer Control (Media Key) : Consumer, Consumer Control -  // - System Control (Power key)   : Desktop, System Control -  // - Generic (vendor)             : 0xFFxx, xx -  if ( rpt_info->usage_page == HID_USAGE_PAGE_DESKTOP ) -  { -    switch (rpt_info->usage) -    { -      case HID_USAGE_DESKTOP_KEYBOARD: -        TU_LOG1("HID receive keyboard report\r\n"); -        // Assume keyboard follow boot report layout -        process_kbd_report( (hid_keyboard_report_t const*) report ); -      break; - -      case HID_USAGE_DESKTOP_MOUSE: -        TU_LOG1("HID receive mouse report\r\n"); -        // Assume mouse follow boot report layout -        process_mouse_report( (hid_mouse_report_t const*) report ); -      break; - -      default: break; -    } -  } -} diff --git a/tinyusb/examples/host/cdc_msc_hid/src/main.c b/tinyusb/examples/host/cdc_msc_hid/src/main.c deleted file mode 100755 index a14be05e..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/src/main.c +++ /dev/null @@ -1,128 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ -void led_blinking_task(void); - -extern void cdc_task(void); -extern void hid_app_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  printf("TinyUSB Host CDC MSC HID Example\r\n"); - -  tusb_init(); - -  while (1) -  { -    // tinyusb host task -    tuh_task(); -    led_blinking_task(); - -#if CFG_TUH_CDC -    cdc_task(); -#endif - -#if CFG_TUH_HID -    hid_app_task(); -#endif -  } - -  return 0; -} - -//--------------------------------------------------------------------+ -// USB CDC -//--------------------------------------------------------------------+ -#if CFG_TUH_CDC -CFG_TUSB_MEM_SECTION static char serial_in_buffer[64] = { 0 }; - -void tuh_mount_cb(uint8_t dev_addr) -{ -  // application set-up -  printf("A device with address %d is mounted\r\n", dev_addr); - -  tuh_cdc_receive(dev_addr, serial_in_buffer, sizeof(serial_in_buffer), true); // schedule first transfer -} - -void tuh_umount_cb(uint8_t dev_addr) -{ -  // application tear-down -  printf("A device with address %d is unmounted \r\n", dev_addr); -} - -// invoked ISR context -void tuh_cdc_xfer_isr(uint8_t dev_addr, xfer_result_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes) -{ -  (void) event; -  (void) pipe_id; -  (void) xferred_bytes; - -  printf(serial_in_buffer); -  tu_memclr(serial_in_buffer, sizeof(serial_in_buffer)); - -  tuh_cdc_receive(dev_addr, serial_in_buffer, sizeof(serial_in_buffer), true); // waiting for next data -} - -void cdc_task(void) -{ - -} - -#endif - -//--------------------------------------------------------------------+ -// TinyUSB Callbacks -//--------------------------------------------------------------------+ - -//--------------------------------------------------------------------+ -// Blinking Task -//--------------------------------------------------------------------+ -void led_blinking_task(void) -{ -  const uint32_t interval_ms = 1000; -  static uint32_t start_ms = 0; - -  static bool led_state = false; - -  // Blink every interval ms -  if ( board_millis() - start_ms < interval_ms) return; // not enough time -  start_ms += interval_ms; - -  board_led_write(led_state); -  led_state = 1 - led_state; // toggle -} diff --git a/tinyusb/examples/host/cdc_msc_hid/src/msc_app.c b/tinyusb/examples/host/cdc_msc_hid/src/msc_app.c deleted file mode 100755 index 77a72052..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/src/msc_app.c +++ /dev/null @@ -1,106 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "tusb.h" - -#if CFG_TUH_MSC - -//--------------------------------------------------------------------+ -// MACRO TYPEDEF CONSTANT ENUM DECLARATION -//--------------------------------------------------------------------+ -static scsi_inquiry_resp_t inquiry_resp; - -bool inquiry_complete_cb(uint8_t dev_addr, msc_cbw_t const* cbw, msc_csw_t const* csw) -{ -  if (csw->status != 0) -  { -    printf("Inquiry failed\r\n"); -    return false; -  } - -  // Print out Vendor ID, Product ID and Rev -  printf("%.8s %.16s rev %.4s\r\n", inquiry_resp.vendor_id, inquiry_resp.product_id, inquiry_resp.product_rev); - -  // Get capacity of device -  uint32_t const block_count = tuh_msc_get_block_count(dev_addr, cbw->lun); -  uint32_t const block_size = tuh_msc_get_block_size(dev_addr, cbw->lun); - -  printf("Disk Size: %lu MB\r\n", block_count / ((1024*1024)/block_size)); -  printf("Block Count = %lu, Block Size: %lu\r\n", block_count, block_size); - -  return true; -} - -//------------- IMPLEMENTATION -------------// -void tuh_msc_mount_cb(uint8_t dev_addr) -{ -  printf("A MassStorage device is mounted\r\n"); - -  uint8_t const lun = 0; -  tuh_msc_inquiry(dev_addr, lun, &inquiry_resp, inquiry_complete_cb); -// -//  //------------- file system (only 1 LUN support) -------------// -//  uint8_t phy_disk = dev_addr-1; -//  disk_initialize(phy_disk); -// -//  if ( disk_is_ready(phy_disk) ) -//  { -//    if ( f_mount(phy_disk, &fatfs[phy_disk]) != FR_OK ) -//    { -//      puts("mount failed"); -//      return; -//    } -// -//    f_chdrive(phy_disk); // change to newly mounted drive -//    f_chdir("/"); // root as current dir -// -//    cli_init(); -//  } -} - -void tuh_msc_umount_cb(uint8_t dev_addr) -{ -  (void) dev_addr; -  printf("A MassStorage device is unmounted\r\n"); - -//  uint8_t phy_disk = dev_addr-1; -// -//  f_mount(phy_disk, NULL); // unmount disk -//  disk_deinitialize(phy_disk); -// -//  if ( phy_disk == f_get_current_drive() ) -//  { // active drive is unplugged --> change to other drive -//    for(uint8_t i=0; i<CFG_TUH_DEVICE_MAX; i++) -//    { -//      if ( disk_is_ready(i) ) -//      { -//        f_chdrive(i); -//        cli_init(); // refractor, rename -//      } -//    } -//  } -} - -#endif diff --git a/tinyusb/examples/host/cdc_msc_hid/src/tusb_config.h b/tinyusb/examples/host/cdc_msc_hid/src/tusb_config.h deleted file mode 100755 index bc6c68e5..00000000 --- a/tinyusb/examples/host/cdc_msc_hid/src/tusb_config.h +++ /dev/null @@ -1,94 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX -  #define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_HOST | OPT_MODE_HIGH_SPEED) -#else -  #define CFG_TUSB_RHPORT0_MODE       OPT_MODE_HOST -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// CONFIGURATION -//-------------------------------------------------------------------- - -// Size of buffer to hold descriptors and other data used for enumeration -#define CFG_TUH_ENUMERATION_BUFSIZE 256 - -#define CFG_TUH_HUB                 1 -#define CFG_TUH_CDC                 1 -#define CFG_TUH_HID                 4 // typical keyboard + mouse device can have 3-4 HID interfaces -#define CFG_TUH_MSC                 1 -#define CFG_TUH_VENDOR              0 - -// max device support (excluding hub device) -#define CFG_TUH_DEVICE_MAX          (CFG_TUH_HUB ? 4 : 1) // hub typically has 4 ports - -//------------- HID -------------// -#define CFG_TUH_HID_EPIN_BUFSIZE    64 -#define CFG_TUH_HID_EPOUT_BUFSIZE   64 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_LPC175X_6X b/tinyusb/examples/host/hid_controller/.only.MCU_LPC175X_6X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_LPC175X_6X +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_LPC177X_8X b/tinyusb/examples/host/hid_controller/.only.MCU_LPC177X_8X deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_LPC177X_8X +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_LPC18XX b/tinyusb/examples/host/hid_controller/.only.MCU_LPC18XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_LPC18XX +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_LPC40XX b/tinyusb/examples/host/hid_controller/.only.MCU_LPC40XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_LPC40XX +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_LPC43XX b/tinyusb/examples/host/hid_controller/.only.MCU_LPC43XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_LPC43XX +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_MIMXRT10XX b/tinyusb/examples/host/hid_controller/.only.MCU_MIMXRT10XX deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_MIMXRT10XX +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/.only.MCU_RP2040 b/tinyusb/examples/host/hid_controller/.only.MCU_RP2040 deleted file mode 100755 index e69de29b..00000000 --- a/tinyusb/examples/host/hid_controller/.only.MCU_RP2040 +++ /dev/null diff --git a/tinyusb/examples/host/hid_controller/CMakeLists.txt b/tinyusb/examples/host/hid_controller/CMakeLists.txt deleted file mode 100755 index aaf8bc34..00000000 --- a/tinyusb/examples/host/hid_controller/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -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}) - -# Checks this example is valid for the family and initializes the project -family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) - -add_executable(${PROJECT}) - -# Example source -target_sources(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c -        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c -        ) - -# Example include -target_include_directories(${PROJECT} PUBLIC -        ${CMAKE_CURRENT_SOURCE_DIR}/src -        ) - -# Configure compilation flags and libraries for the example... see the corresponding function -# in hw/bsp/FAMILY/family.cmake for details. -family_configure_host_example(${PROJECT})
\ No newline at end of file diff --git a/tinyusb/examples/host/hid_controller/Makefile b/tinyusb/examples/host/hid_controller/Makefile deleted file mode 100755 index 6f59faee..00000000 --- a/tinyusb/examples/host/hid_controller/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -include ../../../tools/top.mk -include ../../make.mk - -INC += \ -	src \ -	$(TOP)/hw \ - -# Example source -EXAMPLE_SOURCE += \ -	src/hid_app.c \ -	src/main.c -	 -SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE)) - -CFLAGS += -Wno-error=cast-align - -# TinyUSB Host Stack source -SRC_C += \ -	src/class/cdc/cdc_host.c \ -	src/class/hid/hid_host.c \ -	src/class/msc/msc_host.c \ -	src/host/hub.c \ -	src/host/usbh.c \ -	src/host/usbh_control.c \ -	src/portable/ehci/ehci.c \ -	src/portable/ohci/ohci.c \ -	src/portable/nxp/transdimension/hcd_transdimension.c \ -	src/portable/nxp/lpc17_40/hcd_lpc17_40.c - -include ../../rules.mk diff --git a/tinyusb/examples/host/hid_controller/src/hid_app.c b/tinyusb/examples/host/hid_controller/src/hid_app.c deleted file mode 100755 index c61ce70f..00000000 --- a/tinyusb/examples/host/hid_controller/src/hid_app.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2021, Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#include "bsp/board.h" -#include "tusb.h" - -/* From https://www.kernel.org/doc/html/latest/input/gamepad.html -          ____________________________              __ -         / [__ZL__]          [__ZR__] \               | -        / [__ TL __]        [__ TR __] \              | Front Triggers -     __/________________________________\__         __| -    /                                  _   \          | -   /      /\           __             (N)   \         | -  /       ||      __  |MO|  __     _       _ \        | Main Pad - |    <===DP===> |SE|      |ST|   (W) -|- (E) |       | -  \       ||    ___          ___       _     /        | -  /\      \/   /   \        /   \     (S)   /\      __| - /  \________ | LS  | ____ |  RS | ________/  \       | -|         /  \ \___/ /    \ \___/ /  \         |      | Control Sticks -|        /    \_____/      \_____/    \        |    __| -|       /                              \       | - \_____/                                \_____/ - -     |________|______|    |______|___________| -       D-Pad    Left       Right   Action Pad -               Stick       Stick - -                 |_____________| -                    Menu Pad - -  Most gamepads have the following features: -  - Action-Pad 4 buttons in diamonds-shape (on the right side) NORTH, SOUTH, WEST and EAST. -  - D-Pad (Direction-pad) 4 buttons (on the left side) that point up, down, left and right. -  - Menu-Pad Different constellations, but most-times 2 buttons: SELECT - START. -  - Analog-Sticks provide freely moveable sticks to control directions, Analog-sticks may also -  provide a digital button if you press them. -  - Triggers are located on the upper-side of the pad in vertical direction. The upper buttons -  are normally named Left- and Right-Triggers, the lower buttons Z-Left and Z-Right. -  - Rumble Many devices provide force-feedback features. But are mostly just simple rumble motors. - */ - -// Sony DS4 report layout detail https://www.psdevwiki.com/ps4/DS4-USB -typedef struct TU_ATTR_PACKED -{ -  uint8_t x, y, z, rz; // joystick - -  struct { -    uint8_t dpad     : 4; // (hat format, 0x08 is released, 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=W, 7=NW) -    uint8_t square   : 1; // west -    uint8_t cross    : 1; // south -    uint8_t circle   : 1; // east -    uint8_t triangle : 1; // north -  }; - -  struct { -    uint8_t l1     : 1; -    uint8_t r1     : 1; -    uint8_t l2     : 1; -    uint8_t r2     : 1; -    uint8_t share  : 1; -    uint8_t option : 1; -    uint8_t l3     : 1; -    uint8_t r3     : 1; -  }; - -  struct { -    uint8_t ps      : 1; // playstation button -    uint8_t tpad    : 1; // track pad click -    uint8_t counter : 6; // +1 each report -  }; - -  // comment out since not used by this example -  // uint8_t l2_trigger; // 0 released, 0xff fully pressed -  // uint8_t r2_trigger; // as above - -  //  uint16_t timestamp; -  //  uint8_t  battery; -  // -  //  int16_t gyro[3];  // x, y, z; -  //  int16_t accel[3]; // x, y, z - -  // there is still lots more info - -} sony_ds4_report_t; - -// check if device is Sony DualShock 4 -static inline bool is_sony_ds4(uint8_t dev_addr) -{ -  uint16_t vid, pid; -  tuh_vid_pid_get(dev_addr, &vid, &pid); - -  return (vid == 0x054c && pid == 0x09cc); -} - -//--------------------------------------------------------------------+ -// MACRO TYPEDEF CONSTANT ENUM DECLARATION -//--------------------------------------------------------------------+ - -void hid_app_task(void) -{ -  // nothing to do -} - -//--------------------------------------------------------------------+ -// TinyUSB Callbacks -//--------------------------------------------------------------------+ - -// Invoked when device with hid interface is mounted -// Report descriptor is also available for use. tuh_hid_parse_report_descriptor() -// can be used to parse common/simple enough descriptor. -// Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped -// therefore report_desc = NULL, desc_len = 0 -void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_report, uint16_t desc_len) -{ -  uint16_t vid, pid; -  tuh_vid_pid_get(dev_addr, &vid, &pid); - -  printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance); -  printf("VID = %04x, PID = %04x\r\n", vid, pid); - -  // Sony DualShock 4 [CUH-ZCT2x] -  if ( is_sony_ds4(dev_addr) ) -  { -    // request to receive report -    // tuh_hid_report_received_cb() will be invoked when report is available -    if ( !tuh_hid_receive_report(dev_addr, instance) ) -    { -      printf("Error: cannot request to receive report\r\n"); -    } -  } -} - -// Invoked when device with hid interface is un-mounted -void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) -{ -  printf("HID device address = %d, instance = %d is unmounted\r\n", dev_addr, instance); - -} - -// check if different than 2 -bool diff_than_2(uint8_t x, uint8_t y) -{ -  return (x - y > 2) || (y - x > 2); -} - -// check if 2 reports are different enough -bool diff_report(sony_ds4_report_t const* rpt1, sony_ds4_report_t const* rpt2) -{ -  bool result; - -  // x, y, z, rz must different than 2 to be counted -  result = diff_than_2(rpt1->x, rpt2->x) || diff_than_2(rpt1->y , rpt2->y ) || -           diff_than_2(rpt1->z, rpt2->z) || diff_than_2(rpt1->rz, rpt2->rz); - -  // check the reset with mem compare -  result |= memcmp(&rpt1->rz + 1, &rpt2->rz + 1, sizeof(sony_ds4_report_t)-4); - -  return result; -} - -void process_sony_ds4(uint8_t const* report, uint16_t len) -{ -  const char* dpad_str[] = { "N", "NE", "E", "SE", "S", "SW", "W", "NW", "none" }; - -  // previous report used to compare for changes -  static sony_ds4_report_t prev_report = { 0 }; - -  uint8_t const report_id = report[0]; -  report++; -  len--; - -  // all buttons state is stored in ID 1 -  if (report_id == 1) -  { -    sony_ds4_report_t ds4_report; -    memcpy(&ds4_report, report, sizeof(ds4_report)); - -    // counter is +1, assign to make it easier to compare 2 report -    prev_report.counter = ds4_report.counter; - -    // only print if changes since it is polled ~ 5ms -    // Since count+1 after each report and  x, y, z, rz fluctuate within 1 or 2 -    // We need more than memcmp to check if report is different enough -    if ( diff_report(&prev_report, &ds4_report) ) -    { -      printf("(x, y, z, rz) = (%u, %u, %u, %u)\r\n", ds4_report.x, ds4_report.y, ds4_report.z, ds4_report.rz); -      printf("DPad = %s ", dpad_str[ds4_report.dpad]); - -      if (ds4_report.square   ) printf("Square "); -      if (ds4_report.cross    ) printf("Cross "); -      if (ds4_report.circle   ) printf("Circle "); -      if (ds4_report.triangle ) printf("Triangle "); - -      if (ds4_report.l1       ) printf("L1 "); -      if (ds4_report.r1       ) printf("R1 "); -      if (ds4_report.l2       ) printf("L2 "); -      if (ds4_report.r2       ) printf("R2 "); - -      if (ds4_report.share    ) printf("Share "); -      if (ds4_report.option   ) printf("Option "); -      if (ds4_report.l3       ) printf("L3 "); -      if (ds4_report.r3       ) printf("R3 "); - -      if (ds4_report.ps       ) printf("PS "); -      if (ds4_report.tpad     ) printf("TPad "); - -      printf("\r\n"); -    } - -    prev_report = ds4_report; -  } -} - -// Invoked when received report from device via interrupt endpoint -void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len) -{ -  if ( is_sony_ds4(dev_addr) ) -  { -    process_sony_ds4(report, len); -  } - -  // continue to request to receive report -  if ( !tuh_hid_receive_report(dev_addr, instance) ) -  { -    printf("Error: cannot request to receive report\r\n"); -  } -} diff --git a/tinyusb/examples/host/hid_controller/src/main.c b/tinyusb/examples/host/hid_controller/src/main.c deleted file mode 100755 index e13fa818..00000000 --- a/tinyusb/examples/host/hid_controller/src/main.c +++ /dev/null @@ -1,93 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -/* This example current worked and tested with following controller - * - Sony DualShock 4 [CUH-ZCT2x] VID = 0x054c, PID = 0x09cc - */ - - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "bsp/board.h" -#include "tusb.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF PROTYPES -//--------------------------------------------------------------------+ -void led_blinking_task(void); - -extern void cdc_task(void); -extern void hid_app_task(void); - -/*------------- MAIN -------------*/ -int main(void) -{ -  board_init(); - -  printf("TinyUSB Host HID Controller Example\r\n"); - -  tusb_init(); - -  while (1) -  { -    // tinyusb host task -    tuh_task(); -    led_blinking_task(); - -#if CFG_TUH_CDC -    cdc_task(); -#endif - -#if CFG_TUH_HID -    hid_app_task(); -#endif -  } - -  return 0; -} - -//--------------------------------------------------------------------+ -// TinyUSB Callbacks -//--------------------------------------------------------------------+ - -//--------------------------------------------------------------------+ -// Blinking Task -//--------------------------------------------------------------------+ -void led_blinking_task(void) -{ -  const uint32_t interval_ms = 1000; -  static uint32_t start_ms = 0; - -  static bool led_state = false; - -  // Blink every interval ms -  if ( board_millis() - start_ms < interval_ms) return; // not enough time -  start_ms += interval_ms; - -  board_led_write(led_state); -  led_state = 1 - led_state; // toggle -} diff --git a/tinyusb/examples/host/hid_controller/src/tusb_config.h b/tinyusb/examples/host/hid_controller/src/tusb_config.h deleted file mode 100755 index 74b471ae..00000000 --- a/tinyusb/examples/host/hid_controller/src/tusb_config.h +++ /dev/null @@ -1,95 +0,0 @@ -/*  - * The MIT License (MIT) - * - * Copyright (c) 2019 Ha Thach (tinyusb.org) - * - * 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. - * - */ - -#ifndef _TUSB_CONFIG_H_ -#define _TUSB_CONFIG_H_ - -#ifdef __cplusplus - extern "C" { -#endif - -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- - -// defined by compiler flags for flexibility -#ifndef CFG_TUSB_MCU -  #error CFG_TUSB_MCU must be defined -#endif - -#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX -  #define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_HOST | OPT_MODE_HIGH_SPEED) -#else -  #define CFG_TUSB_RHPORT0_MODE       OPT_MODE_HOST -#endif - -#ifndef CFG_TUSB_OS -#define CFG_TUSB_OS                 OPT_OS_NONE -#endif - -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG           0 - -/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. - * Tinyusb use follows macros to declare transferring memory so that they can be put - * into those specific section. - * e.g - * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) - * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4))) - */ -#ifndef CFG_TUSB_MEM_SECTION -#define CFG_TUSB_MEM_SECTION -#endif - -#ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4))) -#endif - -//-------------------------------------------------------------------- -// CONFIGURATION -//-------------------------------------------------------------------- - -// Size of buffer to hold descriptors and other data used for enumeration -#define CFG_TUH_ENUMERATION_BUFSIZE 256 - -#define CFG_TUH_HUB                 0 -#define CFG_TUH_CDC                 0 -#define CFG_TUH_HID                 4 // typical keyboard + mouse device can have 3-4 HID interfaces -#define CFG_TUH_MSC                 0 -#define CFG_TUH_VENDOR              0 - -// max device support (excluding hub device) -// 1 hub typically has 4 ports -#define CFG_TUH_DEVICE_MAX          (CFG_TUH_HUB ? 4 : 1) - -//------------- HID -------------// - -#define CFG_TUH_HID_EP_BUFSIZE      64 - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_CONFIG_H_ */ diff --git a/tinyusb/examples/make.mk b/tinyusb/examples/make.mk deleted file mode 100755 index 9daf60e3..00000000 --- a/tinyusb/examples/make.mk +++ /dev/null @@ -1,132 +0,0 @@ -# --------------------------------------- -# Common make definition for all examples -# --------------------------------------- - -# Build directory -BUILD := _build/$(BOARD) - -PROJECT := $(notdir $(CURDIR)) -BIN := $(TOP)/_bin/$(BOARD)/$(notdir $(CURDIR)) - -# Handy check parameter function -check_defined = \ -    $(strip $(foreach 1,$1, \ -    $(call __check_defined,$1,$(strip $(value 2))))) -__check_defined = \ -    $(if $(value $1),, \ -    $(error Undefined make flag: $1$(if $2, ($2)))) - -#-------------- Select the board to build for. ------------ - -# Board without family -ifneq ($(wildcard $(TOP)/hw/bsp/$(BOARD)/board.mk),) -BOARD_PATH := hw/bsp/$(BOARD) -FAMILY := -endif - -# Board within family -ifeq ($(BOARD_PATH),) -  BOARD_PATH := $(subst $(TOP)/,,$(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD))) -  FAMILY := $(word 3, $(subst /, ,$(BOARD_PATH))) -  FAMILY_PATH = hw/bsp/$(FAMILY) -endif - -ifeq ($(BOARD_PATH),) -  $(info You must provide a BOARD parameter with 'BOARD=') -  $(error Invalid BOARD specified) -endif - -ifeq ($(FAMILY),) -  include $(TOP)/hw/bsp/$(BOARD)/board.mk -else -  # Include Family and Board specific defs -  include $(TOP)/$(FAMILY_PATH)/family.mk - -  SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c)) -endif - -# Fetch submodules depended by family -fetch_submodule_if_empty = $(if $(wildcard $(TOP)/$1/*),,$(info $(shell git -C $(TOP) submodule update --init $1))) -ifdef DEPS_SUBMODULES -  $(foreach s,$(DEPS_SUBMODULES),$(call fetch_submodule_if_empty,$(s))) -endif - -#-------------- Cross Compiler  ------------ -# Can be set by board, default to ARM GCC -CROSS_COMPILE ?= arm-none-eabi- - -CC = $(CROSS_COMPILE)gcc -CXX = $(CROSS_COMPILE)g++ -GDB = $(CROSS_COMPILE)gdb -OBJCOPY = $(CROSS_COMPILE)objcopy -SIZE = $(CROSS_COMPILE)size -MKDIR = mkdir - -ifeq ($(CMDEXE),1) -  CP = copy -  RM = del -else -  SED = sed -  CP = cp -  RM = rm -endif - -#-------------- Source files and compiler flags -------------- - -# Include all source C in family & board folder -SRC_C += hw/bsp/board.c -SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(BOARD_PATH)/*.c)) - -INC   += $(TOP)/$(FAMILY_PATH) - -# Compiler Flags -CFLAGS += \ -  -ggdb \ -  -fdata-sections \ -  -ffunction-sections \ -  -fsingle-precision-constant \ -  -fno-strict-aliasing \ -  -Wdouble-promotion \ -  -Wstrict-prototypes \ -  -Wstrict-overflow \ -  -Wall \ -  -Wextra \ -  -Werror \ -  -Wfatal-errors \ -  -Werror-implicit-function-declaration \ -  -Wfloat-equal \ -  -Wundef \ -  -Wshadow \ -  -Wwrite-strings \ -  -Wsign-compare \ -  -Wmissing-format-attribute \ -  -Wunreachable-code \ -  -Wcast-align \ -  -Wcast-function-type - -# Debugging/Optimization -ifeq ($(DEBUG), 1) -  CFLAGS += -Og -else -  CFLAGS += -Os -endif - -# Log level is mapped to TUSB DEBUG option -ifneq ($(LOG),) -  CMAKE_DEFSYM +=	-DLOG=$(LOG) -  CFLAGS += -DCFG_TUSB_DEBUG=$(LOG) -endif - -# Logger: default is uart, can be set to rtt or swo -ifneq ($(LOGGER),) -	CMAKE_DEFSYM +=	-DLOGGER=$(LOGGER) -endif - -ifeq ($(LOGGER),rtt) -  CFLAGS += -DLOGGER_RTT -DSEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL -  RTT_SRC = lib/SEGGER_RTT -  INC   += $(TOP)/$(RTT_SRC)/RTT -  SRC_C += $(RTT_SRC)/RTT/SEGGER_RTT.c -else ifeq ($(LOGGER),swo) -  CFLAGS += -DLOGGER_SWO -endif diff --git a/tinyusb/examples/rules.mk b/tinyusb/examples/rules.mk deleted file mode 100755 index 4fce468f..00000000 --- a/tinyusb/examples/rules.mk +++ /dev/null @@ -1,204 +0,0 @@ -# --------------------------------------- -# Common make rules for all examples -# --------------------------------------- - -# Set all as default goal -.DEFAULT_GOAL := all - -# ESP32-SX and RP2040 has its own CMake build system -ifneq ($(FAMILY),esp32s2) -ifneq ($(FAMILY),esp32s3) -ifneq ($(FAMILY),rp2040) -# --------------------------------------- -# GNU Make build system -# --------------------------------------- - -# libc -LIBS += -lgcc -lm -lnosys - -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/net_device.c \ -	src/class/usbtmc/usbtmc_device.c \ -	src/class/vendor/vendor_device.c - -# TinyUSB stack include -INC += $(TOP)/src - -CFLAGS += $(addprefix -I,$(INC)) - -LDFLAGS += $(CFLAGS) -Wl,-T,$(TOP)/$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -ifneq ($(SKIP_NANOLIB), 1) -LDFLAGS += -specs=nosys.specs -specs=nano.specs -endif - -ASFLAGS += $(CFLAGS) - -# 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)) - -# Verbose mode -ifeq ("$(V)","1") -$(info CFLAGS  $(CFLAGS) ) $(info ) -$(info LDFLAGS $(LDFLAGS)) $(info ) -$(info ASFLAGS $(ASFLAGS)) $(info ) -endif - -all: $(BUILD)/$(PROJECT).bin $(BUILD)/$(PROJECT).hex size - -uf2: $(BUILD)/$(PROJECT).uf2 - -OBJ_DIRS = $(sort $(dir $(OBJ))) -$(OBJ): | $(OBJ_DIRS) -$(OBJ_DIRS): -ifeq ($(CMDEXE),1) -	@$(MKDIR) $(subst /,\,$@) -else -	@$(MKDIR) -p $@ -endif - -$(BUILD)/$(PROJECT).elf: $(OBJ) -	@echo LINK $@ -	@$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group - -$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf -	@echo CREATE $@ -	@$(OBJCOPY) -O binary $^ $@ - -$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf -	@echo CREATE $@ -	@$(OBJCOPY) -O ihex $^ $@ - -# UF2 generation, iMXRT need to strip to text only before conversion -ifeq ($(FAMILY),imxrt) -$(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).elf -	@echo CREATE $@ -	@$(OBJCOPY) -O ihex -R .flash_config -R .ivt $^ $(BUILD)/$(PROJECT)-textonly.hex -	$(PYTHON) $(TOP)/tools/uf2/utils/uf2conv.py -f $(UF2_FAMILY_ID) -c -o $@ $(BUILD)/$(PROJECT)-textonly.hex -else -$(BUILD)/$(PROJECT).uf2: $(BUILD)/$(PROJECT).hex -	@echo CREATE $@ -	$(PYTHON) $(TOP)/tools/uf2/utils/uf2conv.py -f $(UF2_FAMILY_ID) -c -o $@ $^ -endif - -copy-artifact: $(BUILD)/$(PROJECT).bin $(BUILD)/$(PROJECT).hex $(BUILD)/$(PROJECT).uf2 - -# 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 -# to be used to compile all .c files. -vpath %.c . $(TOP) -$(BUILD)/obj/%.o: %.c -	@echo CC $(notdir $@) -	@$(CC) $(CFLAGS) -c -MD -o $@ $< - -# ASM sources lower case .s -vpath %.s . $(TOP) -$(BUILD)/obj/%_asm.o: %.s -	@echo AS $(notdir $@) -	@$(CC) -x assembler-with-cpp $(ASFLAGS) -c -o $@ $< - -# ASM sources upper case .S -vpath %.S . $(TOP) -$(BUILD)/obj/%_asm.o: %.S -	@echo AS $(notdir $@) -	@$(CC) -x assembler-with-cpp $(ASFLAGS) -c -o $@ $< - -size: $(BUILD)/$(PROJECT).elf -	-@echo '' -	@$(SIZE) $< -	-@echo '' - -.PHONY: clean -clean: -ifeq ($(CMDEXE),1) -	rd /S /Q $(subst /,\,$(BUILD)) -else -	$(RM) -rf $(BUILD) -endif - -endif -endif -endif # GNU Make - -# --------------------------------------- -# Flash Targets -# --------------------------------------- - -# Flash binary using Jlink -ifeq ($(OS),Windows_NT) -  JLINKEXE = JLink.exe -else -  JLINKEXE = JLinkExe -endif - -JLINK_IF ?= swd - -# Flash using jlink -flash-jlink: $(BUILD)/$(PROJECT).hex -	@echo halt > $(BUILD)/$(BOARD).jlink -	@echo r > $(BUILD)/$(BOARD).jlink -	@echo loadfile $^ >> $(BUILD)/$(BOARD).jlink -	@echo r >> $(BUILD)/$(BOARD).jlink -	@echo go >> $(BUILD)/$(BOARD).jlink -	@echo exit >> $(BUILD)/$(BOARD).jlink -	$(JLINKEXE) -device $(JLINK_DEVICE) -if $(JLINK_IF) -JTAGConf -1,-1 -speed auto -CommandFile $(BUILD)/$(BOARD).jlink - -# flash STM32 MCU using stlink with STM32 Cube Programmer CLI -flash-stlink: $(BUILD)/$(PROJECT).elf -	STM32_Programmer_CLI --connect port=swd --write $< --go - -# flash with pyocd -flash-pyocd: $(BUILD)/$(PROJECT).hex -	pyocd flash -t $(PYOCD_TARGET) $< -	pyocd reset -t $(PYOCD_TARGET) - -# flash with Black Magic Probe - -# This symlink is created by https://github.com/blacksphere/blackmagic/blob/master/driver/99-blackmagic.rules -BMP ?= /dev/ttyBmpGdb - -flash-bmp: $(BUILD)/$(PROJECT).elf -	$(GDB) --batch -ex 'target extended-remote $(BMP)' -ex 'monitor swdp_scan' -ex 'attach 1' -ex load  $< - -debug-bmp: $(BUILD)/$(PROJECT).elf -	$(GDB) -ex 'target extended-remote $(BMP)' -ex 'monitor swdp_scan' -ex 'attach 1' $< - -#-------------- Artifacts -------------- - -# Create binary directory -$(BIN): -	@$(MKDIR) -p $@ - -# Copy binaries .elf, .bin, .hex, .uf2 to BIN for upload -# due to large size of combined artifacts, only uf2 is uploaded for now -copy-artifact: $(BIN) -	@$(CP) $(BUILD)/$(PROJECT).uf2 $(BIN) -	#@$(CP) $(BUILD)/$(PROJECT).bin $(BIN) -	#@$(CP) $(BUILD)/$(PROJECT).hex $(BIN) -	#@$(CP) $(BUILD)/$(PROJECT).elf $(BIN) - -# Print out the value of a make variable. -# https://stackoverflow.com/questions/16467718/how-to-print-out-a-variable-in-makefile -print-%: -	@echo $* = $($*)  | 
