support library for C027 helper functions for Buffer Pipes, Buffered Serial Port (rtos capable) and GPS parsing. It includes modem APIs for USSD, SMS and Sockets.

Dependents:   HTTPClient_Cellular_HelloWorld Cellular_HelloMQTT MbedSmartRestMain Car_Bon_car_module ... more

This library is intended to be used with u-blox products such as the C027 or a shield with u-blox cellular and GPS modules like the cellular and positioning shield from Embedded Artist.

For 2G/GSM and 3G/UMTS you need to:

  • have a SIM card and know its PIN number
  • need to know you network operators APN setting These setting should be passed to the connect or init and join functions. You can also extend the APN database in MDMAPN.h.

For CDMA products you need to make sure that you have provisioned and activated the modem with either Sprint or Verizon.

Committer:
mazgch
Date:
Thu Apr 20 08:44:47 2017 +0000
Revision:
139:fd9fe498f142
Parent:
119:db878a234544
update for additional baud rate parameter in new mbed 5

Who changed what in which revision?

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