USB Host WAN Dongle library
Fork of USBHostWANDongle_bleedingedge by
Diff: USB3GModule/WANDongle.cpp
- Revision:
- 3:4394986752db
- Parent:
- 2:a8b2d0cd9bbd
- Child:
- 4:d229ebfb85c4
--- a/USB3GModule/WANDongle.cpp Tue Jun 26 13:43:54 2012 +0000 +++ b/USB3GModule/WANDongle.cpp Fri Jul 06 08:53:17 2012 +0000 @@ -28,7 +28,7 @@ #include "WANDongle.h" #include "WANDongleInitializer.h" -WANDongle::WANDongle() : cb_tx_en(false), cb_rx_en(false), listener(NULL), m_serialCount(0) +WANDongle::WANDongle() : m_serialCount(0) { host = USBHost::getHostInst(); init(); @@ -63,27 +63,45 @@ DBG("Enumerate"); host->enumerate(dev); - WANDongleInitializer* initializer = getInitializers(); + DBG("Device has VID:%04x PID%04x", dev->getVid(), dev->getPid()); - while(initializer++) + WANDongleInitializer** initializer = WANDongleInitializer::getInitializers(host); + + while((*initializer)) { - if ((dev->getVid() == initializer->getSerialVid()) && (dev->getPid() == initializer->getSerialPid())) + DBG("*initializer=%p", *initializer); + DBG("(*initializer)->getSerialVid()=%04x", (*initializer)->getSerialVid()); + DBG("(*initializer)->getSerialPid()=%04x", (*initializer)->getSerialPid()); + if ((dev->getVid() == (*initializer)->getSerialVid()) && (dev->getPid() == (*initializer)->getSerialPid())) { + DBG("The dongle is in virtual serial mode"); host->registerDriver(dev, 0, this, &WANDongle::init); - m_serialCount = initializer->getSerialPortCount(); + m_serialCount = (*initializer)->getSerialPortCount(); + if( m_serialCount > WANDONGLE_MAX_SERIAL_PORTS ) + { + m_serialCount = WANDONGLE_MAX_SERIAL_PORTS; + } for(int j = 0; j < m_serialCount; j++) { - m_serial[j].connect( initializer->getEp(dev, j, false), initializer->getEp(dev, j, true) ); + DBG("Connecting serial port #%d", j+1); + DBG("Ep %p", (*initializer)->getEp(dev, j, false)); + DBG("Ep %p", (*initializer)->getEp(dev, j, true)); + m_serial[j].connect( dev, (*initializer)->getEp(dev, j, false), (*initializer)->getEp(dev, j, true) ); } + + DBG("Device connected"); + dev_connected = true; host->unlock(); + + return true; } - else if ((dev->getVid() == initializer->getMSDVid()) && (dev->getPid() == initializer->getMSDPid())) + else if ((dev->getVid() == (*initializer)->getMSDVid()) && (dev->getPid() == (*initializer)->getMSDPid())) { DBG("Vodafone K3370 dongle detected in MSD mode"); //Try to switch - if( initializer->switchMode() ) + if( (*initializer)->switchMode(dev) ) { DBG("Switched OK"); host->unlock(); @@ -96,6 +114,7 @@ return false; } } + (*initializer)++; } //while() } //if() } //for() @@ -103,7 +122,7 @@ return false; } -IUSBHostSerial* WANDongle::getSerial(int index) +IUSBHostSerial& WANDongle::getSerial(int index) { return m_serial[index]; } @@ -117,5 +136,8 @@ void WANDongle::init() { dev_connected = false; + for(int i = 0; i < WANDONGLE_MAX_SERIAL_PORTS; i++) + { + m_serial[i].init(host); + } } -