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:
Fri Jun 06 15:01:03 2014 +0000
Revision:
90:3915192f6d7e
Parent:
89:ea396f9f90a2
Child:
91:5af303e25287
cleanup apn selection

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 85:dd8f4f0d0ca9 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 85:dd8f4f0d0ca9 33 static const char* apndef = _APN("internet",,);
mazgch 85:dd8f4f0d0ca9 34
mazgch 89:ea396f9f90a2 35 /*! this is a list of special APNs for different network operators
mazgch 89:ea396f9f90a2 36 There is no need to enter the default apn internet in the table;
mazgch 90:3915192f6d7e 37 apndef will be used if no entry matches.
mazgch 90:3915192f6d7e 38
mazgch 90:3915192f6d7e 39 The APN without username/password have to be listed first.
mazgch 89:ea396f9f90a2 40 */
mazgch 85:dd8f4f0d0ca9 41 static const APN_t apnlut[] = {
mazgch 88:135fb4bb7aac 42 // MCC Country
mazgch 88:135fb4bb7aac 43 // { /* Operator */ "MCC-MNC[,MNC]" _APN(APN,USERNAME,PASSWORD) },
mazgch 88:135fb4bb7aac 44 // MCC must be 3 digits
mazgch 88:135fb4bb7aac 45 // MNC must be either 2 or 3 digits
mazgch 85:dd8f4f0d0ca9 46
mazgch 89:ea396f9f90a2 47 // 262 Germany - DE
mazgch 88:135fb4bb7aac 48 { /* T-Mobile */ "262-01", _APN("internet.t-mobile","t-mobile","tm") },
mazgch 88:135fb4bb7aac 49
mazgch 89:ea396f9f90a2 50 // 222 Italy - IT
mazgch 88:135fb4bb7aac 51 { /* TIM */ "222-01", _APN("ibox.tim.it",,) },
mazgch 88:135fb4bb7aac 52 { /* Vodafone */ "222-10", _APN("web.omnitel.it",,) },
mazgch 89:ea396f9f90a2 53 { /* Wind */ "222-88", _APN("internet.wind.biz",,) },
mazgch 85:dd8f4f0d0ca9 54
mazgch 90:3915192f6d7e 55 // 440 Japan - JP
mazgch 90:3915192f6d7e 56 { /* Softbank */ "440-04,06,20,40,41,42,43,44,45,46,47,48,90,91,92,93,94,95"
mazgch 90:3915192f6d7e 57 ",96,97,98"
mazgch 90:3915192f6d7e 58 _APN("open.softbank.ne.jp","opensoftbank","ebMNuX1FIHg9d3DA")
mazgch 90:3915192f6d7e 59 _APN("smile.world","dna1trop","so2t3k3m2a") },
mazgch 90:3915192f6d7e 60 { /* NTTDoCoMo */"440-09,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,"
mazgch 90:3915192f6d7e 61 "28,29,30,31,32,33,34,35,36,37,38,39,58,59,60,61,62,63,"
mazgch 90:3915192f6d7e 62 "64,65,66,67,68,69,87,99",
mazgch 90:3915192f6d7e 63 _APN("bmobilewap",,) /*BMobile*/
mazgch 90:3915192f6d7e 64 _APN("mpr2.bizho.net","Mopera U",) /* DoCoMo */
mazgch 90:3915192f6d7e 65 _APN("bmobile.ne.jp","bmobile@wifi2","bmobile") /*BMobile*/ },
mazgch 90:3915192f6d7e 66
mazgch 89:ea396f9f90a2 67 // 293 Slovenia - SI
mazgch 89:ea396f9f90a2 68 { /* Si.mobil */ "293-40", _APN("internet.simobil.si",,) },
mazgch 89:ea396f9f90a2 69 { /* Tusmobil */ "293-70", _APN("internet.tusmobil.si",,) },
mazgch 89:ea396f9f90a2 70
mazgch 89:ea396f9f90a2 71 // 228 Switzerland - CH
mazgch 88:135fb4bb7aac 72 { /* Swisscom */ "228-01", _APN("gprs.swisscom.ch",,) },
mazgch 88:135fb4bb7aac 73 { /* Orange */ "228-03", _APN("internet",,) /* contract */
mazgch 88:135fb4bb7aac 74 _APN("click",,) /* pre-pay */ },
mazgch 88:135fb4bb7aac 75
mazgch 88:135fb4bb7aac 76 // 234 United Kingdom - GB
mazgch 88:135fb4bb7aac 77 { /* O2 */ "234-02,10,11",
mazgch 88:135fb4bb7aac 78 _APN("mobile.o2.co.uk","faster","web") /* contract */
mazgch 88:135fb4bb7aac 79 _APN("mobile.o2.co.uk","bypass","web") /* pre-pay */
mazgch 88:135fb4bb7aac 80 _APN("payandgo.o2.co.uk","payandgo","payandgo") },
mazgch 88:135fb4bb7aac 81 { /* Vodafone */ "234-15", _APN("internet","web","web") /* contract */
mazgch 88:135fb4bb7aac 82 _APN("pp.vodafone.co.uk","wap","wap") /* pre-pay */ },
mazgch 88:135fb4bb7aac 83
mazgch 89:ea396f9f90a2 84 // 310 United States of America - US
mazgch 88:135fb4bb7aac 85 { /* T-Mobile */ "310-026,260,490",
mazgch 85:dd8f4f0d0ca9 86 _APN("epc.tmobile.com",,)
mazgch 88:135fb4bb7aac 87 _APN("fast.tmobile.com",,) /* LTE */ },
mazgch 88:135fb4bb7aac 88 { /* AT&T */ "310-030,150,170,260,410,560,680",
mazgch 90:3915192f6d7e 89 _APN("phone",,)
mazgch 85:dd8f4f0d0ca9 90 _APN("wap.cingular","WAP@CINGULARGPRS.COM","CINGULAR1")
mazgch 85:dd8f4f0d0ca9 91 _APN("isp.cingular","ISP@CINGULARGPRS.COM","CINGULAR1") },
mazgch 85:dd8f4f0d0ca9 92 };
mazgch 88:135fb4bb7aac 93
mazgch 88:135fb4bb7aac 94 inline const char* apnconfig(const char* imsi)
mazgch 88:135fb4bb7aac 95 {
mazgch 88:135fb4bb7aac 96 const char* config = NULL;
mazgch 88:135fb4bb7aac 97 if (imsi && *imsi) {
mazgch 88:135fb4bb7aac 98 // many carriers use internet without username and password, os use this as default
mazgch 88:135fb4bb7aac 99 // now try to lookup the setting for our table
mazgch 88:135fb4bb7aac 100 for (int i = 0; i < sizeof(apnlut)/sizeof(*apnlut) && !config; i ++) {
mazgch 88:135fb4bb7aac 101 const char* p = apnlut[i].mccmnc;
mazgch 88:135fb4bb7aac 102 // check the MCC
mazgch 88:135fb4bb7aac 103 if ((0 == memcmp(imsi, p, 3))) {
mazgch 88:135fb4bb7aac 104 p += 3;
mazgch 88:135fb4bb7aac 105 // check all the MNC, MNC length can be 2 or 3 digits
mazgch 88:135fb4bb7aac 106 while (((p[0] == '-') || (p[0] == ',')) &&
mazgch 88:135fb4bb7aac 107 (p[1] >= '0') && (p[1] <= '9') &&
mazgch 88:135fb4bb7aac 108 (p[2] >= '0') && (p[2] <= '9') && !config) {
mazgch 88:135fb4bb7aac 109 int l = ((p[3] >= '0') && (p[3] <= '9')) ? 3 : 2;
mazgch 88:135fb4bb7aac 110 if (0 == memcmp(imsi+3,p+1,l))
mazgch 88:135fb4bb7aac 111 config = apnlut[i].cfg;
mazgch 88:135fb4bb7aac 112 p += 1 + l;
mazgch 88:135fb4bb7aac 113 }
mazgch 88:135fb4bb7aac 114 }
mazgch 88:135fb4bb7aac 115 }
mazgch 88:135fb4bb7aac 116 }
mazgch 88:135fb4bb7aac 117 // use default if not found
mazgch 88:135fb4bb7aac 118 if (!config)
mazgch 88:135fb4bb7aac 119 config = apndef;
mazgch 88:135fb4bb7aac 120 return config;
mazgch 88:135fb4bb7aac 121 }