![](/media/cache/group/u-blox_logo_trans.png.50x50_q85.png)
portable version of the cumulocity demo
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
main.cpp@33:b7d7e6fc421e, 2014-06-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |