Skip to content

Commit 72d0aa6

Browse files
committed
Fix spurious connection and disconnection
* call USBHost::getHostInst() in connect(), so constructor order is not important and evey clock is already configured when called * on detach, the callback should be called, but this doesn't work if MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL is set to 1 (crashes in vtable), Since Callback.h is an header only file, redefine MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL to 0 before including (yes, it's a ugly hack)
1 parent 6c1e5a8 commit 72d0aa6

File tree

14 files changed

+37
-9
lines changed

14 files changed

+37
-9
lines changed

examples/DirList/DirList.ino

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,9 @@ void setup()
8585

8686
void loop()
8787
{
88+
delay(1000);
89+
// handle disconnection and reconnection
90+
if (!msd.connected()) {
91+
msd.connect();
92+
}
8893
}

examples/FileRead/FileRead.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,9 @@ void setup() {
7272
}
7373

7474
void loop() {
75-
75+
delay(1000);
76+
// handle disconnection and reconnection
77+
if (!msd.connected()) {
78+
msd.connect();
79+
}
7680
}

examples/FileWrite/FileWrite.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,9 @@ void setup() {
7171
}
7272

7373
void loop() {
74-
74+
delay(1000);
75+
// handle disconnection and reconnection
76+
if (!msd.connected()) {
77+
msd.connect();
78+
}
7579
}

examples/PortentaOTA/PortentaOTA.ino

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,9 @@ void setup()
198198

199199
void loop()
200200
{
201+
delay(1000);
202+
// handle disconnection and reconnection
203+
if (!msd.connected()) {
204+
msd.connect();
205+
}
201206
}

src/USBHost/USBDeviceConnected.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "USBHost/USBEndpoint.h"
2222
#include "USBHost/USBHostConf.h"
2323
#include "rtos.h"
24+
#undef MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL
25+
#define MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL 0
2426
#include "Callback.h"
2527

2628
class USBHostHub;

src/USBHost/USBEndpoint.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#ifndef USBENDPOINT_H
1818
#define USBENDPOINT_H
1919

20+
#undef MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL
21+
#define MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL 0
2022
#include "Callback.h"
2123
#include "USBHostTypes.h"
2224
#include "rtos.h"

src/USBHost/USBHostConf.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#ifndef USBHOST_CONF_H
1818
#define USBHOST_CONF_H
1919

20+
#undef MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL
21+
#define MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL 0
22+
#include "Callback.h"
2023
#include "Arduino.h"
2124

2225
#if defined(TARGET_STM)

src/USBHost3GModule/WANDongle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
WANDongle::WANDongle() : m_pInitializer(NULL), m_serialCount(0), m_totalInitializers(0)
3131
{
32-
host = USBHost::getHostInst();
3332
init();
3433
}
3534

@@ -48,6 +47,7 @@ bool WANDongle::tryConnect()
4847
USB_DBG("Device is already connected!");
4948
return true;
5049
}
50+
host = USBHost::getHostInst();
5151

5252
m_pInitializer = NULL;
5353

src/USBHostHID/USBHostKeyboard.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ static uint8_t keymap[4][0x39] = {
8787

8888
USBHostKeyboard::USBHostKeyboard()
8989
{
90-
host = USBHost::getHostInst();
9190
init();
9291
}
9392

@@ -116,6 +115,7 @@ bool USBHostKeyboard::connect()
116115
if (dev_connected) {
117116
return true;
118117
}
118+
host = USBHost::getHostInst();
119119

120120
for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
121121
if ((dev = host->getDevice(i)) != NULL) {

src/USBHostHID/USBHostMouse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
USBHostMouse::USBHostMouse()
2222
{
23-
host = USBHost::getHostInst();
2423
init();
2524
}
2625

@@ -56,6 +55,7 @@ bool USBHostMouse::connect()
5655
if (dev_connected) {
5756
return true;
5857
}
58+
host = USBHost::getHostInst();
5959

6060
for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
6161
if ((dev = host->getDevice(i)) != NULL) {

0 commit comments

Comments
 (0)