@@ -18,8 +18,8 @@ enum TestTypes : uint8_t
18
18
TEST_PORTENTA_H7_USB,
19
19
TEST_PORTENTA_MACHINE_CONTROL_SDCARD,
20
20
TEST_PORTENTA_MACHINE_CONTROL_USB,
21
- TEST_OPTA_SDCARD,
22
- TEST_OPTA_USB
21
+ TEST_OPTA_SDCARD, // Not currently implemented
22
+ TEST_OPTA_USB // Logging to thumb drive
23
23
};
24
24
25
25
// !!! TEST CONFIGURATION !!! -->
@@ -35,12 +35,18 @@ constexpr enum TestTypes selectedTest = TEST_PORTENTA_C33_SDCARD;
35
35
// <-- !!! TEST CONFIGURATION !!!
36
36
37
37
volatile bool usbAttached = false ;
38
+ volatile bool usbDetached = false ;
38
39
39
40
void usbCallback ()
40
41
{
41
42
usbAttached = true ;
42
43
}
43
44
45
+ void usbCallback2 ()
46
+ {
47
+ usbDetached = true ;
48
+ }
49
+
44
50
void setup () {
45
51
bool allTestsOk = true ;
46
52
enum StorageDevices deviceName;
@@ -71,22 +77,24 @@ void setup() {
71
77
Serial.println (" Testing started, please wait..." );
72
78
Serial.println ();
73
79
74
- if (( TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest) || (TEST_OPTA_SDCARD == selectedTest) )
80
+ if (TEST_PORTENTA_MACHINE_CONTROL_SDCARD == selectedTest)
75
81
{
76
- // Machine Control and Opta no SD Card supported test -->
82
+ // Machine Control no SD Card supported test -->
77
83
retVal = mount (DEV_SDCARD, FS_FAT, MNT_DEFAULT);
78
84
if ((-1 != retVal) || (ENOTBLK != errno))
79
85
{
80
- Serial.println (" [FAIL] Machine Control and Opta no SD Card supported test failed" );
86
+ Serial.println (" [FAIL] Machine Control no SD Card supported test failed" );
87
+ Serial.println ();
88
+ Serial.println (" FAILURE: Finished with errors (see list above for details)" );
81
89
}
82
90
else
83
91
{
84
92
Serial.println (" Testing complete." );
85
93
Serial.println ();
86
94
Serial.println (" SUCCESS: Finished without errors" );
87
95
(void ) umount (DEV_SDCARD);
88
- for ( ; ; ) ; // Stop testing here
89
96
}
97
+ for ( ; ; ) ; // Stop testing here
90
98
// <-- Machine Control and Opta no SD Card supported test
91
99
}
92
100
@@ -104,60 +112,55 @@ void setup() {
104
112
}
105
113
// <-- Register hotplug callback for SD Card test
106
114
107
- if (TEST_PORTENTA_C33_USB == selectedTest)
115
+ // Register unplug callback for SD Card test -->
116
+ if (DEV_SDCARD == deviceName)
108
117
{
109
- // Register nullptr callback test -->
110
- retVal = register_hotplug_callback (DEV_USB, nullptr );
111
- if ((-1 != retVal) || (EFAULT != errno))
118
+ // Using usbCallback2() is fine because it doesn't get registered anyway
119
+ retVal = register_unplug_callback (DEV_SDCARD, usbCallback2 );
120
+ if ((-1 != retVal) || (ENOTSUP != errno))
112
121
{
113
122
allTestsOk = false ;
114
- Serial.print (" [FAIL] Register nullptr callback test failed" );
123
+ Serial.print (" [FAIL] Register unplug callback for SD Card test failed" );
115
124
Serial.println ();
116
125
}
117
- // <-- Register nullptr callback test
118
126
}
127
+ // <-- Register unplug callback for SD Card test
119
128
120
- if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest) || (TEST_OPTA_USB == selectedTest) )
129
+ if (DEV_USB == deviceName )
121
130
{
122
- // Register unsupported callback test -->
123
- retVal = register_hotplug_callback (DEV_USB, usbCallback );
124
- if ((-1 != retVal) || (ENOTSUP != errno))
131
+ // Register nullptr callback test (hotplug) -->
132
+ retVal = register_hotplug_callback (DEV_USB, nullptr );
133
+ if ((-1 != retVal) || (EFAULT != errno))
125
134
{
126
135
allTestsOk = false ;
127
- Serial.println (" [FAIL] Register unsupported callback test" );
136
+ Serial.print (" [FAIL] Register nullptr callback test failed (hotplug) " );
128
137
Serial.println ();
129
138
}
130
- // <-- Register unsupported callback test
139
+ // <-- Register nullptr callback test (hotplug)
140
+
141
+ // Register nullptr callback test (unplug) -->
142
+ retVal = register_unplug_callback (DEV_USB, nullptr );
143
+ if ((-1 != retVal) || (EFAULT != errno))
144
+ {
145
+ allTestsOk = false ;
146
+ Serial.print (" [FAIL] Register nullptr callback test failed (unplug)" );
147
+ Serial.println ();
148
+ }
149
+ // <-- Register nullptr callback test (unplug)
131
150
}
132
151
133
- // This isn't a test, just wait for a USB thumb drive -->
152
+ // Wait for a USB thumb drive -->
134
153
if (DEV_USB == deviceName)
135
154
{
136
155
Serial.println (" Please insert a thumb drive" );
137
- if (TEST_PORTENTA_C33_USB == selectedTest)
138
- {
139
- // This board supports hotplug callbacks
140
- (void ) register_hotplug_callback (DEV_USB, usbCallback);
141
- while (false == usbAttached) {
142
- delay (500 );
143
- }
144
- }
145
- else if ((TEST_PORTENTA_H7_USB == selectedTest) || (TEST_PORTENTA_MACHINE_CONTROL_USB == selectedTest) || (TEST_OPTA_USB == selectedTest))
146
- {
147
- // These boards don't support hotplug callbacks, so loop on mount() tries
148
- while (0 != mount (DEV_USB, FS_FAT, MNT_DEFAULT)) {
149
- delay (500 );
150
- }
151
- (void ) umount (DEV_USB);
152
- }
153
- else
154
- {
155
- for ( ; ;) ; // Shouldn't get here unless there's a bug in the test code
156
+ (void ) register_hotplug_callback (DEV_USB, usbCallback);
157
+ while (false == usbAttached) {
158
+ delay (500 );
156
159
}
157
160
Serial.println (" Thank you!" );
158
161
Serial.println ();
159
162
}
160
- // <-- This isn't a test, just wait for a USB thumb drive
163
+ // <-- Wait for a USB thumb drive
161
164
162
165
#if defined(PERFORM_FORMATTING_TESTS)
163
166
Serial.println (" The formatting tests you selected can take a while to complete" );
@@ -335,26 +338,35 @@ void setup() {
335
338
(void ) umount (deviceName);
336
339
// <-- mount() when already mounted test
337
340
338
- if (TEST_PORTENTA_C33_USB == selectedTest )
341
+ if (DEV_USB == deviceName )
339
342
{
340
- // Register multiple callbacks test -->
343
+ // Register multiple callbacks test (hotplug) -->
341
344
retVal = register_hotplug_callback (DEV_USB, usbCallback);
342
345
if ((-1 != retVal) || (EBUSY != errno))
343
346
{
344
347
allTestsOk = false ;
345
- Serial.println (" [FAIL] Register multiple callbacks test failed" );
348
+ Serial.println (" [FAIL] Register multiple callbacks test failed (hotplug) " );
346
349
}
347
- // <-- Register multiple callbacks test
350
+ // <-- Register multiple callbacks test (hotplug)
348
351
}
349
352
350
- // Deregister callback not supported test -->
353
+ // Deregister callback not supported test (hotplug) -->
351
354
retVal = deregister_hotplug_callback (DEV_USB);
352
355
if ((-1 != retVal) || (ENOSYS != errno))
353
356
{
354
357
allTestsOk = false ;
355
- Serial.println (" [FAIL] Deregister callback not supported test failed" );
358
+ Serial.println (" [FAIL] Deregister callback not supported test failed (hotplug) " );
356
359
}
357
- // <-- Deregister callback not supported test
360
+ // <-- Deregister callback not supported test (hotplug)
361
+
362
+ // Deregister callback not supported test (unplug) -->
363
+ retVal = deregister_unplug_callback (DEV_USB);
364
+ if ((-1 != retVal) || (ENOSYS != errno))
365
+ {
366
+ allTestsOk = false ;
367
+ Serial.println (" [FAIL] Deregister callback not supported test failed (unplug)" );
368
+ }
369
+ // <-- Deregister callback not supported test (unplug)
358
370
359
371
// Remove before persistent storage test -->
360
372
(void ) mount (deviceName, FS_FAT, MNT_DEFAULT);
@@ -451,6 +463,35 @@ void setup() {
451
463
(void ) umount (deviceName);
452
464
// <-- Persistent storage test
453
465
466
+ // These tests can't be performed on the Opta because we log to USB
467
+ if (TEST_OPTA_USB != selectedTest)
468
+ {
469
+ // Wait for USB thumb drive removal -->
470
+ if (DEV_USB == deviceName)
471
+ {
472
+ Serial.println ();
473
+ Serial.println (" Please remove the thumb drive" );
474
+ (void ) register_unplug_callback (DEV_USB, usbCallback2);
475
+ while (false == usbDetached) {
476
+ delay (500 );
477
+ }
478
+ Serial.println (" Thank you!" );
479
+ }
480
+ // <-- Wait for USB thumb drive removal
481
+
482
+ if (DEV_USB == deviceName)
483
+ {
484
+ // Register multiple callbacks test (unplug) -->
485
+ retVal = register_unplug_callback (DEV_USB, usbCallback2);
486
+ if ((-1 != retVal) || (EBUSY != errno))
487
+ {
488
+ allTestsOk = false ;
489
+ Serial.println (" [FAIL] Register multiple callbacks test failed (unplug)" );
490
+ }
491
+ // <-- Register multiple callbacks test (unplug)
492
+ }
493
+ }
494
+
454
495
// Final report -->
455
496
Serial.println ();
456
497
Serial.println (" Testing complete." );
@@ -468,7 +509,7 @@ void setup() {
468
509
// Opta final report -->
469
510
if (TEST_OPTA_USB == selectedTest)
470
511
{
471
- (void ) mount (deviceName , FS_FAT, MNT_DEFAULT);
512
+ (void ) mount (DEV_USB , FS_FAT, MNT_DEFAULT);
472
513
FILE *logFile = fopen (" /usb/testlog.txt" , " w" );
473
514
if (true == allTestsOk)
474
515
{
@@ -480,7 +521,7 @@ void setup() {
480
521
fprintf (logFile, " FAILURE: Finished with errors" );
481
522
fclose (logFile);
482
523
}
483
- (void ) umount (deviceName );
524
+ (void ) umount (DEV_USB );
484
525
}
485
526
// <--
486
527
}
0 commit comments