diff --git a/docs/README.md b/docs/README.md index aea0133..a6fd23d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,6 +8,7 @@ The library supports and is tested on: - Portenta H7 with Portenta Breakout Board (SD Card and USB Thumb Drive) - Portenta H7 with Portenta Vision Shield (SD Card) - Portenta Machine Control (USB Thumb Drive) +- Opta (USB Thumb Drive) ## Usage diff --git a/extras/tests/Arduino_POSIXStorage_Test/Arduino_POSIXStorage_Test.ino b/extras/tests/Arduino_POSIXStorage_Test/Arduino_POSIXStorage_Test.ino index ba89e36..4f5aee4 100644 --- a/extras/tests/Arduino_POSIXStorage_Test/Arduino_POSIXStorage_Test.ino +++ b/extras/tests/Arduino_POSIXStorage_Test/Arduino_POSIXStorage_Test.ino @@ -17,7 +17,9 @@ enum TestTypes : uint8_t TEST_PORTENTA_H7_SDCARD, TEST_PORTENTA_H7_USB, TEST_PORTENTA_MACHINE_CONTROL_SDCARD, - TEST_PORTENTA_MACHINE_CONTROL_USB + TEST_PORTENTA_MACHINE_CONTROL_USB, + TEST_OPTA_SDCARD, + TEST_OPTA_USB }; // !!! TEST CONFIGURATION !!! --> @@ -45,11 +47,11 @@ void setup() { int fileDescriptor = 0; int retVal = -1; - if ((TEST_PORTENTA_C33_USB == selectedTest) || (TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest)) + if ((TEST_PORTENTA_C33_USB == selectedTest) || (TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest) || (TEST_OPTA_USB == selectedTest)) { deviceName = DEV_USB; } - else if ((TEST_PORTENTA_C33_SDCARD == selectedTest) || (TEST_PORTENTA_H7_SDCARD == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest)) + else if ((TEST_PORTENTA_C33_SDCARD == selectedTest) || (TEST_PORTENTA_H7_SDCARD == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest) || (TEST_OPTA_SDCARD == selectedTest)) { deviceName = DEV_SDCARD; } @@ -59,18 +61,23 @@ void setup() { } Serial.begin(9600); - while (!Serial) ; // Wait for the serial port to be ready + // We can't have the Serial Monitor connected when we test USB on the Opta, and this will cause + // the test to freeze unless we skip it + if (TEST_OPTA_USB != selectedTest) + { + while (!Serial) ; // Wait for the serial port to be ready + } Serial.println("Testing started, please wait..."); Serial.println(); - if (TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest) + if ((TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest) || (TEST_OPTA_SDCARD == selectedTest)) { - // Machine Control no SD Card supported test --> + // Machine Control and Opta no SD Card supported test --> retVal = mount(DEV_SDCARD, FS_FAT, MNT_DEFAULT); if ((-1 != retVal) || (ENOTBLK != errno)) { - Serial.println("[FAIL] Machine Control no SD Card supported test failed"); + Serial.println("[FAIL] Machine Control and Opta no SD Card supported test failed"); } else { @@ -80,7 +87,7 @@ void setup() { (void) umount(DEV_SDCARD); for ( ; ; ) ; // Stop testing here } - // <-- Machine Control no SD Card supported test + // <-- Machine Control and Opta no SD Card supported test } // Register hotplug callback for SD Card test --> @@ -110,7 +117,7 @@ void setup() { // <-- Register nullptr callback test } - if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest)) + if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest) || (TEST_OPTA_USB == selectedTest)) { // Register unsupported callback test --> retVal = register_hotplug_callback(DEV_USB, usbCallback); @@ -135,7 +142,7 @@ void setup() { delay(500); } } - else if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest)) + else if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest) || (TEST_OPTA_USB == selectedTest)) { // These boards don't support hotplug callbacks, so loop on mount() tries while (0 != mount(DEV_USB, FS_FAT, MNT_DEFAULT)) { @@ -457,6 +464,25 @@ void setup() { Serial.println("FAILURE: Finished with errors (see list above for details)"); } // <-- Final report + + // Opta final report --> + if (TEST_OPTA_USB == selectedTest) + { + (void) mount(deviceName, FS_FAT, MNT_DEFAULT); + FILE *logFile = fopen("/usb/testlog.txt", "w"); + if (true == allTestsOk) + { + fprintf(logFile, "SUCCESS: Finished without errors"); + fclose(logFile); + } + else + { + fprintf(logFile, "FAILURE: Finished with errors"); + fclose(logFile); + } + (void) umount(deviceName); + } + // <-- } void loop() { diff --git a/library.properties b/library.properties index 70e8e2f..d23801a 100644 --- a/library.properties +++ b/library.properties @@ -2,7 +2,7 @@ name=Arduino_POSIXStorage version=1.0.0 author=Arduino maintainer=Arduino -sentence=POSIX Storage Library for the Portenta C33, Portenta H7, and Portenta Machine Control +sentence=POSIX Storage Library for the Portenta C33, Portenta H7, Portenta Machine Control, and Opta paragraph=One-stop solution for using POSIX storage functions with SD cards and USB thumb drives with a unified API and without the need for separate libraries. category=Data Storage url=https://github.com/arduino-libraries/Arduino_POSIXStorage/ diff --git a/src/Arduino_POSIXStorage.cpp b/src/Arduino_POSIXStorage.cpp index 501d1cc..4c0d451 100644 --- a/src/Arduino_POSIXStorage.cpp +++ b/src/Arduino_POSIXStorage.cpp @@ -16,6 +16,7 @@ * - Portenta H7 with Portenta Breakout Board (SD Card and USB Thumb Drive) * - Portenta H7 with Portenta Vision Shield (SD Card) * - Portenta Machine Control (USB Thumb Drive) +* - Opta (USB Thumb Drive) * * After making changes: * @@ -67,7 +68,6 @@ #elif defined(ARDUINO_OPTA) #include #include - #include #else #error "The POSIXStorage library does not support this board" #endif @@ -240,7 +240,7 @@ void deleteDevice(const enum StorageDevices deviceName, struct DeviceFileSystemC // The USBHostMSD class for the H7 doesn't correctly support object destruction, so we only delete // the device object on other platforms or if the device is an SD Card --> bool deleteDevice = false; -#if (!defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_OPTA)) +#if (!(defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_OPTA))) (void) deviceName; // Silence -Wunused-parameter, because this variable is only used on the H7 deleteDevice = true; #else diff --git a/src/Arduino_POSIXStorage.h b/src/Arduino_POSIXStorage.h index 1c2b31f..d38bdbd 100644 --- a/src/Arduino_POSIXStorage.h +++ b/src/Arduino_POSIXStorage.h @@ -17,6 +17,7 @@ * - Portenta H7 with Portenta Breakout Board (SD Card and USB Thumb Drive) * - Portenta H7 with Portenta Vision Shield (SD Card) * - Portenta Machine Control (USB Thumb Drive) +* - Opta (USB Thumb Drive) * * After making changes: *