Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: F401RE-USBHostMIDI_RecieveExample
Fork of F401RE-USBHost by
Diff: USBHostMSD/USBHostMSD.cpp
- Revision:
- 8:6463cd1964c0
- Parent:
- 3:a3872f7593e2
- Child:
- 9:7f9f64cf5ded
diff -r 9a20482c9a7a -r 6463cd1964c0 USBHostMSD/USBHostMSD.cpp
--- a/USBHostMSD/USBHostMSD.cpp Tue Jan 28 06:50:12 2014 +0000
+++ b/USBHostMSD/USBHostMSD.cpp Fri Jan 31 13:45:07 2014 +0000
@@ -29,7 +29,6 @@
{
host = USBHost::getHostInst();
init();
- report = &host->report;
}
void USBHostMSD::init() {
@@ -40,22 +39,84 @@
dev_connected = false;
blockSize = 0;
blockCount = 0;
- msd_intf = 1; //msd_intf = -1;
+ msd_intf = -1;
msd_device_found = false;
disk_init = false;
dev_connected = false;
nb_ep = 0;
}
-
bool USBHostMSD::connected()
{
- return true;
+ return dev_connected;
}
bool USBHostMSD::connect()
{
- return true;
+ if (dev_connected) {
+ return true;
+ }
+
+ for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
+ if ((dev = host->getDevice(i)) != NULL) {
+
+ //USB_DBG("Trying to connect MSD device dev=%p\n", dev);
+
+ if(host->enumerate(dev, this))
+ break;
+
+ if (msd_device_found) {
+ bulk_in = dev->getEndpoint(msd_intf, BULK_ENDPOINT, IN);
+ bulk_out = dev->getEndpoint(msd_intf, BULK_ENDPOINT, OUT);
+
+ if (!bulk_in || !bulk_out)
+ continue;
+
+ USB_INFO("New MSD device: VID:%04x PID:%04x [dev: %p - intf: %d]", dev->getVid(), dev->getPid(), dev, msd_intf);
+ dev->setName("MSD", msd_intf);
+ host->registerDriver(dev, msd_intf, this, &USBHostMSD::init);
+
+ dev_connected = true;
+ return true;
+ }
+ } //if()
+ } //for()
+ init();
+ return false;
+}
+
+/*virtual*/ void USBHostMSD::setVidPid(uint16_t vid, uint16_t pid)
+{
+ USB_DBG2("vid:%04x pid:%04x", vid, pid);
+ // we don't check VID/PID for MSD driver
+}
+
+/*virtual*/ bool USBHostMSD::parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol) //Must return true if the interface should be parsed
+{
+ USB_DBG2("intf: %d class: %02x %02x %02x", intf_nb, intf_class, intf_subclass, intf_protocol);
+
+ if ((msd_intf == -1) &&
+ (intf_class == MSD_CLASS) &&
+ (intf_subclass == 0x06) &&
+ (intf_protocol == 0x50)) {
+ msd_intf = intf_nb;
+ return true;
+ }
+ return false;
+}
+
+/*virtual*/ bool USBHostMSD::useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) //Must return true if the endpoint will be used
+{
+ USB_DBG2("intf_nb=%d type=%d dir=%d", intf_nb, type, dir);
+ if (intf_nb == msd_intf) {
+ if (type == BULK_ENDPOINT) {
+ nb_ep++;
+ if (nb_ep == 2)
+ msd_device_found = true;
+ return true;
+ }
+ }
+ return false;
}
int USBHostMSD::testUnitReady() {
