Teensyduino 1.62 Beta #3

Paul

Administrator
Staff member
Here is a third beta test for Teensyduino 1.62.

Arduino 2.3.x: Copy this URL to Arduino IDE File > Preferences (Arduino IDE > Settings on MacOS).

https://www.pjrc.com/teensy/td_162-beta3/package_teensy_0.62.3_index.json

Use Boards Manager to install Teensy version 0.62.3
(to refresh versions, Shift-Ctrl-P and click "Arduino: Update Package Index")


Arduino 1.8.x, Linux 64 bit:

Arduino 1.8.x, Linux ARM:

Arduino 1.8.x, Linux ARM64:

Arduino 1.8.x, Windows:


Changes since 1.62-beta2:

Many compiler warnings fixed in many libraries
detailed list coming soon...
 
Frank's Arduino-Teensy-Codec-lib library is way out of date. I use this in my music player in my DiskIOMB library which uses all of the codecs in Arduino-Teensy-Codec-lib. @mjs513 and I worked on this library quite a few years ago and had all of the codecs working but now it is severly out of date and needs to be updated. Here is the compiler output:
Code:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/format.c:37:32: warning: '-fpermissive' is not an option that controls warnings [-Wpragmas]
   37 | #pragma GCC diagnostic ignored "-fpermissive"
      |                                ^~~~~~~~~~~~~~
In file included from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/flac.cpp:13:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/md5.c: In function 'void FLAC__MD5Transform(FLAC__uint32*, const FLAC__uint32*)':
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/md5.c:56:31: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   56 |         register FLAC__uint32 a, b, c, d;
      |                               ^
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/md5.c:56:34: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   56 |         register FLAC__uint32 a, b, c, d;
      |                                  ^
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/md5.c:56:37: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   56 |         register FLAC__uint32 a, b, c, d;
      |                                     ^
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/md5.c:56:40: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   56 |         register FLAC__uint32 a, b, c, d;
      |                                        ^
In file included from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/flac.cpp:15:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/bitreader.c: In function 'void crc16_update_word_(FLAC__BitReader*, uint32_t)':
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/FLAC/bitreader.c:95:27: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   95 |         register unsigned crc = br->read_crc16;
      |                           ^~~
In file included from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../arch.h:159,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../ecintrin.h:32,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../entcode.h:35,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../entenc.h:31,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../celt.h:41,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../modes.h:34,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../pitch.h:37,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/arm_celt_map.c:32,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus.cpp:4:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/celt_lpc.c: In function 'int _celt_autocorr(const opus_val16*, opus_val32*, const opus_val16*, int, int, int, int)':
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../arm/fixed_armv5e.h:131:42: warning: '*(const opus_val16*)xx.1026' may be used uninitialized [-Wmaybe-uninitialized]
  131 | #define MULT16_16(a, b) (MULT16_16_armv5e(a, b))
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/arm/../fixed_generic.h:88:26: note: in definition of macro 'SHR32'
   88 | #define SHR32(a,shift) ((a) >> (shift))
      |                          ^
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/celt/celt_lpc.c:248:29: note: in expansion of macro 'MULT16_16'
  248 |       if (n&1) ac0 += SHR32(MULT16_16(xptr[0],xptr[0]),9);
      |                             ^~~~~~~~~
In file included from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus.cpp:98:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/silk/process_NLSFs.c: In function 'void silk_process_NLSFs(silk_encoder_state*, opus_int16 (*)[16], opus_int16*, const opus_int16*)':
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/silk/process_NLSFs.c:77:36: warning: 'pNLSF0_temp_Q15' may be used uninitialized [-Wmaybe-uninitialized]
   77 |         silk_NLSF_VQ_weights_laroia( pNLSFW0_temp_QW, pNLSF0_temp_Q15, psEncC->predictLPCOrder );
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus.cpp:93:
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/silk/NLSF_VQ_weights_laroia.c:42:6: note: by argument 2 of type 'const opus_int16*' {aka 'const short int*'} to 'void silk_NLSF_VQ_weights_laroia(opus_int16*, const opus_int16*, int)' declared here
   42 | void silk_NLSF_VQ_weights_laroia(
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/opus/silk/process_NLSFs.c:45:18: note: 'pNLSF0_temp_Q15' declared here
   45 |     opus_int16   pNLSF0_temp_Q15[ MAX_LPC_ORDER ];
      |                  ^~~~~~~~~~~~~~~
Compiling core...
Using precompiled core: /tmp/arduino_cache_742938/core/core_e7f880ab8975471502214600988f3faf.a
Linking everything together...
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/arm/bin/arm-none-eabi-gcc -O2 -Wl,--gc-sections,--relax,--no-warn-rwx-segments -T/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/cores/teensy4/imxrt1062_t41.ld -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -o /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf /tmp/arduino_build_545841/sketch/Mp3FilePlayer.ino.cpp.o /tmp/arduino_build_545841/libraries/Audio/memcpy_audio.S.o /tmp/arduino_build_545841/libraries/Audio/data_bandlimit_step.c.o /tmp/arduino_build_545841/libraries/Audio/data_spdif.c.o /tmp/arduino_build_545841/libraries/Audio/data_ulaw.c.o /tmp/arduino_build_545841/libraries/Audio/data_waveforms.c.o /tmp/arduino_build_545841/libraries/Audio/data_windows.c.o /tmp/arduino_build_545841/libraries/Audio/Quantizer.cpp.o /tmp/arduino_build_545841/libraries/Audio/Resampler.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_fft1024.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_fft256.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_notefreq.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_peak.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_print.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_rms.cpp.o /tmp/arduino_build_545841/libraries/Audio/analyze_tonedetect.cpp.o /tmp/arduino_build_545841/libraries/Audio/async_input_spdif3.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_ak4558.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_cs42448.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_cs4272.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_sgtl5000.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_tlv320aic3206.cpp.o /tmp/arduino_build_545841/libraries/Audio/control_wm8731.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_bitcrusher.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_chorus.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_combine.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_delay.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_delay_ext.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_envelope.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_fade.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_flange.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_freeverb.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_granular.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_midside.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_multiply.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_rectifier.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_reverb.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_wavefolder.cpp.o /tmp/arduino_build_545841/libraries/Audio/effect_waveshaper.cpp.o /tmp/arduino_build_545841/libraries/Audio/filter_biquad.cpp.o /tmp/arduino_build_545841/libraries/Audio/filter_fir.cpp.o /tmp/arduino_build_545841/libraries/Audio/filter_ladder.cpp.o /tmp/arduino_build_545841/libraries/Audio/filter_variable.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_adc.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_adcs.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_i2s.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_i2s2.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_i2s_hex.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_i2s_oct.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_i2s_quad.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_pdm.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_pdm_i2s2.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_spdif3.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_tdm.cpp.o /tmp/arduino_build_545841/libraries/Audio/input_tdm2.cpp.o /tmp/arduino_build_545841/libraries/Audio/mixer.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_adat.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_dac.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_dacs.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_i2s.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_i2s2.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_i2s_hex.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_i2s_oct.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_i2s_quad.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_mqs.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_pt8211.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_pt8211_2.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_pwm.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_spdif.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_spdif2.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_spdif3.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_tdm.cpp.o /tmp/arduino_build_545841/libraries/Audio/output_tdm2.cpp.o /tmp/arduino_build_545841/libraries/Audio/play_memory.cpp.o /tmp/arduino_build_545841/libraries/Audio/play_queue.cpp.o /tmp/arduino_build_545841/libraries/Audio/play_sd_raw.cpp.o /tmp/arduino_build_545841/libraries/Audio/play_sd_wav.cpp.o /tmp/arduino_build_545841/libraries/Audio/play_serialflash_raw.cpp.o /tmp/arduino_build_545841/libraries/Audio/record_queue.cpp.o /tmp/arduino_build_545841/libraries/Audio/spi_interrupt.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_dc.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_karplusstrong.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_pinknoise.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_pwm.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_simple_drum.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_sine.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_tonesweep.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_waveform.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_wavetable.cpp.o /tmp/arduino_build_545841/libraries/Audio/synth_whitenoise.cpp.o /tmp/arduino_build_545841/libraries/Audio/utility/sqrt_integer.c.o /tmp/arduino_build_545841/libraries/Audio/utility/imxrt_hw.cpp.o /tmp/arduino_build_545841/libraries/SPI/SPI.cpp.o /tmp/arduino_build_545841/libraries/SD/SD.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FreeStack.cpp.o /tmp/arduino_build_545841/libraries/SdFat/MinimumSerial.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatDbg.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatFile.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatFilePrint.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatFileWrite.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatFormatter.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatName.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatPartition.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/ExFatVolume.cpp.o /tmp/arduino_build_545841/libraries/SdFat/ExFatLib/upcase.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatDbg.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatFile.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatFileLFN.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatFilePrint.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatFileSFN.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatFormatter.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatName.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatPartition.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FatLib/FatVolume.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FsLib/FsFile.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FsLib/FsNew.cpp.o /tmp/arduino_build_545841/libraries/SdFat/FsLib/FsVolume.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SdCard/SdCardInfo.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SdCard/SdSpiCard.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SdCard/SdioTeensy.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiArtemis.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiChipSelect.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiDue.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiESP.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiParticle.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiSTM32.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiSTM32Core.cpp.o /tmp/arduino_build_545841/libraries/SdFat/SpiDriver/SdSpiTeensy3.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FmtNumber.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FsCache.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FsDateTime.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FsName.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FsStructs.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/FsUtf.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/PrintBasic.cpp.o /tmp/arduino_build_545841/libraries/SdFat/common/upcase.cpp.o /tmp/arduino_build_545841/libraries/SdFat/iostream/StdioStream.cpp.o /tmp/arduino_build_545841/libraries/SdFat/iostream/StreamBaseClass.cpp.o /tmp/arduino_build_545841/libraries/SdFat/iostream/istream.cpp.o /tmp/arduino_build_545841/libraries/SdFat/iostream/ostream.cpp.o /tmp/arduino_build_545841/libraries/SerialFlash/SerialFlashChip.cpp.o /tmp/arduino_build_545841/libraries/SerialFlash/SerialFlashDirectory.cpp.o /tmp/arduino_build_545841/libraries/Wire/Wire.cpp.o /tmp/arduino_build_545841/libraries/Wire/WireIMXRT.cpp.o /tmp/arduino_build_545841/libraries/Wire/WireKinetis.cpp.o /tmp/arduino_build_545841/libraries/Wire/utility/twi.c.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/asmpoly_thumb2.S.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/memcpy_frominterleaved.S.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/aac.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/codecs.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/flac.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/mp3.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/oggparse.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/opus.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/play_sd_aac.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/play_sd_flac.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/play_sd_mp3.cpp.o /tmp/arduino_build_545841/libraries/Arduino-Teensy-Codec-lib/play_sd_opus.cpp.o /tmp/arduino_build_545841/../arduino_cache_742938/core/core_e7f880ab8975471502214600988f3faf.a -L/tmp/arduino_build_545841 -larm_cortexM7lfsp_math -lm -lstdc++
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/arm/bin/arm-none-eabi-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf /tmp/arduino_build_545841/Mp3FilePlayer.ino.eep
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/arm/bin/arm-none-eabi-objcopy -O ihex -R .eeprom /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf /tmp/arduino_build_545841/Mp3FilePlayer.ino.hex
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/teensy_secure encrypthex TEENSY41 /tmp/arduino_build_545841/Mp3FilePlayer.ino.hex
No key .pem file found, skipping .ehex encryption
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/teensy_post_compile -file=Mp3FilePlayer.ino -path=/tmp/arduino_build_545841 -tools=/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/ -board=TEENSY41
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/stdout_redirect /tmp/arduino_build_545841/Mp3FilePlayer.ino.sym /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/arm/bin/arm-none-eabi-objdump -t -C /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/teensy_size /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf
Memory Usage on Teensy 4.1:
  FLASH: code:79928, data:21000, headers:8636   free for files:8016900
   RAM1: variables:23744, code:76504, padding:21800   free for local variables:402240
   RAM2: variables:14240  free for malloc/new:510048
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/stdout_redirect /tmp/arduino_build_545841/Mp3FilePlayer.ino.lst /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/../tools/arm/bin/arm-none-eabi-objdump -d -S -C /tmp/arduino_build_545841/Mp3FilePlayer.ino.elf
Multiple libraries were found for "SD.h"
 Used: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/SD
 Not used: /home/wwatson/arduino-1.8.19-TD1.62B3/libraries/SD
Using library Audio at version 1.3 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio
Using library SPI at version 1.0 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/SPI
Using library SD at version 2.0.0 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/SD
Using library SdFat at version 2.1.2 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/SdFat
Using library SerialFlash at version 0.5 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/SerialFlash
Using library Wire at version 1.0 in folder: /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Wire
Using library Arduino-Teensy-Codec-lib at version 0.32 in folder: /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib
Even with these warnings my player still plays MP3 and WAV files :)

And then the MTP player sketch:
Code:
MTP_TEST_AUDIO:78: error: 'MTPStorage' does not name a type
   78 | MTPStorage storage;
      | ^~~~~~~~~~
MTP_TEST_AUDIO:79: error: 'MTPD' does not name a type
   79 | MTPD    mtpd(&storage);
      | ^~~~
MTP_TEST_AUDIO:133: error: 'msController' does not name a type; did you mean 'MouseController'?
  133 | msController drive1(myusb);
      | ^~~~~~~~~~~~
      | MouseController
MTP_TEST_AUDIO:134: error: 'msController' does not name a type; did you mean 'MouseController'?
  134 | msController drive2(myusb);
      | ^~~~~~~~~~~~
      | MouseController
MTP_TEST_AUDIO:135: error: 'msController' does not name a type; did you mean 'MouseController'?
  135 | msController drive3(myusb);
      | ^~~~~~~~~~~~
      | MouseController
MTP_TEST_AUDIO:136: error: 'msController' does not name a type; did you mean 'MouseController'?
  136 | msController drive4(myusb);
      | ^~~~~~~~~~~~
      | MouseController
MTP_TEST_AUDIO:138: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  138 | msFilesystem msFS1(myusb);
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:139: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  139 | msFilesystem msFS2(myusb);
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:140: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  140 | msFilesystem msFS3(myusb);
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:141: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  141 | msFilesystem msFS4(myusb);
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:142: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  142 | msFilesystem msFS5(myusb);
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:145: error: 'msFilesystem' does not name a type; did you mean 'USBFilesystem'?
  145 | msFilesystem *pmsFS[] = {&msFS1, &msFS2, &msFS3, &msFS4, &msFS5};
      | ^~~~~~~~~~~~
      | USBFilesystem
MTP_TEST_AUDIO:146: error: 'pmsFS' was not declared in this scope
  146 | #define CNT_MSC  (sizeof(pmsFS)/sizeof(pmsFS[0]))
      |                          ^~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:147:26: note: in expansion of macro 'CNT_MSC'
  147 | uint32_t pmsfs_store_ids[CNT_MSC] = {0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL};
      |                          ^~~~~~~
MTP_TEST_AUDIO:146: error: 'pmsFS' was not declared in this scope
  146 | #define CNT_MSC  (sizeof(pmsFS)/sizeof(pmsFS[0]))
      |                                        ^~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:147:26: note: in expansion of macro 'CNT_MSC'
  147 | uint32_t pmsfs_store_ids[CNT_MSC] = {0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL};
      |                          ^~~~~~~
MTP_TEST_AUDIO:146: error: 'pmsFS' was not declared in this scope
  146 | #define CNT_MSC  (sizeof(pmsFS)/sizeof(pmsFS[0]))
      |                          ^~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:148:26: note: in expansion of macro 'CNT_MSC'
  148 | char  pmsFS_display_name[CNT_MSC][20];
      |                          ^~~~~~~
MTP_TEST_AUDIO:146: error: 'pmsFS' was not declared in this scope
  146 | #define CNT_MSC  (sizeof(pmsFS)/sizeof(pmsFS[0]))
      |                                        ^~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:148:26: note: in expansion of macro 'CNT_MSC'
  148 | char  pmsFS_display_name[CNT_MSC][20];
      |                          ^~~~~~~
MTP_TEST_AUDIO:150: error: 'msController' does not name a type; did you mean 'MouseController'?
  150 | msController *pdrives[] {&drive1, &drive2, &drive3, &drive4};
      | ^~~~~~~~~~~~
      | MouseController
MTP_TEST_AUDIO:151: error: 'pdrives' was not declared in this scope
  151 | #define CNT_DRIVES  (sizeof(pdrives)/sizeof(pdrives[0]))
      |                             ^~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:152:31: note: in expansion of macro 'CNT_DRIVES'
  152 | bool drive_previous_connected[CNT_DRIVES] = {false, false, false, false};
      |                               ^~~~~~~~~~
MTP_TEST_AUDIO:151: error: 'pdrives' was not declared in this scope
  151 | #define CNT_DRIVES  (sizeof(pdrives)/sizeof(pdrives[0]))
      |                                             ^~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:152:31: note: in expansion of macro 'CNT_DRIVES'
  152 | bool drive_previous_connected[CNT_DRIVES] = {false, false, false, false};
      |                               ^~~~~~~~~~
MTP_TEST_AUDIO: In function 'void storage_configure()':
MTP_TEST_AUDIO:234: error: 'storage' was not declared in this scope
  234 |             storage.addFilesystem(sdx[ii], sd_str[ii]);
      |             ^~~~~~~
MTP_TEST_AUDIO:250: error: 'storage' was not declared in this scope
  250 |           storage.addFilesystem(sdx[ii], sd_str[ii]);
      |           ^~~~~~~
MTP_TEST_AUDIO:267: error: 'storage' was not declared in this scope
  267 |       storage.addFilesystem(ramfs[ii], lfs_ram_str[ii]);
      |       ^~~~~~~
MTP_TEST_AUDIO:282: error: 'storage' was not declared in this scope
  282 |       storage.addFilesystem(progmfs[ii], lfs_progm_str[ii]);
      |       ^~~~~~~
MTP_TEST_AUDIO:297: error: 'storage' was not declared in this scope
  297 |       storage.addFilesystem(qspifs[ii], lfs_qspi_str[ii]);
      |       ^~~~~~~
MTP_TEST_AUDIO:314: error: 'storage' was not declared in this scope
  314 |       storage.addFilesystem(spifs[ii], lfs_spi_str[ii]);
      |       ^~~~~~~
MTP_TEST_AUDIO:332: error: 'storage' was not declared in this scope
  332 |       storage.addFilesystem(nspifs[ii], nspi_str[ii]);
      |       ^~~~~~~
MTP_TEST_AUDIO:354: error: 'storage' was not declared in this scope
  354 |  myfs = storage.getStoreFS(0);
      |         ^~~~~~~
MTP_TEST_AUDIO: In function 'void setup()':
MTP_TEST_AUDIO:377: error: 'mtpd' was not declared in this scope
  377 |   mtpd.begin();
      |   ^~~~
MTP_TEST_AUDIO: In function 'void loop()':
MTP_TEST_AUDIO:411: error: 'storage' was not declared in this scope
  411 |       fsCount = storage.getFSCount();
      |                 ^~~~~~~
MTP_TEST_AUDIO:418: error: 'mtpd' was not declared in this scope
  418 |         DBGSerial.printf(":%u storage:%x name:%s fs:%x\n", ii, mtpd.Store2Storage(ii),
      |                                                                ^~~~
MTP_TEST_AUDIO:440: warning: unused variable 'errorMp3'
  440 |       int errorMp3 = 0;
      |           ^~~~~~~~
MTP_TEST_AUDIO:471: error: 'mtpd' was not declared in this scope
  471 |       mtpd.send_DeviceResetEvent();
      |       ^~~~
MTP_TEST_AUDIO:487: error: 'mtpd' was not declared in this scope
  487 |     mtpd.loop();
      |     ^~~~
MTP_TEST_AUDIO: In function 'void checkMSCChanges()':
MTP_TEST_AUDIO:506: error: 'USBMSCDevice' was not declared in this scope
  506 |   USBMSCDevice mscDrive;
      |   ^~~~~~~~~~~~
MTP_TEST_AUDIO:507: error: 'PFsLib' was not declared in this scope
  507 |   PFsLib pfsLIB;
      |   ^~~~~~
MTP_TEST_AUDIO:151: error: 'pdrives' was not declared in this scope
  151 | #define CNT_DRIVES  (sizeof(pdrives)/sizeof(pdrives[0]))
      |                             ^~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:508:25: note: in expansion of macro 'CNT_DRIVES'
  508 |   for (uint8_t i=0; i < CNT_DRIVES; i++) {
      |                         ^~~~~~~~~~
MTP_TEST_AUDIO:510: error: 'drive_previous_connected' was not declared in this scope
  510 |       if (!drive_previous_connected[i]) {
      |            ^~~~~~~~~~~~~~~~~~~~~~~~
MTP_TEST_AUDIO:511: error: 'mscDrive' was not declared in this scope
  511 |         if (mscDrive.begin(pdrives[i])) {
      |             ^~~~~~~~
MTP_TEST_AUDIO:513: error: 'pfsLIB' was not declared in this scope
  513 |           pfsLIB.mbrDmp(&mscDrive, (uint32_t)-1, Serial);
      |           ^~~~~~
MTP_TEST_AUDIO:520: error: 'drive_previous_connected' was not declared in this scope
  520 |       drive_previous_connected[i] = false;
      |       ^~~~~~~~~~~~~~~~~~~~~~~~
MTP_TEST_AUDIO:146: error: 'pmsFS' was not declared in this scope
  146 | #define CNT_MSC  (sizeof(pmsFS)/sizeof(pmsFS[0]))
      |                          ^~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:524:27: note: in expansion of macro 'CNT_MSC'
  524 |   for (uint8_t i = 0; i < CNT_MSC; i++) {
      |                           ^~~~~~~
MTP_TEST_AUDIO:525: error: 'pmsfs_store_ids' was not declared in this scope
  525 |     if (*pmsFS[i] && (pmsfs_store_ids[i] == 0xFFFFFFFFUL)) {
      |                       ^~~~~~~~~~~~~~~
MTP_TEST_AUDIO:530: error: 'pmsFS_display_name' was not declared in this scope
  530 |         snprintf(pmsFS_display_name[i], sizeof(pmsFS_display_name[i]), "MSC%d-%s", i, volName);
      |                  ^~~~~~~~~~~~~~~~~~
MTP_TEST_AUDIO:532: error: 'pmsFS_display_name' was not declared in this scope
  532 |         snprintf(pmsFS_display_name[i], sizeof(pmsFS_display_name[i]), "MSC%d", i);
      |                  ^~~~~~~~~~~~~~~~~~
MTP_TEST_AUDIO:533: error: 'storage' was not declared in this scope
  533 |       pmsfs_store_ids[i] = storage.addFilesystem(*pmsFS[i], pmsFS_display_name[i]);
      |                            ^~~~~~~
MTP_TEST_AUDIO:533: error: 'pmsFS_display_name' was not declared in this scope
  533 |       pmsfs_store_ids[i] = storage.addFilesystem(*pmsFS[i], pmsFS_display_name[i]);
      |                                                             ^~~~~~~~~~~~~~~~~~
MTP_TEST_AUDIO:536: error: 'mtpd' was not declared in this scope
  536 |       if (mtpd.send_StoreAddedEvent(pmsfs_store_ids[i]) < 0) send_device_reset = true;
      |           ^~~~
MTP_TEST_AUDIO:540: error: 'mtpd' was not declared in this scope
  540 |       if (mtpd.send_StoreRemovedEvent(pmsfs_store_ids[i]) < 0) send_device_reset = true;
      |           ^~~~
MTP_TEST_AUDIO:541: error: 'storage' was not declared in this scope
  541 |       storage.removeFilesystem(pmsfs_store_ids[i]);
      |       ^~~~~~~
MTP_TEST_AUDIO:546: error: 'mtpd' was not declared in this scope
  546 |   if (send_device_reset) mtpd.send_DeviceResetEvent();
      |                          ^~~~
MTP_TEST_AUDIO: In function 'void eraseFiles()':
MTP_TEST_AUDIO:583: error: 'mtpd' was not declared in this scope
  583 |   mtpd.send_DeviceResetEvent();
      |   ^~~~
MTP_TEST_AUDIO: In function 'void playFile(FS*, const char*)':
MTP_TEST_AUDIO:672: error: no matching function for call to 'AudioPlaySdWav::play(FS*&, const char*&)'
  672 |         errAudio = playWav.play(pfs, filename);
      |                    ~~~~~~~~~~~~^~~~~~~~~~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:672:32: note: there is 1 candidate
In file included from /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/Audio.h:128,
                 from /home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:3:
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/play_sd_wav.h:39:14: note: candidate 1: 'bool AudioPlaySdWav::play(const char*)'
   39 |         bool play(const char *filename);
      |              ^~~~
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/play_sd_wav.h:39:14: note: candidate expects 1 argument, 2 provided
MTP_TEST_AUDIO:698: error: no matching function for call to 'AudioPlaySdRaw::play(FS*&, const char*&)'
  698 |         errAudio = playRaw.play(pfs, filename);
      |                    ~~~~~~~~~~~~^~~~~~~~~~~~~~~
/home/wwatson/Arduino/libraries/Arduino-Teensy-Codec-lib/examples/mjs/MTP_TEST_AUDIO/MTP_TEST_AUDIO.ino:698:32: note: there is 1 candidate
In file included from /home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/Audio.h:127:
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/play_sd_raw.h:39:14: note: candidate 1: 'bool AudioPlaySdRaw::play(const char*)'
   39 |         bool play(const char *filename);
      |              ^~~~
/home/wwatson/arduino-1.8.19-TD1.62B3/hardware/teensy/avr/libraries/Audio/play_sd_raw.h:39:14: note: candidate expects 1 argument, 2 provided
So There is a lot of work to get this library fixed up.
All of the file systems (SD, MSC, LittleFS and EXT4) seem to be working without any compiler warnings or errors:
Code:
DiskIOMB

The original version of microBox found here:
 http://sebastian-duell.de/en/microbox/index.html

Initializing, please wait...

Type 'help' for a list of commands...

root@Teensy:/32GUSBEXFAT>ld

Found 8 logical drives.

Logical Drive Information For Attached Drives
Logical Drive #:  0: | Volume Label:      32GUSBEXFAT | valid: 1 | Drive Type: USB
Logical Drive #:  4: | Volume Label:      128GUSBEXT4 | valid: 1 | Drive Type: USB
Logical Drive #: 20: | Volume Label:             SDIO | valid: 1 | Drive Type: SDHC/SDXC
Logical Drive #: 29: | Volume Label:        QSPIFLASH | valid: 1 | Drive Type: LFS
Logical Drive #: 30: | Volume Label:        SPIFLASH5 | valid: 1 | Drive Type: LFS
Logical Drive #: 31: | Volume Label:        SPIFLASH6 | valid: 1 | Drive Type: LFS
Logical Drive #: 32: | Volume Label:         SPINAND3 | valid: 1 | Drive Type: LFS
Logical Drive #: 33: | Volume Label:         SPINAND4 | valid: 1 | Drive Type: LFS
8 Logical Drives Found
Default Logical Drive: /32GUSBEXFAT/ (0:)
root@Teensy:/32GUSBEXFAT>ls 29:
Volume Label: QSPIFLASH
Full Path: 29:
MSCtesting.bas                                 525    January 17 2024 21:06:49
bookmarks_2_25_26.html                      937507    January 01 2019 00:01:17
Free Space: 15597568
root@Teensy:/32GUSBEXFAT>ls 33:
Volume Label: SPINAND4
Full Path: 33:
32MEGfile.dat                             32768000      April 30 2023 11:45:58
armaged.wav                               56863276      April 30 2023 11:47:50
Free Space: 175243264
root@Teensy:/32GUSBEXFAT>
root@Teensy:/SDIO/>cd 20:Music
root@Teensy:/SDIO/Music>ls
Volume Label: SDIO
Full Path: /SDIO/Music
ThePaperboysMolinosI'veJustSeenaFace.wav  36380570    January 01 2019 00:01:10
ThePaperboysMolinos.wav                   35638654    January 01 2019 00:01:16
armaged.wav                               56863276    January 01 2019 00:01:24
WhateverYouWant.wav                        8388608    January 01 2019 00:01:24
SDTEST4.WAV                               17173152    January 01 2019 00:01:26
SDTEST3.WAV                               13617358    January 01 2019 00:01:28
SDTEST2.WAV                               16425698    January 01 2019 00:01:30
SDTEST1.WAV                               16787550    January 01 2019 00:01:34
YoureLazyJimmyBarnesJoeBonamassa.wav     102877858    January 01 2019 00:01:48
DeffLepardAnimal.wav                      43025216    January 01 2019 00:01:54
StatusQuoWhateverYouWant.wav              60148386    January 01 2019 00:02:04
Free Space: 56509726720
root@Teensy:/SDIO/Music>play armaged.wav
Playing: /Music/armaged.wav, type 2
root@Teensy:/SDIO/Music>
As you can see, most of the file systems are represented here. Hopefully MTP as well. This is testing with arduino-1.8.19. Have not tested with Arduino IDE yet.
Also have The Devboard 4&5 working again with this latest TD1.62B3. For those that use the Devboards I will post the changes needed. It has been simplified...

EDIT: TYPO!!
 
Ok, this codec stuff is on my list for 1.63. Like so many other awesome things that have fallen out of date, I want to either bring them directly into the bundled libraries (for version 1.63 release) or if they're still actively maintained, least add to my verify_all script and my list of stuff I manually test. Without regular testing on each release, libraries do get out of sync with the latest software. Someday I want to automate that testing (like the verify_all script does for compiler warnings & errors) ... but today it's just a low-tech written list on a paper notepad and probably won't become automated anytime soon.
 
I think the maybe-uninitialized warning should be nuked.
It's far too easy to trigger it by passing a variable by pointer to a function that writes to that pointer, i.e. it is intended to initialize the value. This has been a standard C programming practice for years and having it now trigger a warning is just silly.
 
I don't know if this is worth a pull request or not, but in USBHost_t36 storage examples, the "DriveInfoAll.ino" sketch fails to display any drive info after upload or power up. You must "*** enter any key to run again ***" to get the info displayed. The simple fix is to increase the delay after "mysub.begin();" from 500ms to 750ms in setup(). This is the whole updated sletch:
Code:
#include <USBHost_t36.h>

// Setup USBHost_t36 and as many HUB ports as needed.
USBHost myusb;
USBHub hub1(myusb);
USBHub hub2(myusb);
USBHub hub3(myusb);
USBHub hub4(myusb);

// Instances for the number of USB drives you are using.
USBDrive myDrive1(myusb);
USBDrive myDrive2(myusb);
USBDrive *drive_list[] = {&myDrive1, &myDrive2};

// Instances for accessing the files on each drive
USBFilesystem pf1(myusb);
USBFilesystem pf2(myusb);
USBFilesystem pf3(myusb);
USBFilesystem pf4(myusb);
USBFilesystem pf5(myusb);
USBFilesystem pf6(myusb);
USBFilesystem pf7(myusb);
USBFilesystem pf8(myusb);

USBFilesystem *filesystem_list[] = {&pf1, &pf2, &pf3, &pf4, &pf5, &pf6, &pf7, &pf8};


// Show USB drive information for the selected USB drive.
void printDriveInfo(USBDrive &drive) {
  // Print USB drive information.
  Serial.printf(F("       connected: %d\n"), drive.msDriveInfo.connected);
  Serial.printf(F("     initialized: %d\n"), drive.msDriveInfo.initialized);
  Serial.printf(F("   USB Vendor ID: %4.4x\n"), drive.msDriveInfo.idVendor);
  Serial.printf(F("  USB Product ID: %4.4x\n"), drive.msDriveInfo.idProduct);
  Serial.printf(F("      HUB Number: %d\n"), drive.msDriveInfo.hubNumber);
  Serial.printf(F("        HUB Port: %d\n"), drive.msDriveInfo.hubPort);
  Serial.printf(F("  Device Address: %d\n"), drive.msDriveInfo.deviceAddress);
  Serial.printf(F("Removable Device: "));
  if(drive.msDriveInfo.inquiry.Removable == 1) {
    Serial.printf(F("YES\n"));
  } else {
    Serial.printf(F("NO\n"));
  }
  Serial.printf(F("        VendorID: %8.8s\n"), drive.msDriveInfo.inquiry.VendorID);
  Serial.printf(F("       ProductID: %16.16s\n"), drive.msDriveInfo.inquiry.ProductID);
  Serial.printf(F("      RevisionID: %4.4s\n"), drive.msDriveInfo.inquiry.RevisionID);
  Serial.printf(F("         Version: %d\n"), drive.msDriveInfo.inquiry.Version);
  Serial.printf(F("    Sector Count: %ld\n"), drive.msDriveInfo.capacity.Blocks);
  Serial.printf(F("     Sector size: %ld\n"), drive.msDriveInfo.capacity.BlockSize);
  uint64_t drivesize = drive.msDriveInfo.capacity.Blocks;
  drivesize *= drive.msDriveInfo.capacity.BlockSize;
  Serial.print(F("   Disk Capacity: "));
  Serial.print(drivesize);
  Serial.println(" Bytes");
  drive.printPartionTable(Serial);
  Serial.println();
}

// Show USB filesystem information
void printFilesystemInfo(USBFilesystem &fs) {
  // print the type and size of the first FAT-type volume
  char volname[32];
  fs.mscfs.getVolumeLabel(volname, sizeof(volname));
  Serial.print("Volume name: ");
  Serial.println(volname);
  Serial.print("Volume type: FAT");
  Serial.println(fs.mscfs.fatType(), DEC);
  Serial.print("Cluster Size: ");
  Serial.print(fs.mscfs.bytesPerCluster());
  Serial.println(" bytes");
  Serial.print("Volume size: ");
  Serial.print(fs.totalSize());
  Serial.println(" bytes");
  Serial.print(" Space used: ");
  elapsedMillis ms = 0;
  Serial.print(fs.usedSize());
  Serial.print(" bytes  (");
  Serial.print(ms);
  Serial.println(" ms to compute)");
  Serial.println();
  Serial.println("Files:");
  fs.mscfs.ls(LS_R | LS_DATE | LS_SIZE);
  Serial.println();
}


void setup()
{
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for Arduino Serial Monitor to connect.
  }

  myusb.begin();
  delay(750);  // give drives a little time to startup <------ was delay(500);
}


void loop(void) {
   myusb.Task();
 
  // lets chec each of the drives.
  for (uint16_t drive_index = 0; drive_index < (sizeof(drive_list)/sizeof(drive_list[0])); drive_index++) {
    USBDrive *pdrive = drive_list[drive_index];
    if (*pdrive) {
      Serial.printf("\n === Drive index %d found ===\n", drive_index);
      if (!pdrive->filesystemsStarted()) {
        Serial.println("\t Partition ");
        pdrive->startFilesystems();
      }
      printDriveInfo(*pdrive);

      // Should we print all of the drive infos first or also print out the partitions
      // associated with this drive?  Try the later here...
      bool first_fs = true;
      for (uint16_t fs_index = 0; fs_index < (sizeof(filesystem_list)/sizeof(filesystem_list[0])); fs_index++) {
        USBFilesystem *pfs = filesystem_list[fs_index];
        if (*pfs && pfs->device == pdrive) {
          Serial.printf("=== File system (%u) ===\n", fs_index);
          if (first_fs) {
            const uint8_t *psz;
            if ((psz = pfs->manufacturer()) != nullptr) Serial.printf("\tManufacturer: %s\n", psz);
            if ((psz = pfs->product()) != nullptr) Serial.printf("\tProduct: %s\n", psz);
            if ((psz = pfs->serialNumber()) != nullptr) Serial.printf("\tSerial Number: %s\n", psz);
            first_fs = false;
          }
          printFilesystemInfo(*pfs);         
        }

      }
    }
  }
  while (Serial.read() != -1) ;
  Serial.println("\n *** enter any key to run again ***");
  while (Serial.read() == -1)  myusb.Task();
  while (Serial.read() != -1) ;
 
}
It might give the impression that the sketch is not working...
 
Back
Top