Own fork of C027_Support

Dependents:   MbedSmartRestMain MbedSmartRestMain

Fork of C027_Support by u-blox

Committer:
xinlei
Date:
Fri Sep 15 10:12:03 2017 +0000
Revision:
134:d84232916eac
new apns

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 134:d84232916eac 1 #pragma once
xinlei 134:d84232916eac 2
xinlei 134:d84232916eac 3 /* ----------------------------------------------------------------
xinlei 134:d84232916eac 4 APN stands for Access Point Name, a setting on your modem or phone
xinlei 134:d84232916eac 5 that identifies an external network your phone can access for data
xinlei 134:d84232916eac 6 (e.g. 3G or 4G Internet service on your phone).
xinlei 134:d84232916eac 7
xinlei 134:d84232916eac 8 The APN settings can be forced when calling the join function.
xinlei 134:d84232916eac 9 Below is a list of known APNs that us used if no apn config
xinlei 134:d84232916eac 10 is forced. This list could be extended by other settings.
xinlei 134:d84232916eac 11
xinlei 134:d84232916eac 12 For further reading:
xinlei 134:d84232916eac 13 wiki apn: http://en.wikipedia.org/wiki/Access_Point_Name
xinlei 134:d84232916eac 14 wiki mcc/mnc: http://en.wikipedia.org/wiki/Mobile_country_code
xinlei 134:d84232916eac 15 google: https://www.google.de/search?q=APN+list
xinlei 134:d84232916eac 16 ---------------------------------------------------------------- */
xinlei 134:d84232916eac 17
xinlei 134:d84232916eac 18 //! helper to generate the APN string
xinlei 134:d84232916eac 19 #define _APN(apn,username,password) apn "\0" username "\0" password "\0"
xinlei 134:d84232916eac 20
xinlei 134:d84232916eac 21 //! helper to extract a field from the config string
xinlei 134:d84232916eac 22 #define _APN_GET(cfg) \
xinlei 134:d84232916eac 23 *cfg ? cfg : ""; \
xinlei 134:d84232916eac 24 cfg += strlen(cfg) + 1
xinlei 134:d84232916eac 25
xinlei 134:d84232916eac 26 //! APN lookup struct
xinlei 134:d84232916eac 27 typedef struct {
xinlei 134:d84232916eac 28 const char* mccmnc; //!< mobile country code (MCC) and mobile network code MNC
xinlei 134:d84232916eac 29 const char* cfg; //!< APN configuartion string, use _APN macro to generate
xinlei 134:d84232916eac 30 } APN_t;
xinlei 134:d84232916eac 31
xinlei 134:d84232916eac 32 //! default APN settings used by many networks
xinlei 134:d84232916eac 33 static const char* apndef = _APN(,,)
xinlei 134:d84232916eac 34 _APN("internet",,);
xinlei 134:d84232916eac 35
xinlei 134:d84232916eac 36 /*! this is a list of special APNs for different network operators
xinlei 134:d84232916eac 37 There is no need to enter the default apn internet in the table;
xinlei 134:d84232916eac 38 apndef will be used if no entry matches.
xinlei 134:d84232916eac 39
xinlei 134:d84232916eac 40 The APN without username/password have to be listed first.
xinlei 134:d84232916eac 41 */
xinlei 134:d84232916eac 42 static const APN_t apnlut[] = {
xinlei 134:d84232916eac 43 // MCC Country
xinlei 134:d84232916eac 44 // { /* Operator */ "MCC-MNC[,MNC]" _APN(APN,USERNAME,PASSWORD) },
xinlei 134:d84232916eac 45 // MCC must be 3 digits
xinlei 134:d84232916eac 46 // MNC must be either 2 or 3 digits
xinlei 134:d84232916eac 47 // MCC must be separated by '-' from MNC, multiple MNC can be separated by ','
xinlei 134:d84232916eac 48
xinlei 134:d84232916eac 49 // 232 Austria - AUT
xinlei 134:d84232916eac 50 { /* T-Mobile */ "232-03", _APN("m2m.business",,) },
xinlei 134:d84232916eac 51
xinlei 134:d84232916eac 52 // 460 China - CN
xinlei 134:d84232916eac 53 { /* CN Mobile */"460-00", _APN("cmnet",,)
xinlei 134:d84232916eac 54 _APN("cmwap",,) },
xinlei 134:d84232916eac 55 { /* Unicom */ "460-01", _APN("3gnet",,)
xinlei 134:d84232916eac 56 _APN("uninet","uninet","uninet") },
xinlei 134:d84232916eac 57
xinlei 134:d84232916eac 58 // 262 Germany - DE
xinlei 134:d84232916eac 59 // { /* T-Mobile */ "262-01", _APN("internet.t-mobile","t-mobile","tm") },
xinlei 134:d84232916eac 60 { /* T-Mobile */ "262-02,06", _APN("m2m.business",,) },
xinlei 134:d84232916eac 61 { /* T-Mobile */ "262-01", _APN("internet.m2mportal.de", "m2m", "sim")
xinlei 134:d84232916eac 62 _APN("internet.telekom",,) },
xinlei 134:d84232916eac 63
xinlei 134:d84232916eac 64 // 222 Italy - IT
xinlei 134:d84232916eac 65 { /* TIM */ "222-01", _APN("ibox.tim.it",,) },
xinlei 134:d84232916eac 66 { /* Vodafone */ "222-10", _APN("web.omnitel.it",,) },
xinlei 134:d84232916eac 67 { /* Wind */ "222-88", _APN("internet.wind.biz",,) },
xinlei 134:d84232916eac 68
xinlei 134:d84232916eac 69 // 440 Japan - JP
xinlei 134:d84232916eac 70 { /* Softbank */ "440-04,06,20,40,41,42,43,44,45,46,47,48,90,91,92,93,94,95"
xinlei 134:d84232916eac 71 ",96,97,98"
xinlei 134:d84232916eac 72 _APN("open.softbank.ne.jp","opensoftbank","ebMNuX1FIHg9d3DA")
xinlei 134:d84232916eac 73 _APN("smile.world","dna1trop","so2t3k3m2a") },
xinlei 134:d84232916eac 74 { /* NTTDoCoMo */"440-09,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,"
xinlei 134:d84232916eac 75 "28,29,30,31,32,33,34,35,36,37,38,39,58,59,60,61,62,63,"
xinlei 134:d84232916eac 76 "64,65,66,67,68,69,87,99",
xinlei 134:d84232916eac 77 _APN("bmobilewap",,) /*BMobile*/
xinlei 134:d84232916eac 78 _APN("mpr2.bizho.net","Mopera U",) /* DoCoMo */
xinlei 134:d84232916eac 79 _APN("3g-uno.ntt.com",,) /* DoCoMo */
xinlei 134:d84232916eac 80 _APN("3gd-ocn.ntt.com",,) /* DoCoMo */
xinlei 134:d84232916eac 81 _APN("nttcom.fr",,) /* DoCoMo */
xinlei 134:d84232916eac 82 _APN("bmobile.ne.jp","bmobile@wifi2","bmobile") /*BMobile*/ },
xinlei 134:d84232916eac 83
xinlei 134:d84232916eac 84 // 204 Netherlands - NL
xinlei 134:d84232916eac 85 { /* Vodafone */ "204-04", _APN("public4.m2minternet.com",,)
xinlei 134:d84232916eac 86 _APN("test.teleena.com",,) },
xinlei 134:d84232916eac 87 { /* Teleena */ "204-07", _APN("test.teleena.com",,) },
xinlei 134:d84232916eac 88
xinlei 134:d84232916eac 89 // 293 Slovenia - SI
xinlei 134:d84232916eac 90 { /* Si.mobil */ "293-40", _APN("internet.simobil.si",,) },
xinlei 134:d84232916eac 91 { /* Tusmobil */ "293-70", _APN("internet.tusmobil.si",,) },
xinlei 134:d84232916eac 92
xinlei 134:d84232916eac 93 // 240 Sweden SE
xinlei 134:d84232916eac 94 { /* Telia */ "240-01", _APN("online.telia.se",,) },
xinlei 134:d84232916eac 95 { /* Telenor */ "240-06,08", _APN("services.telenor.se",,) },
xinlei 134:d84232916eac 96 { /* Tele2 */ "240-07", _APN("m2m.tele2.com",,)
xinlei 134:d84232916eac 97 _APN("mobileinternet.tele2.se",,) },
xinlei 134:d84232916eac 98
xinlei 134:d84232916eac 99 // 228 Switzerland - CH
xinlei 134:d84232916eac 100 { /* Swisscom */ "228-01", _APN("swisscom-test.m2m.ch",,)
xinlei 134:d84232916eac 101 _APN("gprs.swisscom.ch",,) },
xinlei 134:d84232916eac 102 { /* Orange */ "228-03", _APN("internet",,) /* contract */
xinlei 134:d84232916eac 103 _APN("click",,) /* pre-pay */ },
xinlei 134:d84232916eac 104
xinlei 134:d84232916eac 105 // 270 Luxembourg
xinlei 134:d84232916eac 106 { /* Post */ "270-01", _APN("postm2m.lu",,)},
xinlei 134:d84232916eac 107
xinlei 134:d84232916eac 108 // 234 United Kingdom - GB
xinlei 134:d84232916eac 109 { /* O2 */ "234-02,10,11",
xinlei 134:d84232916eac 110 _APN("mobile.o2.co.uk","faster","web") /* contract */
xinlei 134:d84232916eac 111 _APN("mobile.o2.co.uk","bypass","web") /* pre-pay */
xinlei 134:d84232916eac 112 _APN("payandgo.o2.co.uk","payandgo","payandgo") },
xinlei 134:d84232916eac 113 { /* Vodafone */ "234-15", _APN("internet","web","web") /* contract */
xinlei 134:d84232916eac 114 _APN("pp.vodafone.co.uk","wap","wap") /* pre-pay */ },
xinlei 134:d84232916eac 115 { /* Three */ "234-20", _APN("three.co.uk",,) },
xinlei 134:d84232916eac 116 { /* EE */ "234-33,30", _APN("EEm2m",,)
xinlei 134:d84232916eac 117 _APN("m2mdata",,) },
xinlei 134:d84232916eac 118
xinlei 134:d84232916eac 119 // 310 United States of America - US
xinlei 134:d84232916eac 120 { /* Kore Telematics */ "505-02", _APN("od1.korem2m.com",,) },
xinlei 134:d84232916eac 121 { /* T-Mobile */ "310-026,260,490",
xinlei 134:d84232916eac 122 _APN("epc.tmobile.com",,)
xinlei 134:d84232916eac 123 _APN("fast.tmobile.com",,) /* LTE */ },
xinlei 134:d84232916eac 124 { /* AT&T */ "310-030,150,170,260,410,560,680",
xinlei 134:d84232916eac 125 _APN("phone",,)
xinlei 134:d84232916eac 126 _APN("wap.cingular","WAP@CINGULARGPRS.COM","CINGULAR1")
xinlei 134:d84232916eac 127 _APN("isp.cingular","ISP@CINGULARGPRS.COM","CINGULAR1") },
xinlei 134:d84232916eac 128
xinlei 134:d84232916eac 129 // 602 UAE
xinlei 134:d84232916eac 130 { /* Etisalat */ "602-602", _APN("internet.etisalat",,)},
xinlei 134:d84232916eac 131
xinlei 134:d84232916eac 132 // 732 Colombia
xinlei 134:d84232916eac 133 { /* Comcel */ "732-101", _APN("internet.comcel.com.co",,)
xinlei 134:d84232916eac 134 _APN("internet.movistar.com.co",,) },
xinlei 134:d84232916eac 135
xinlei 134:d84232916eac 136 // 405 India
xinlei 134:d84232916eac 137 { /* Reliance */ "405-21", _APN("unlimitiot",,)
xinlei 134:d84232916eac 138 _APN("IoTtest",,) },
xinlei 134:d84232916eac 139
xinlei 134:d84232916eac 140 // 901 International - INT
xinlei 134:d84232916eac 141 { /* Transatel */ "901-37", _APN("netgprs.com","tsl","tsl") },
xinlei 134:d84232916eac 142 };
xinlei 134:d84232916eac 143
xinlei 134:d84232916eac 144 inline const char* apnconfig(const char* imsi)
xinlei 134:d84232916eac 145 {
xinlei 134:d84232916eac 146 const char* config = NULL;
xinlei 134:d84232916eac 147 if (imsi && *imsi) {
xinlei 134:d84232916eac 148 // many carriers use internet without username and password, os use this as default
xinlei 134:d84232916eac 149 // now try to lookup the setting for our table
xinlei 134:d84232916eac 150 for (int i = 0; i < sizeof(apnlut)/sizeof(*apnlut) && !config; i ++) {
xinlei 134:d84232916eac 151 const char* p = apnlut[i].mccmnc;
xinlei 134:d84232916eac 152 // check the MCC
xinlei 134:d84232916eac 153 if ((0 == memcmp(imsi, p, 3))) {
xinlei 134:d84232916eac 154 p += 3;
xinlei 134:d84232916eac 155 // check all the MNC, MNC length can be 2 or 3 digits
xinlei 134:d84232916eac 156 while (((p[0] == '-') || (p[0] == ',')) &&
xinlei 134:d84232916eac 157 (p[1] >= '0') && (p[1] <= '9') &&
xinlei 134:d84232916eac 158 (p[2] >= '0') && (p[2] <= '9') && !config) {
xinlei 134:d84232916eac 159 int l = ((p[3] >= '0') && (p[3] <= '9')) ? 3 : 2;
xinlei 134:d84232916eac 160 if (0 == memcmp(imsi+3,p+1,l))
xinlei 134:d84232916eac 161 config = apnlut[i].cfg;
xinlei 134:d84232916eac 162 p += 1 + l;
xinlei 134:d84232916eac 163 }
xinlei 134:d84232916eac 164 }
xinlei 134:d84232916eac 165 }
xinlei 134:d84232916eac 166 }
xinlei 134:d84232916eac 167 // use default if not found
xinlei 134:d84232916eac 168 if (!config)
xinlei 134:d84232916eac 169 config = apndef;
xinlei 134:d84232916eac 170 return config;
xinlei 134:d84232916eac 171 }