local fork (temporary)

Dependents:   VodafoneUSBModem_bleedingedge2

Fork of USBHostWANDongle_bleedingedge by Donatien Garnier

Committer:
donatien
Date:
Fri Jul 06 08:53:17 2012 +0000
Revision:
3:4394986752db
Parent:
2:a8b2d0cd9bbd
Child:
5:3189db174f6b
Increased limits for number of supported USB endpoints/interfaces

Who changed what in which revision?

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