Changes to support Vodafone K4606

Dependents:   VodafoneUSBModem

Fork of USBHostWANDongle by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers WANDongleInitializer.h Source File

WANDongleInitializer.h

00001 /* Copyright (c) 2010-2012 mbed.org, MIT License
00002 *
00003 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
00004 * and associated documentation files (the "Software"), to deal in the Software without
00005 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
00006 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
00007 * Software is furnished to do so, subject to the following conditions:
00008 *
00009 * The above copyright notice and this permission notice shall be included in all copies or
00010 * substantial portions of the Software.
00011 *
00012 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
00013 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00014 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
00015 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00016 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00017 */
00018 
00019 #ifndef WANDONGLEINITIALIZER_H
00020 #define WANDONGLEINITIALIZER_H
00021 
00022 #include <cstdint>
00023 using std::uint16_t;
00024 using std::uint32_t;
00025 
00026 #include "USBHost.h"
00027 #include "IUSBEnumerator.h"
00028 
00029 enum WAN_DONGLE_TYPE
00030 {
00031   WAN_DONGLE_TYPE_UNKNOWN         = -1,
00032   WAN_DONGLE_TYPE_VODAFONE_K3770  =  0,
00033   WAN_DONGLE_TYPE_VODAFONE_K3772Z =  1,
00034   WAN_DONGLE_TYPE_VODAFONE_K3772  =  2,
00035   WAN_DONGLE_TYPE_VODAFONE_K3773  =  3,
00036   WAN_DONGLE_TYPE_HUAWEI_MU509    =  4,
00037   WAN_DONGLE_TYPE_UBLOX_LISAU200  =  5,
00038   WAN_DONGLE_TYPE_VODAFONE_K4606  =  6
00039 };
00040 
00041 class WANDongleInitializer : public IUSBEnumerator
00042 {
00043 protected:
00044     WANDongleInitializer(USBHost* pHost);
00045     USBHost* m_pHost;
00046     
00047 public:
00048     virtual uint16_t getMSDVid() = 0;
00049     virtual uint16_t getMSDPid() = 0;
00050     
00051     virtual uint16_t getSerialVid() = 0;
00052     virtual uint16_t getSerialPid() = 0;
00053     
00054     virtual bool switchMode(USBDeviceConnected* pDev) = 0;
00055     
00056     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx) = 0;
00057     
00058     virtual int getSerialPortCount() = 0;
00059     
00060     virtual void setVidPid(uint16_t vid, uint16_t pid) = 0;
00061     
00062     virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol) = 0; //Must return true if the interface should be parsed
00063     
00064     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir) = 0; //Must return true if the endpoint will be used
00065     
00066     virtual WAN_DONGLE_TYPE getType() = 0;
00067     
00068     static WANDongleInitializer** getInitializers(USBHost* pHost);
00069 };
00070 
00071 class VodafoneK3770Initializer : public WANDongleInitializer
00072 {
00073 public:
00074     VodafoneK3770Initializer(USBHost* pHost);
00075     
00076     virtual uint16_t getMSDVid();
00077     virtual uint16_t getMSDPid();
00078     
00079     virtual uint16_t getSerialVid();
00080     virtual uint16_t getSerialPid();
00081     
00082     virtual bool switchMode(USBDeviceConnected* pDev);
00083     
00084     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00085     
00086     virtual int getSerialPortCount();
00087     
00088     virtual void setVidPid(uint16_t vid, uint16_t pid);
00089     
00090     virtual bool 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
00091     
00092     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00093     
00094     virtual WAN_DONGLE_TYPE getType();
00095     
00096 private:
00097 
00098   bool m_hasSwitched;
00099   int m_currentSerialIntf;
00100   int m_endpointsToFetch;
00101 };
00102 
00103 class VodafoneK3773Initializer : public WANDongleInitializer
00104 {
00105 public:
00106     VodafoneK3773Initializer(USBHost* pHost);
00107     
00108     virtual uint16_t getMSDVid();
00109     virtual uint16_t getMSDPid();
00110     
00111     virtual uint16_t getSerialVid();
00112     virtual uint16_t getSerialPid();
00113     
00114     virtual bool switchMode(USBDeviceConnected* pDev);
00115     
00116     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00117     
00118     virtual int getSerialPortCount();
00119     
00120     virtual void setVidPid(uint16_t vid, uint16_t pid);
00121     
00122     virtual bool 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
00123     
00124     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00125     
00126     virtual WAN_DONGLE_TYPE getType();
00127     
00128 private:
00129 
00130   bool m_hasSwitched;
00131   int m_currentSerialIntf;
00132   int m_endpointsToFetch;
00133 };
00134 
00135 class VodafoneK3772ZInitializer : public WANDongleInitializer
00136 {
00137 public:
00138     VodafoneK3772ZInitializer(USBHost* pHost);
00139     
00140     virtual uint16_t getMSDVid();
00141     virtual uint16_t getMSDPid();
00142     
00143     virtual uint16_t getSerialVid();
00144     virtual uint16_t getSerialPid();
00145     
00146     virtual bool switchMode(USBDeviceConnected* pDev);
00147     
00148     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00149     
00150     virtual int getSerialPortCount();
00151     
00152     virtual void setVidPid(uint16_t vid, uint16_t pid);
00153     
00154     virtual bool 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
00155     
00156     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00157     
00158     virtual WAN_DONGLE_TYPE getType();
00159     
00160 private:
00161 
00162   bool m_hasSwitched;
00163   int m_currentSerialIntf;
00164   int m_endpointsToFetch;
00165 };
00166 
00167 class HuaweiMU509Initializer : public WANDongleInitializer
00168 {
00169 public:
00170     HuaweiMU509Initializer(USBHost* pHost);
00171     
00172     virtual uint16_t getMSDVid();
00173     virtual uint16_t getMSDPid();
00174     
00175     virtual uint16_t getSerialVid();
00176     virtual uint16_t getSerialPid();
00177     
00178     virtual bool switchMode(USBDeviceConnected* pDev);
00179     
00180     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00181     
00182     virtual int getSerialPortCount();
00183     
00184     virtual void setVidPid(uint16_t vid, uint16_t pid);
00185     
00186     virtual bool 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
00187     
00188     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00189     
00190     virtual WAN_DONGLE_TYPE getType();
00191     
00192 private:
00193 
00194   int m_currentSerialIntf;
00195   int m_endpointsToFetch;
00196 };
00197 
00198 class VodafoneK3772Initializer : public WANDongleInitializer
00199 {
00200 public:
00201     VodafoneK3772Initializer(USBHost* pHost);
00202     
00203     virtual uint16_t getMSDVid();
00204     virtual uint16_t getMSDPid();
00205     
00206     virtual uint16_t getSerialVid();
00207     virtual uint16_t getSerialPid();
00208     
00209     virtual bool switchMode(USBDeviceConnected* pDev);
00210     
00211     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00212     
00213     virtual int getSerialPortCount();
00214     
00215     virtual void setVidPid(uint16_t vid, uint16_t pid);
00216     
00217     virtual bool 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
00218     
00219     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00220     
00221     virtual WAN_DONGLE_TYPE getType();
00222     
00223 private:
00224 
00225   bool m_hasSwitched;
00226   int m_currentSerialIntf;
00227   int m_endpointsToFetch;
00228 };
00229 
00230 //-----------------------------------------------------------------------
00231 // mamm, u-blox Modem
00232 //-----------------------------------------------------------------------
00233 
00234 class UbloxLISAU200Initializer : public WANDongleInitializer
00235 {
00236 public:
00237     UbloxLISAU200Initializer(USBHost* pHost);
00238     
00239     virtual uint16_t getMSDVid();
00240     virtual uint16_t getMSDPid();
00241     
00242     virtual uint16_t getSerialVid();
00243     virtual uint16_t getSerialPid();
00244     
00245     virtual bool switchMode(USBDeviceConnected* pDev);
00246     
00247     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00248     
00249     virtual int getSerialPortCount();
00250     
00251     virtual void setVidPid(uint16_t vid, uint16_t pid);
00252     
00253     virtual bool 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
00254     
00255     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00256     
00257     virtual WAN_DONGLE_TYPE getType();
00258     
00259 private:
00260 
00261   bool m_hasSwitched;
00262   int m_currentSerialIntf;
00263   int m_endpointsToFetch;
00264 };
00265 
00266 
00267 class VodafoneK4606Initializer : public WANDongleInitializer
00268 {
00269 public:
00270     VodafoneK4606Initializer(USBHost* pHost);
00271     
00272     virtual uint16_t getMSDVid();
00273     virtual uint16_t getMSDPid();
00274     
00275     virtual uint16_t getSerialVid();
00276     virtual uint16_t getSerialPid();
00277     
00278     virtual bool switchMode(USBDeviceConnected* pDev);
00279     
00280     virtual USBEndpoint* getEp(USBDeviceConnected* pDev, int serialPortNumber, bool tx);
00281     
00282     virtual int getSerialPortCount();
00283     
00284     virtual void setVidPid(uint16_t vid, uint16_t pid);
00285     
00286     virtual bool 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
00287     
00288     virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
00289     
00290     virtual WAN_DONGLE_TYPE getType();
00291     
00292 private:
00293 
00294   bool m_hasSwitched;
00295   int m_currentSerialIntf;
00296   int m_endpointsToFetch;
00297 };
00298 
00299 
00300 #endif
00301