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