USB Host WAN Dongle library

Fork of USBHostWANDongle_bleedingedge by Donatien Garnier

Committer:
donatien
Date:
Tue Jun 26 13:43:54 2012 +0000
Revision:
2:a8b2d0cd9bbd
Child:
3:4394986752db
Test with multiple interfaces

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 2:a8b2d0cd9bbd 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
donatien 2:a8b2d0cd9bbd 2 *
donatien 2:a8b2d0cd9bbd 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
donatien 2:a8b2d0cd9bbd 4 * and associated documentation files (the "Software"), to deal in the Software without
donatien 2:a8b2d0cd9bbd 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
donatien 2:a8b2d0cd9bbd 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
donatien 2:a8b2d0cd9bbd 7 * Software is furnished to do so, subject to the following conditions:
donatien 2:a8b2d0cd9bbd 8 *
donatien 2:a8b2d0cd9bbd 9 * The above copyright notice and this permission notice shall be included in all copies or
donatien 2:a8b2d0cd9bbd 10 * substantial portions of the Software.
donatien 2:a8b2d0cd9bbd 11 *
donatien 2:a8b2d0cd9bbd 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
donatien 2:a8b2d0cd9bbd 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
donatien 2:a8b2d0cd9bbd 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
donatien 2:a8b2d0cd9bbd 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 2:a8b2d0cd9bbd 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
donatien 2:a8b2d0cd9bbd 17 */
donatien 2:a8b2d0cd9bbd 18
donatien 2:a8b2d0cd9bbd 19 #define __DEBUG__ 4 //Maximum verbosity
donatien 2:a8b2d0cd9bbd 20 #ifndef __MODULE__
donatien 2:a8b2d0cd9bbd 21 #define __MODULE__ "WANDongleInitializer.cpp"
donatien 2:a8b2d0cd9bbd 22 #endif
donatien 2:a8b2d0cd9bbd 23
donatien 2:a8b2d0cd9bbd 24 #include "dbg.h"
donatien 2:a8b2d0cd9bbd 25
donatien 2:a8b2d0cd9bbd 26 #include <cstdint>
donatien 2:a8b2d0cd9bbd 27 using std::uint16_t;
donatien 2:a8b2d0cd9bbd 28
donatien 2:a8b2d0cd9bbd 29 #include "WANDongleInitializer.h"
donatien 2:a8b2d0cd9bbd 30
donatien 2:a8b2d0cd9bbd 31 WANDongleInitializer::WANDongleInitializer(USBHost* pHost) : m_pHost(pHost)
donatien 2:a8b2d0cd9bbd 32 {
donatien 2:a8b2d0cd9bbd 33
donatien 2:a8b2d0cd9bbd 34 }
donatien 2:a8b2d0cd9bbd 35
donatien 2:a8b2d0cd9bbd 36 WANDongleInitializer[] WANDongleInitializer::getInitializers()
donatien 2:a8b2d0cd9bbd 37 {
donatien 2:a8b2d0cd9bbd 38 static VodafoneK3770Initializer vodafoneK3770;
donatien 2:a8b2d0cd9bbd 39 const static WANDongleInitializer list[] = { &vodafoneK3770, NULL };
donatien 2:a8b2d0cd9bbd 40 return list;
donatien 2:a8b2d0cd9bbd 41 }
donatien 2:a8b2d0cd9bbd 42
donatien 2:a8b2d0cd9bbd 43 //Huawei K3770 (Vodafone)
donatien 2:a8b2d0cd9bbd 44 const static uint8_t vodafone_k3770_switch_packet[] = {
donatien 2:a8b2d0cd9bbd 45 0x55, 0x53, 0x42, 0x43, 0x12, 0x34, 0x56, 0x78, 0, 0, 0, 0, 0, 0, 0, 0x11, 0x06, 0x20, 0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
donatien 2:a8b2d0cd9bbd 46 };
donatien 2:a8b2d0cd9bbd 47
donatien 2:a8b2d0cd9bbd 48 VodafoneK3770Initializer::VodafoneK3770Initializer(USBHost* pHost) : WANDongleInitializer(pHost)
donatien 2:a8b2d0cd9bbd 49 {
donatien 2:a8b2d0cd9bbd 50
donatien 2:a8b2d0cd9bbd 51 }
donatien 2:a8b2d0cd9bbd 52
donatien 2:a8b2d0cd9bbd 53 uint16_t VodafoneK3770Initializer::getMSDVid() { return 0x12D1; }
donatien 2:a8b2d0cd9bbd 54 uint16_t VodafoneK3770Initializer::getMSDPid() { return 0x14D1; }
donatien 2:a8b2d0cd9bbd 55
donatien 2:a8b2d0cd9bbd 56 uint16_t VodafoneK3770Initializer::getSerialVid() { return 0x12D1; }
donatien 2:a8b2d0cd9bbd 57 uint16_t VodafoneK3770Initializer::getSerialPid() { return 0x14C9; }
donatien 2:a8b2d0cd9bbd 58
donatien 2:a8b2d0cd9bbd 59 bool VodafoneK3770Initializer::switchMode(USBDeviceConnected* pDev)
donatien 2:a8b2d0cd9bbd 60 {
donatien 2:a8b2d0cd9bbd 61 for (int i = 0; i < pDev->getNbInterface(); i++)
donatien 2:a8b2d0cd9bbd 62 {
donatien 2:a8b2d0cd9bbd 63 if (pDev->getInterface(j)->intf_class == MSD_CLASS)
donatien 2:a8b2d0cd9bbd 64 {
donatien 2:a8b2d0cd9bbd 65 Endpoint* pEp = pDev->getEndpoint(i, BULK_ENDPOINT, OUT);
donatien 2:a8b2d0cd9bbd 66 if ( pEp != NULL )
donatien 2:a8b2d0cd9bbd 67 {
donatien 2:a8b2d0cd9bbd 68 DBG("MSD descriptor found on device %p, intf %d, will now try to switch into serial mode", (void *)pDev, i);
donatien 2:a8b2d0cd9bbd 69 m_pHost->bulkWrite(pDev, pEp, vodafone_k3770_switch_packet, 31);
donatien 2:a8b2d0cd9bbd 70 return true;
donatien 2:a8b2d0cd9bbd 71 }
donatien 2:a8b2d0cd9bbd 72 }
donatien 2:a8b2d0cd9bbd 73 return false;
donatien 2:a8b2d0cd9bbd 74 }
donatien 2:a8b2d0cd9bbd 75
donatien 2:a8b2d0cd9bbd 76 Endpoint* VodafoneK3770Initializer::getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx)
donatien 2:a8b2d0cd9bbd 77 {
donatien 2:a8b2d0cd9bbd 78 return dev->getEndpoint(0, BULK_ENDPOINT, tx?OUT:IN, serialPortNumber);
donatien 2:a8b2d0cd9bbd 79 }
donatien 2:a8b2d0cd9bbd 80
donatien 2:a8b2d0cd9bbd 81 int VodafoneK3770Initializer::getSerialPortCount()
donatien 2:a8b2d0cd9bbd 82 {
donatien 2:a8b2d0cd9bbd 83 return 3;
donatien 2:a8b2d0cd9bbd 84 }
donatien 2:a8b2d0cd9bbd 85