local fork (temporary)

Dependents:   VodafoneUSBModem_bleedingedge2

Fork of USBHostWANDongle_bleedingedge by Donatien Garnier

Committer:
donatien
Date:
Mon Feb 25 11:48:26 2013 +0000
Revision:
18:7d5242aa7b95
Parent:
13:c154e7f2e42f
Child:
25:3184f71557bf
Added support for Huawei K3772 dongle (this is what seems to be in the VF stores these days) - PPP tested OK

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 10:08bce4cd973a 1 /* Copyright (c) 2010-2012 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 10:08bce4cd973a 19 #define __DEBUG__ 0
donatien 3:4394986752db 20 #ifndef __MODULE__
donatien 3:4394986752db 21 #define __MODULE__ "WANDongleInitializer.cpp"
donatien 3:4394986752db 22 #endif
donatien 3:4394986752db 23
donatien 12:a712bad7a979 24 #include "core/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 8:0d1ec493842c 39 static VodafoneK3772ZInitializer vodafoneK3772Z(pHost);
donatien 18:7d5242aa7b95 40 static VodafoneK3772Initializer vodafoneK3772(pHost);
donatien 18:7d5242aa7b95 41 const static WANDongleInitializer* list[] = { &vodafoneK3770, &vodafoneK3772Z, &vodafoneK3772, NULL };
donatien 3:4394986752db 42 return (WANDongleInitializer**)list;
donatien 3:4394986752db 43 }
donatien 3:4394986752db 44
donatien 3:4394986752db 45 //Huawei K3770 (Vodafone)
nherriot 5:3189db174f6b 46 // Switching from mass storage device string is: "55 53 42 43 12 34 56 78 00 00 00 00 00 00 00 11 06 20 00 00 01 00 00 00 00 00 00 00 00 00 00"
donatien 3:4394986752db 47 static uint8_t vodafone_k3770_switch_packet[] = {
donatien 3:4394986752db 48 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 49 };
donatien 3:4394986752db 50
donatien 3:4394986752db 51 VodafoneK3770Initializer::VodafoneK3770Initializer(USBHost* pHost) : WANDongleInitializer(pHost)
donatien 3:4394986752db 52 {
donatien 3:4394986752db 53
donatien 3:4394986752db 54 }
donatien 3:4394986752db 55
donatien 3:4394986752db 56 uint16_t VodafoneK3770Initializer::getMSDVid() { return 0x12D1; }
donatien 3:4394986752db 57 uint16_t VodafoneK3770Initializer::getMSDPid() { return 0x14D1; }
donatien 3:4394986752db 58
donatien 3:4394986752db 59 uint16_t VodafoneK3770Initializer::getSerialVid() { return 0x12D1; }
donatien 3:4394986752db 60 uint16_t VodafoneK3770Initializer::getSerialPid() { return 0x14C9; }
donatien 3:4394986752db 61
donatien 3:4394986752db 62 bool VodafoneK3770Initializer::switchMode(USBDeviceConnected* pDev)
donatien 3:4394986752db 63 {
donatien 3:4394986752db 64 for (int i = 0; i < pDev->getNbInterface(); i++)
donatien 3:4394986752db 65 {
donatien 3:4394986752db 66 if (pDev->getInterface(i)->intf_class == MSD_CLASS)
donatien 3:4394986752db 67 {
donatien 9:c9e9817c398c 68 USBEndpoint* pEp = pDev->getEndpoint(i, BULK_ENDPOINT, OUT);
donatien 3:4394986752db 69 if ( pEp != NULL )
donatien 3:4394986752db 70 {
donatien 3:4394986752db 71 DBG("MSD descriptor found on device %p, intf %d, will now try to switch into serial mode", (void *)pDev, i);
donatien 3:4394986752db 72 m_pHost->bulkWrite(pDev, pEp, vodafone_k3770_switch_packet, 31);
donatien 3:4394986752db 73 return true;
donatien 3:4394986752db 74 }
donatien 3:4394986752db 75 }
donatien 3:4394986752db 76 }
donatien 3:4394986752db 77 return false;
donatien 3:4394986752db 78 }
donatien 3:4394986752db 79
donatien 9:c9e9817c398c 80 USBEndpoint* VodafoneK3770Initializer::getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx)
donatien 3:4394986752db 81 {
donatien 6:075e36a3463e 82 return pDev->getEndpoint(serialPortNumber, BULK_ENDPOINT, tx?OUT:IN, 0);
donatien 3:4394986752db 83 }
donatien 3:4394986752db 84
donatien 3:4394986752db 85 int VodafoneK3770Initializer::getSerialPortCount()
donatien 3:4394986752db 86 {
donatien 6:075e36a3463e 87 return 2;
donatien 6:075e36a3463e 88 }
donatien 6:075e36a3463e 89
donatien 6:075e36a3463e 90 /*virtual*/ void VodafoneK3770Initializer::setVidPid(uint16_t vid, uint16_t pid)
donatien 6:075e36a3463e 91 {
donatien 6:075e36a3463e 92 if( (vid == getSerialVid() ) && ( pid == getSerialPid() ) )
donatien 6:075e36a3463e 93 {
donatien 6:075e36a3463e 94 m_hasSwitched = true;
donatien 6:075e36a3463e 95 m_currentSerialIntf = 0;
donatien 6:075e36a3463e 96 m_endpointsToFetch = 4;
donatien 6:075e36a3463e 97 }
donatien 6:075e36a3463e 98 else
donatien 6:075e36a3463e 99 {
donatien 6:075e36a3463e 100 m_hasSwitched = false;
donatien 6:075e36a3463e 101 m_endpointsToFetch = 1;
donatien 6:075e36a3463e 102 }
donatien 3:4394986752db 103 }
donatien 3:4394986752db 104
donatien 6:075e36a3463e 105 /*virtual*/ bool VodafoneK3770Initializer::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
donatien 6:075e36a3463e 106 {
donatien 6:075e36a3463e 107 if( m_hasSwitched )
donatien 6:075e36a3463e 108 {
donatien 6:075e36a3463e 109 if( intf_class == 0xFF )
donatien 6:075e36a3463e 110 {
donatien 6:075e36a3463e 111 if( (m_currentSerialIntf == 0) || (m_currentSerialIntf == 4) )
donatien 6:075e36a3463e 112 {
donatien 6:075e36a3463e 113 m_currentSerialIntf++;
donatien 6:075e36a3463e 114 return true;
donatien 6:075e36a3463e 115 }
donatien 6:075e36a3463e 116 m_currentSerialIntf++;
donatien 6:075e36a3463e 117 }
donatien 6:075e36a3463e 118 }
donatien 6:075e36a3463e 119 else
donatien 6:075e36a3463e 120 {
donatien 6:075e36a3463e 121 if( (intf_nb == 0) && (intf_class == MSD_CLASS) )
donatien 6:075e36a3463e 122 {
donatien 6:075e36a3463e 123 return true;
donatien 6:075e36a3463e 124 }
donatien 6:075e36a3463e 125 }
donatien 6:075e36a3463e 126 return false;
donatien 6:075e36a3463e 127 }
donatien 6:075e36a3463e 128
donatien 6:075e36a3463e 129 /*virtual*/ bool VodafoneK3770Initializer::useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) //Must return true if the endpoint will be used
donatien 6:075e36a3463e 130 {
donatien 6:075e36a3463e 131 if( m_hasSwitched )
donatien 6:075e36a3463e 132 {
donatien 6:075e36a3463e 133 if( (type == BULK_ENDPOINT) && m_endpointsToFetch )
donatien 6:075e36a3463e 134 {
donatien 6:075e36a3463e 135 m_endpointsToFetch--;
donatien 6:075e36a3463e 136 return true;
donatien 6:075e36a3463e 137 }
donatien 6:075e36a3463e 138 }
donatien 6:075e36a3463e 139 else
donatien 6:075e36a3463e 140 {
donatien 6:075e36a3463e 141 if( (type == BULK_ENDPOINT) && (dir == OUT) && m_endpointsToFetch )
donatien 6:075e36a3463e 142 {
donatien 6:075e36a3463e 143 m_endpointsToFetch--;
donatien 6:075e36a3463e 144 return true;
donatien 6:075e36a3463e 145 }
donatien 6:075e36a3463e 146 }
donatien 6:075e36a3463e 147 return false;
donatien 6:075e36a3463e 148 }
donatien 8:0d1ec493842c 149
donatien 8:0d1ec493842c 150 /*virtual*/ WAN_DONGLE_TYPE VodafoneK3770Initializer::getType()
donatien 8:0d1ec493842c 151 {
donatien 8:0d1ec493842c 152 return WAN_DONGLE_TYPE_VODAFONEK3770;
donatien 8:0d1ec493842c 153 }
donatien 8:0d1ec493842c 154
donatien 18:7d5242aa7b95 155 //Huawei K3772 (Vodafone)
donatien 18:7d5242aa7b95 156 // Switching from mass storage device string is: "55 53 42 43 12 34 56 78 00 02 00 00 80 00 0a 11 06 20 00 00 00 00 00 01 00 00 00 00 00 00 00"
donatien 18:7d5242aa7b95 157 static uint8_t vodafone_k3772_switch_packet[] = {
donatien 18:7d5242aa7b95 158 0x55, 0x53, 0x42, 0x43, 0x12, 0x34, 0x56, 0x78, 0, 0x02, 0, 0, 0x80, 0, 0x0a, 0x11, 0x06, 0x20, 0, 0, 0, 0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0
donatien 18:7d5242aa7b95 159 };
donatien 18:7d5242aa7b95 160
donatien 18:7d5242aa7b95 161
donatien 18:7d5242aa7b95 162 VodafoneK3772Initializer::VodafoneK3772Initializer(USBHost* pHost) : WANDongleInitializer(pHost)
donatien 18:7d5242aa7b95 163 {
donatien 18:7d5242aa7b95 164
donatien 18:7d5242aa7b95 165 }
donatien 18:7d5242aa7b95 166
donatien 18:7d5242aa7b95 167 uint16_t VodafoneK3772Initializer::getMSDVid() { return 0x12D1; }
donatien 18:7d5242aa7b95 168 uint16_t VodafoneK3772Initializer::getMSDPid() { return 0x1526; }
donatien 18:7d5242aa7b95 169
donatien 18:7d5242aa7b95 170 uint16_t VodafoneK3772Initializer::getSerialVid() { return 0x12D1; }
donatien 18:7d5242aa7b95 171 uint16_t VodafoneK3772Initializer::getSerialPid() { return 0x14CF; }
donatien 18:7d5242aa7b95 172
donatien 18:7d5242aa7b95 173 bool VodafoneK3772Initializer::switchMode(USBDeviceConnected* pDev)
donatien 18:7d5242aa7b95 174 {
donatien 18:7d5242aa7b95 175 for (int i = 0; i < pDev->getNbInterface(); i++)
donatien 18:7d5242aa7b95 176 {
donatien 18:7d5242aa7b95 177 if (pDev->getInterface(i)->intf_class == MSD_CLASS)
donatien 18:7d5242aa7b95 178 {
donatien 18:7d5242aa7b95 179 USBEndpoint* pEp = pDev->getEndpoint(i, BULK_ENDPOINT, OUT);
donatien 18:7d5242aa7b95 180 if ( pEp != NULL )
donatien 18:7d5242aa7b95 181 {
donatien 18:7d5242aa7b95 182 DBG("MSD descriptor found on device %p, intf %d, will now try to switch into serial mode", (void *)pDev, i);
donatien 18:7d5242aa7b95 183 m_pHost->bulkWrite(pDev, pEp, vodafone_k3772_switch_packet, 31);
donatien 18:7d5242aa7b95 184 return true;
donatien 18:7d5242aa7b95 185 }
donatien 18:7d5242aa7b95 186 }
donatien 18:7d5242aa7b95 187 }
donatien 18:7d5242aa7b95 188 return false;
donatien 18:7d5242aa7b95 189 }
donatien 18:7d5242aa7b95 190
donatien 18:7d5242aa7b95 191 USBEndpoint* VodafoneK3772Initializer::getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx)
donatien 18:7d5242aa7b95 192 {
donatien 18:7d5242aa7b95 193 return pDev->getEndpoint(serialPortNumber, BULK_ENDPOINT, tx?OUT:IN, 0);
donatien 18:7d5242aa7b95 194 }
donatien 18:7d5242aa7b95 195
donatien 18:7d5242aa7b95 196 int VodafoneK3772Initializer::getSerialPortCount()
donatien 18:7d5242aa7b95 197 {
donatien 18:7d5242aa7b95 198 return 2;
donatien 18:7d5242aa7b95 199 }
donatien 18:7d5242aa7b95 200
donatien 18:7d5242aa7b95 201 /*virtual*/ void VodafoneK3772Initializer::setVidPid(uint16_t vid, uint16_t pid)
donatien 18:7d5242aa7b95 202 {
donatien 18:7d5242aa7b95 203 if( (vid == getSerialVid() ) && ( pid == getSerialPid() ) )
donatien 18:7d5242aa7b95 204 {
donatien 18:7d5242aa7b95 205 m_hasSwitched = true;
donatien 18:7d5242aa7b95 206 m_currentSerialIntf = 0;
donatien 18:7d5242aa7b95 207 m_endpointsToFetch = 4;
donatien 18:7d5242aa7b95 208 }
donatien 18:7d5242aa7b95 209 else
donatien 18:7d5242aa7b95 210 {
donatien 18:7d5242aa7b95 211 m_hasSwitched = false;
donatien 18:7d5242aa7b95 212 m_endpointsToFetch = 1;
donatien 18:7d5242aa7b95 213 }
donatien 18:7d5242aa7b95 214 }
donatien 18:7d5242aa7b95 215
donatien 18:7d5242aa7b95 216 /*virtual*/ bool VodafoneK3772Initializer::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
donatien 18:7d5242aa7b95 217 {
donatien 18:7d5242aa7b95 218 if( m_hasSwitched )
donatien 18:7d5242aa7b95 219 {
donatien 18:7d5242aa7b95 220 if( intf_class == 0xFF )
donatien 18:7d5242aa7b95 221 {
donatien 18:7d5242aa7b95 222 if( (m_currentSerialIntf == 0) || (m_currentSerialIntf == 2) )
donatien 18:7d5242aa7b95 223 {
donatien 18:7d5242aa7b95 224 m_currentSerialIntf++;
donatien 18:7d5242aa7b95 225 return true;
donatien 18:7d5242aa7b95 226 }
donatien 18:7d5242aa7b95 227 m_currentSerialIntf++;
donatien 18:7d5242aa7b95 228 }
donatien 18:7d5242aa7b95 229 }
donatien 18:7d5242aa7b95 230 else
donatien 18:7d5242aa7b95 231 {
donatien 18:7d5242aa7b95 232 if( (intf_nb == 0) && (intf_class == MSD_CLASS) )
donatien 18:7d5242aa7b95 233 {
donatien 18:7d5242aa7b95 234 return true;
donatien 18:7d5242aa7b95 235 }
donatien 18:7d5242aa7b95 236 }
donatien 18:7d5242aa7b95 237 return false;
donatien 18:7d5242aa7b95 238 }
donatien 18:7d5242aa7b95 239
donatien 18:7d5242aa7b95 240 /*virtual*/ bool VodafoneK3772Initializer::useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) //Must return true if the endpoint will be used
donatien 18:7d5242aa7b95 241 {
donatien 18:7d5242aa7b95 242 if( m_hasSwitched )
donatien 18:7d5242aa7b95 243 {
donatien 18:7d5242aa7b95 244 if( (type == BULK_ENDPOINT) && m_endpointsToFetch )
donatien 18:7d5242aa7b95 245 {
donatien 18:7d5242aa7b95 246 m_endpointsToFetch--;
donatien 18:7d5242aa7b95 247 return true;
donatien 18:7d5242aa7b95 248 }
donatien 18:7d5242aa7b95 249 }
donatien 18:7d5242aa7b95 250 else
donatien 18:7d5242aa7b95 251 {
donatien 18:7d5242aa7b95 252 if( (type == BULK_ENDPOINT) && (dir == OUT) && m_endpointsToFetch )
donatien 18:7d5242aa7b95 253 {
donatien 18:7d5242aa7b95 254 m_endpointsToFetch--;
donatien 18:7d5242aa7b95 255 return true;
donatien 18:7d5242aa7b95 256 }
donatien 18:7d5242aa7b95 257 }
donatien 18:7d5242aa7b95 258 return false;
donatien 18:7d5242aa7b95 259 }
donatien 18:7d5242aa7b95 260
donatien 18:7d5242aa7b95 261 /*virtual*/ WAN_DONGLE_TYPE VodafoneK3772Initializer::getType()
donatien 18:7d5242aa7b95 262 {
donatien 18:7d5242aa7b95 263 return WAN_DONGLE_TYPE_VODAFONEK3772;
donatien 18:7d5242aa7b95 264 }
donatien 18:7d5242aa7b95 265
donatien 8:0d1ec493842c 266 // NVIDIA (ICERA) /ZTE K3772-Z (Vodafone)
donatien 8:0d1ec493842c 267 // Switching from mass storage device string is: "55 53 42 43 12 34 56 78 00 00 00 00 00 00 06 1b 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00"
donatien 8:0d1ec493842c 268 static uint8_t vodafone_k3772_z_switch_packet[] = {
donatien 8:0d1ec493842c 269 0x55, 0x53, 0x42, 0x43, 0x12, 0x34, 0x56, 0x78, 0, 0, 0, 0, 0, 0, 0x06, 0x1b, 0, 0, 0, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
donatien 8:0d1ec493842c 270 };
donatien 8:0d1ec493842c 271
donatien 8:0d1ec493842c 272 VodafoneK3772ZInitializer::VodafoneK3772ZInitializer(USBHost* pHost) : WANDongleInitializer(pHost)
donatien 8:0d1ec493842c 273 {
donatien 8:0d1ec493842c 274
donatien 8:0d1ec493842c 275 }
donatien 8:0d1ec493842c 276
donatien 8:0d1ec493842c 277 uint16_t VodafoneK3772ZInitializer::getMSDVid() { return 0x19D2; }
donatien 8:0d1ec493842c 278 uint16_t VodafoneK3772ZInitializer::getMSDPid() { return 0x1179; }
donatien 8:0d1ec493842c 279
donatien 8:0d1ec493842c 280 uint16_t VodafoneK3772ZInitializer::getSerialVid() { return 0x19D2; }
donatien 8:0d1ec493842c 281 uint16_t VodafoneK3772ZInitializer::getSerialPid() { return 0x1181; }
donatien 8:0d1ec493842c 282
donatien 8:0d1ec493842c 283 bool VodafoneK3772ZInitializer::switchMode(USBDeviceConnected* pDev)
donatien 8:0d1ec493842c 284 {
donatien 8:0d1ec493842c 285 for (int i = 0; i < pDev->getNbInterface(); i++)
donatien 8:0d1ec493842c 286 {
donatien 8:0d1ec493842c 287 if (pDev->getInterface(i)->intf_class == MSD_CLASS)
donatien 8:0d1ec493842c 288 {
donatien 9:c9e9817c398c 289 USBEndpoint* pEp = pDev->getEndpoint(i, BULK_ENDPOINT, OUT);
donatien 8:0d1ec493842c 290 if ( pEp != NULL )
donatien 8:0d1ec493842c 291 {
donatien 8:0d1ec493842c 292 DBG("MSD descriptor found on device %p, intf %d, will now try to switch into serial mode", (void *)pDev, i);
donatien 8:0d1ec493842c 293 m_pHost->bulkWrite(pDev, pEp, vodafone_k3772_z_switch_packet, 31);
donatien 8:0d1ec493842c 294 return true;
donatien 8:0d1ec493842c 295 }
donatien 8:0d1ec493842c 296 }
donatien 8:0d1ec493842c 297 }
donatien 8:0d1ec493842c 298 return false;
donatien 8:0d1ec493842c 299 }
donatien 8:0d1ec493842c 300
donatien 9:c9e9817c398c 301 USBEndpoint* VodafoneK3772ZInitializer::getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx)
donatien 8:0d1ec493842c 302 {
donatien 8:0d1ec493842c 303 return pDev->getEndpoint((serialPortNumber==1)?0:1, BULK_ENDPOINT, tx?OUT:IN, 0);
donatien 8:0d1ec493842c 304 }
donatien 8:0d1ec493842c 305
donatien 8:0d1ec493842c 306 int VodafoneK3772ZInitializer::getSerialPortCount()
donatien 8:0d1ec493842c 307 {
donatien 8:0d1ec493842c 308 return 2;
donatien 8:0d1ec493842c 309 }
donatien 8:0d1ec493842c 310
donatien 8:0d1ec493842c 311 /*virtual*/ void VodafoneK3772ZInitializer::setVidPid(uint16_t vid, uint16_t pid)
donatien 8:0d1ec493842c 312 {
donatien 8:0d1ec493842c 313 if( (vid == getSerialVid() ) && ( pid == getSerialPid() ) )
donatien 8:0d1ec493842c 314 {
donatien 8:0d1ec493842c 315 m_hasSwitched = true;
donatien 8:0d1ec493842c 316 m_currentSerialIntf = 0;
donatien 8:0d1ec493842c 317 m_endpointsToFetch = 4;
donatien 8:0d1ec493842c 318 }
donatien 8:0d1ec493842c 319 else
donatien 8:0d1ec493842c 320 {
donatien 8:0d1ec493842c 321 m_hasSwitched = false;
donatien 8:0d1ec493842c 322 m_endpointsToFetch = 1;
donatien 8:0d1ec493842c 323 }
donatien 8:0d1ec493842c 324 }
donatien 8:0d1ec493842c 325
donatien 8:0d1ec493842c 326 /*virtual*/ bool VodafoneK3772ZInitializer::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
donatien 8:0d1ec493842c 327 {
donatien 8:0d1ec493842c 328 if( m_hasSwitched )
donatien 8:0d1ec493842c 329 {
donatien 8:0d1ec493842c 330 DBG("Interface #%d; Class:%02x; SubClass:%02x; Protocol:%02x", intf_nb, intf_class, intf_subclass, intf_protocol);
donatien 8:0d1ec493842c 331 if( intf_class == 0x0A )
donatien 8:0d1ec493842c 332 {
donatien 8:0d1ec493842c 333 if( (m_currentSerialIntf == 0) || (m_currentSerialIntf == 1) )
donatien 8:0d1ec493842c 334 {
donatien 8:0d1ec493842c 335 m_currentSerialIntf++;
donatien 8:0d1ec493842c 336 return true;
donatien 8:0d1ec493842c 337 }
donatien 8:0d1ec493842c 338 m_currentSerialIntf++;
donatien 8:0d1ec493842c 339 }
donatien 8:0d1ec493842c 340 }
donatien 8:0d1ec493842c 341 else
donatien 8:0d1ec493842c 342 {
donatien 8:0d1ec493842c 343 if( (intf_nb == 0) && (intf_class == MSD_CLASS) )
donatien 8:0d1ec493842c 344 {
donatien 8:0d1ec493842c 345 return true;
donatien 8:0d1ec493842c 346 }
donatien 8:0d1ec493842c 347 }
donatien 8:0d1ec493842c 348 return false;
donatien 8:0d1ec493842c 349 }
donatien 8:0d1ec493842c 350
donatien 8:0d1ec493842c 351 /*virtual*/ bool VodafoneK3772ZInitializer::useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) //Must return true if the endpoint will be used
donatien 8:0d1ec493842c 352 {
donatien 8:0d1ec493842c 353 if( m_hasSwitched )
donatien 8:0d1ec493842c 354 {
donatien 9:c9e9817c398c 355 DBG("USBEndpoint on Inteface #%d; Type:%d; Direction:%d", intf_nb, type, dir);
donatien 8:0d1ec493842c 356 if( (type == BULK_ENDPOINT) && m_endpointsToFetch )
donatien 8:0d1ec493842c 357 {
donatien 8:0d1ec493842c 358 m_endpointsToFetch--;
donatien 8:0d1ec493842c 359 return true;
donatien 8:0d1ec493842c 360 }
donatien 8:0d1ec493842c 361 }
donatien 8:0d1ec493842c 362 else
donatien 8:0d1ec493842c 363 {
donatien 8:0d1ec493842c 364 if( (type == BULK_ENDPOINT) && (dir == OUT) && m_endpointsToFetch )
donatien 8:0d1ec493842c 365 {
donatien 8:0d1ec493842c 366 m_endpointsToFetch--;
donatien 8:0d1ec493842c 367 return true;
donatien 8:0d1ec493842c 368 }
donatien 8:0d1ec493842c 369 }
donatien 8:0d1ec493842c 370 return false;
donatien 8:0d1ec493842c 371 }
donatien 8:0d1ec493842c 372
donatien 8:0d1ec493842c 373
donatien 8:0d1ec493842c 374 /*virtual*/ WAN_DONGLE_TYPE VodafoneK3772ZInitializer::getType()
donatien 8:0d1ec493842c 375 {
donatien 8:0d1ec493842c 376 return WAN_DONGLE_TYPE_VODAFONEK3772Z;
donatien 8:0d1ec493842c 377 }