SmartREST client reference implementation for the u-blox C027 mbed compatible device.

Dependencies:   C027 C027_Support mbed mbed-rtos MbedSmartRest LM75B MMA7660 C12832

Fork of MbedSmartRestTest by Vincent Wochnik

Committer:
vwochnik
Date:
Thu Jun 12 14:33:04 2014 +0000
Revision:
33:b7d7e6fc421e
Parent:
32:56804dd00193
Child:
34:8a0556f39161
device bootstrapping

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 6:642e7c233e83 1 #include "common.h"
vwochnik 23:0a48eebaaba8 2 #include "apndb.h"
vwochnik 15:0ccf0f530a05 3 #include "io.h"
vwochnik 0:ed4d6fd405ea 4
vwochnik 0:ed4d6fd405ea 5 C027 c027;
vwochnik 32:56804dd00193 6 MDMSerial* pMdm;
vwochnik 28:2004400abeec 7 sigq_t sigQ = {};
vwochnik 28:2004400abeec 8 char cCellId[8+1];
vwochnik 28:2004400abeec 9 MDMParser::DevStatus devStatus = {};
vwochnik 28:2004400abeec 10 MDMParser::NetStatus netStatus = {};
vwochnik 0:ed4d6fd405ea 11
vwochnik 0:ed4d6fd405ea 12 int main()
vwochnik 0:ed4d6fd405ea 13 {
vwochnik 24:8f9b678a7932 14 int ret; size_t c;
vwochnik 7:f77afd49c35d 15
vwochnik 32:56804dd00193 16 puts("Hello");
vwochnik 32:56804dd00193 17
vwochnik 15:0ccf0f530a05 18 io_init();
vwochnik 15:0ccf0f530a05 19 puts("IO initialized.");
vwochnik 15:0ccf0f530a05 20
vwochnik 32:56804dd00193 21 MDMSerial mdm;
vwochnik 33:b7d7e6fc421e 22 mdm.setDebug(4);
vwochnik 32:56804dd00193 23 pMdm = &mdm;
vwochnik 27:bfd402593acc 24
vwochnik 29:853741b9ea3b 25 if (!mdm.init(NULL, &devStatus)) {
vwochnik 28:2004400abeec 26 puts("Modem initialization failed. Check your PIN number.");
vwochnik 28:2004400abeec 27 return 1;
vwochnik 28:2004400abeec 28 }
vwochnik 28:2004400abeec 29
vwochnik 28:2004400abeec 30 puts("Searching for login...");
vwochnik 28:2004400abeec 31 apndb_t *apn = apndb_get(devStatus.imsi);
vwochnik 28:2004400abeec 32 if (apn == NULL) {
vwochnik 28:2004400abeec 33 puts("No APN found. Stop.");
vwochnik 28:2004400abeec 34 return 1;
vwochnik 4:363b4cc49445 35 }
vwochnik 29:853741b9ea3b 36
vwochnik 29:853741b9ea3b 37 // print out basic device data
vwochnik 29:853741b9ea3b 38 printf("IMEI: %s\n", devStatus.imei);
vwochnik 29:853741b9ea3b 39 printf("IMSI: %s\n", devStatus.imsi);
vwochnik 24:8f9b678a7932 40
vwochnik 32:56804dd00193 41 if (!mdm.registerNet(&netStatus)) {
vwochnik 32:56804dd00193 42 puts("Network registration failed.");
vwochnik 28:2004400abeec 43 return 1;
vwochnik 28:2004400abeec 44 }
vwochnik 28:2004400abeec 45
vwochnik 29:853741b9ea3b 46 printf("Carrier: %s\n", apn->carrier);
vwochnik 28:2004400abeec 47 puts("Joining Network.");
vwochnik 29:853741b9ea3b 48 if (mdm.join(apn->apn) == NOIP) {
vwochnik 29:853741b9ea3b 49 puts("Could not join network. Make sure chosen carrier is correct and no credentials are required.");
vwochnik 28:2004400abeec 50 return 1;
vwochnik 28:2004400abeec 51 }
vwochnik 23:0a48eebaaba8 52
vwochnik 23:0a48eebaaba8 53 // Shown on display
vwochnik 23:0a48eebaaba8 54 signalQuality();
vwochnik 4:363b4cc49445 55
vwochnik 7:f77afd49c35d 56 puts("Starting program...");
vwochnik 8:940c782eec5e 57
vwochnik 8:940c782eec5e 58 // restart program upon failure
vwochnik 8:940c782eec5e 59 do {
vwochnik 8:940c782eec5e 60 ret = program();
vwochnik 12:beb64aa0da86 61 if (ret)
vwochnik 12:beb64aa0da86 62 puts("Restarting program...");
vwochnik 8:940c782eec5e 63 } while (ret);
vwochnik 32:56804dd00193 64
vwochnik 30:daa499571db7 65 mdm.disconnect();
vwochnik 6:642e7c233e83 66 c027.mdmPower(false);
vwochnik 6:642e7c233e83 67
vwochnik 8:940c782eec5e 68 return 0;
vwochnik 4:363b4cc49445 69 }
vwochnik 4:363b4cc49445 70
vwochnik 6:642e7c233e83 71 const char * imei()
vwochnik 4:363b4cc49445 72 {
vwochnik 28:2004400abeec 73 return devStatus.imei;
vwochnik 0:ed4d6fd405ea 74 }
vwochnik 4:363b4cc49445 75
vwochnik 23:0a48eebaaba8 76 const char * imsi()
vwochnik 23:0a48eebaaba8 77 {
vwochnik 28:2004400abeec 78 return devStatus.imsi;
vwochnik 23:0a48eebaaba8 79 }
vwochnik 23:0a48eebaaba8 80
vwochnik 6:642e7c233e83 81 const char * cellId()
vwochnik 4:363b4cc49445 82 {
vwochnik 32:56804dd00193 83 if (!pMdm->checkNetStatus(&netStatus))
vwochnik 28:2004400abeec 84 return NULL;
vwochnik 28:2004400abeec 85
vwochnik 28:2004400abeec 86 if (snprintf(cCellId, sizeof(cCellId), "%X", netStatus.ci) < 1)
vwochnik 28:2004400abeec 87 return NULL;
vwochnik 28:2004400abeec 88
vwochnik 6:642e7c233e83 89 return cCellId;
vwochnik 4:363b4cc49445 90 }
vwochnik 4:363b4cc49445 91
vwochnik 7:f77afd49c35d 92 const char * iccid()
vwochnik 7:f77afd49c35d 93 {
vwochnik 28:2004400abeec 94 return devStatus.ccid;
vwochnik 7:f77afd49c35d 95 }
vwochnik 7:f77afd49c35d 96
vwochnik 6:642e7c233e83 97 sigq_t * signalQuality()
vwochnik 4:363b4cc49445 98 {
vwochnik 6:642e7c233e83 99 sigQ.rssi = 0; sigQ.ber = 0;
vwochnik 32:56804dd00193 100 if (!pMdm->checkNetStatus(&netStatus))
vwochnik 28:2004400abeec 101 return NULL;
vwochnik 28:2004400abeec 102
vwochnik 28:2004400abeec 103 sigQ.rssi = netStatus.rssi;
vwochnik 28:2004400abeec 104 sigQ.ber = netStatus.ber;
vwochnik 20:ef9cc1b42e9d 105
vwochnik 28:2004400abeec 106 lcd_signal(sigQ.rssi, sigQ.ber);
vwochnik 6:642e7c233e83 107 return &sigQ;
vwochnik 4:363b4cc49445 108 }
vwochnik 32:56804dd00193 109
vwochnik 32:56804dd00193 110 void credentials_set(credentials_t *dst, const char *tenant, const char *username, const char *password)
vwochnik 32:56804dd00193 111 {
vwochnik 32:56804dd00193 112 char *ptr = dst->username;
vwochnik 32:56804dd00193 113
vwochnik 32:56804dd00193 114 strcpy(ptr, tenant);
vwochnik 32:56804dd00193 115 ptr += strlen(tenant);
vwochnik 32:56804dd00193 116 strcpy(ptr++, "/");
vwochnik 32:56804dd00193 117 strcpy(ptr, username);
vwochnik 32:56804dd00193 118 strcpy(dst->password, password);
vwochnik 32:56804dd00193 119 }
vwochnik 32:56804dd00193 120
vwochnik 32:56804dd00193 121 bool credentials_read(credentials_t *dst)
vwochnik 32:56804dd00193 122 {
vwochnik 32:56804dd00193 123 char buf[CREDENTIALS_BUFFER], *ptr;
vwochnik 32:56804dd00193 124
vwochnik 32:56804dd00193 125 int res = pMdm->readFile(CREDENTIALS_FILE, buf, CREDENTIALS_BUFFER);
vwochnik 32:56804dd00193 126
vwochnik 32:56804dd00193 127 if (res < 0)
vwochnik 32:56804dd00193 128 return false;
vwochnik 33:b7d7e6fc421e 129
vwochnik 33:b7d7e6fc421e 130 buf[res] = '\0';
vwochnik 32:56804dd00193 131 if ((ptr = strchr(buf, '\n')) == NULL)
vwochnik 32:56804dd00193 132 return false;
vwochnik 32:56804dd00193 133 *ptr = '\0';
vwochnik 32:56804dd00193 134
vwochnik 32:56804dd00193 135 ptr = buf;
vwochnik 32:56804dd00193 136 strcpy(dst->username, ptr);
vwochnik 32:56804dd00193 137 ptr += strlen(ptr)+1;
vwochnik 32:56804dd00193 138 strcpy(dst->password, ptr);
vwochnik 32:56804dd00193 139 return true;
vwochnik 32:56804dd00193 140 }
vwochnik 32:56804dd00193 141
vwochnik 32:56804dd00193 142 void credentials_write(credentials_t *src)
vwochnik 32:56804dd00193 143 {
vwochnik 32:56804dd00193 144 char buf[CREDENTIALS_BUFFER], *ptr;
vwochnik 32:56804dd00193 145 size_t len;
vwochnik 32:56804dd00193 146
vwochnik 32:56804dd00193 147 ptr = buf;
vwochnik 32:56804dd00193 148 len = strlen(src->username);
vwochnik 32:56804dd00193 149 strcpy(ptr, src->username);
vwochnik 32:56804dd00193 150 ptr += len;
vwochnik 32:56804dd00193 151
vwochnik 32:56804dd00193 152 *ptr++ = '\n';
vwochnik 32:56804dd00193 153 len++;
vwochnik 32:56804dd00193 154
vwochnik 32:56804dd00193 155 len += strlen(src->password);
vwochnik 32:56804dd00193 156 strcpy(ptr, src->password);
vwochnik 32:56804dd00193 157
vwochnik 32:56804dd00193 158 pMdm->delFile(CREDENTIALS_FILE);
vwochnik 32:56804dd00193 159 pMdm->writeFile(CREDENTIALS_FILE, buf, len);
vwochnik 32:56804dd00193 160 }
vwochnik 32:56804dd00193 161
vwochnik 32:56804dd00193 162 void credentials_reset()
vwochnik 32:56804dd00193 163 {
vwochnik 32:56804dd00193 164 pMdm->delFile(CREDENTIALS_FILE);
vwochnik 32:56804dd00193 165 }