Trying to compile code provided in README to test MSC.
#include "usb.h"
static const char *const readme_txt =
"This is esp32usb'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/atanisoft/esp32usb";
extern "C" void app_main(void)
{
init_usb_subsystem();
configure_usb_descriptor_str(USB_DESC_MANUFACTURER, "esp32usb");
configure_usb_descriptor_str(USB_DESC_PRODUCT, "esp32usb Device");
configure_usb_descriptor_str(USB_DESC_SERIAL_NUMBER, "1234567890");
configure_virtual_disk("esp32usb", 0x0100);
add_readonly_file_to_virtual_disk("readme.txt", readme_txt, strlen(readme_txt));
add_partition_to_virtual_disk("spiffs", "spiffs.bin");
add_firmware_to_virtual_disk();
start_usb_task();
}
Bootloader binary size 0x5190 bytes. 0x2e70 bytes (36%) free.
[1053/1055] Linking CXX executable tinyusb-msc-test.elf
FAILED: tinyusb-msc-test.elf
cmd.exe /C "cd . && C:\Users\JM\.espressif\tools\xtensa-esp32s3-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32s3-elf\bin\xtensa-esp32s3-elf-g++.exe -mlongcalls @CMakeFiles\tinyusb-msc-test.elf.rsp -o tinyusb-msc-test.elf && cd ."
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj):F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:279: multiple definition of `ota_update_partition'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:(.bss+0x0): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `configure_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:342: multiple definition of `configure_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0x17c): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_inquiry_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:694: multiple definition of `tud_msc_inquiry_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xbd8): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_test_unit_ready_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:702: multiple definition of `tud_msc_test_unit_ready_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xc68): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_capacity_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:710: multiple definition of `tud_msc_capacity_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xc74): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_read10_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:727: multiple definition of `tud_msc_read10_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xce0): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_write10_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:887: multiple definition of `tud_msc_write10_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0x1188): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `tud_msc_scsi_cb':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:1042: multiple definition of `tud_msc_scsi_cb'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0x17e4): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `register_virtual_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*, unsigned int, bool, esp_partition_t const*)':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:424: multiple definition of `register_virtual_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*, unsigned int, bool, esp_partition_t const*)'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0x428): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `add_readonly_file_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*, unsigned int)':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:607: multiple definition of `add_readonly_file_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*, unsigned int)'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xa1c): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `add_partition_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:614: multiple definition of `add_partition_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xa64): first defined here
c:/users/jm/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: esp-idf/main/libmain.a(usb_msc.cpp.obj): in function `add_firmware_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
F:\Tools\espressif\test-examples\tinyusb-msc-test\build/../components/esp32usb/src/usb_msc.cpp:638: multiple definition of `add_firmware_to_virtual_disk(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'; CMakeFiles/tinyusb-msc-test.elf.dir/components/esp32usb/src/usb_msc.cpp.obj:usb_msc.cpp:(.text+0xb2c): first defined here
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
It's my first time trying to implement an USB app and I'm completely lost. I have seen many working examples using Arduino code but I need to reuse code from other esp-idf firmware I have developed. I would like to implement USB MSC with SD Card through SPI. Could I use your component or should I add raw tinyusb and rewrite all MSC callbacks to accomodate read/write... to SD Card API?
Thanks in advance. Any suggestion would be appreciated.