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 Feb 20 11:51:54 2014 +0000
Revision:
20:ef9cc1b42e9d
Parent:
15:0ccf0f530a05
Child:
23:0a48eebaaba8
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 6:642e7c233e83 1 #include "common.h"
vwochnik 15:0ccf0f530a05 2 #include "io.h"
vwochnik 6:642e7c233e83 3 #include "ATResultBuffer.h"
vwochnik 0:ed4d6fd405ea 4
vwochnik 0:ed4d6fd405ea 5 C027 c027;
vwochnik 6:642e7c233e83 6 ATCommandsInterface *cmdIface = NULL;
vwochnik 6:642e7c233e83 7 char cIMEI[21] = "";
vwochnik 6:642e7c233e83 8 char cCellId[9] = "";
vwochnik 7:f77afd49c35d 9 char cICCID[24] = "";
vwochnik 6:642e7c233e83 10 sigq_t sigQ = {0, 0};
vwochnik 0:ed4d6fd405ea 11
vwochnik 0:ed4d6fd405ea 12 int main()
vwochnik 0:ed4d6fd405ea 13 {
vwochnik 7:f77afd49c35d 14 int ret;
vwochnik 7:f77afd49c35d 15
vwochnik 7:f77afd49c35d 16 puts("Started...");
vwochnik 15:0ccf0f530a05 17 io_init();
vwochnik 15:0ccf0f530a05 18 puts("IO initialized.");
vwochnik 15:0ccf0f530a05 19
vwochnik 7:f77afd49c35d 20 c027.mdmWakeup();
vwochnik 7:f77afd49c35d 21 c027.mdmReset();
vwochnik 7:f77afd49c35d 22 c027.mdmPower(true);
vwochnik 7:f77afd49c35d 23 UbloxUSBGSMModem modem;
vwochnik 7:f77afd49c35d 24 cmdIface = modem.getATCommandsInterface();
vwochnik 6:642e7c233e83 25
vwochnik 6:642e7c233e83 26 puts("Connecting...");
vwochnik 4:363b4cc49445 27 if (modem.connect("public4.m2minternet.com")) {
vwochnik 4:363b4cc49445 28 puts("GPRS connection failure.");
vwochnik 4:363b4cc49445 29 return 2;
vwochnik 4:363b4cc49445 30 }
vwochnik 5:dee05a7c70f9 31
vwochnik 8:940c782eec5e 32 // get before starting program as they're permanent
vwochnik 13:4045b6ac448d 33 if ((!strlen(imei())) || (!strlen(iccid()))) {
vwochnik 12:beb64aa0da86 34 puts("Couldn't read IMEI or ICCID.");
vwochnik 12:beb64aa0da86 35 return 2;
vwochnik 12:beb64aa0da86 36 }
vwochnik 4:363b4cc49445 37
vwochnik 7:f77afd49c35d 38 puts("Starting program...");
vwochnik 8:940c782eec5e 39
vwochnik 8:940c782eec5e 40 // restart program upon failure
vwochnik 8:940c782eec5e 41 do {
vwochnik 8:940c782eec5e 42 ret = program();
vwochnik 12:beb64aa0da86 43 if (ret)
vwochnik 12:beb64aa0da86 44 puts("Restarting program...");
vwochnik 8:940c782eec5e 45 } while (ret);
vwochnik 4:363b4cc49445 46
vwochnik 4:363b4cc49445 47 modem.disconnect();
vwochnik 6:642e7c233e83 48 c027.mdmPower(false);
vwochnik 6:642e7c233e83 49
vwochnik 8:940c782eec5e 50 return 0;
vwochnik 4:363b4cc49445 51 }
vwochnik 4:363b4cc49445 52
vwochnik 6:642e7c233e83 53 const char * imei()
vwochnik 4:363b4cc49445 54 {
vwochnik 6:642e7c233e83 55 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 56 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 57
vwochnik 6:642e7c233e83 58 if ((cmdIface == NULL) || (strlen(cIMEI)))
vwochnik 6:642e7c233e83 59 return cIMEI;
vwochnik 4:363b4cc49445 60
vwochnik 6:642e7c233e83 61 cmdIface->execute("AT+CGSN", &buffer, &result);
vwochnik 6:642e7c233e83 62 if (ATCommandsInterface::ATResult::AT_OK == result.result)
vwochnik 6:642e7c233e83 63 strcpy(cIMEI, buffer.getLastLine());
vwochnik 6:642e7c233e83 64 else
vwochnik 6:642e7c233e83 65 cIMEI[0] = '\0';
vwochnik 4:363b4cc49445 66
vwochnik 6:642e7c233e83 67 return cIMEI;
vwochnik 0:ed4d6fd405ea 68 }
vwochnik 4:363b4cc49445 69
vwochnik 6:642e7c233e83 70 const char * cellId()
vwochnik 4:363b4cc49445 71 {
vwochnik 6:642e7c233e83 72 int len; uint32_t cellId;
vwochnik 6:642e7c233e83 73
vwochnik 6:642e7c233e83 74 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 75 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 76
vwochnik 6:642e7c233e83 77 cCellId[0] = '\0';
vwochnik 4:363b4cc49445 78
vwochnik 6:642e7c233e83 79 if (cmdIface == NULL)
vwochnik 6:642e7c233e83 80 return cCellId;
vwochnik 4:363b4cc49445 81
vwochnik 6:642e7c233e83 82 cmdIface->executeSimple("AT+CREG=2", &result);
vwochnik 6:642e7c233e83 83 if (ATCommandsInterface::ATResult::AT_OK != result.result)
vwochnik 6:642e7c233e83 84 return cCellId;
vwochnik 4:363b4cc49445 85
vwochnik 6:642e7c233e83 86 cmdIface->execute("AT+CREG?", &buffer, &result);
vwochnik 6:642e7c233e83 87 if (buffer.getLastLine() == NULL)
vwochnik 6:642e7c233e83 88 return cCellId;
vwochnik 6:642e7c233e83 89 sscanf(buffer.getLastLine(), "+CREG: 2,%*d,\"%*lx\",\"%lx\",%*d%n", &cellId, &len);
vwochnik 6:642e7c233e83 90 if (len != strlen(buffer.getLastLine()))
vwochnik 6:642e7c233e83 91 return cCellId;
vwochnik 6:642e7c233e83 92 snprintf(cCellId, sizeof(cCellId), "%lX", cellId);
vwochnik 4:363b4cc49445 93
vwochnik 6:642e7c233e83 94 return cCellId;
vwochnik 4:363b4cc49445 95 }
vwochnik 4:363b4cc49445 96
vwochnik 7:f77afd49c35d 97 const char * iccid()
vwochnik 7:f77afd49c35d 98 {
vwochnik 7:f77afd49c35d 99 int len;
vwochnik 7:f77afd49c35d 100
vwochnik 7:f77afd49c35d 101 ATCommandsInterface::ATResult result;
vwochnik 7:f77afd49c35d 102 ATResultBuffer buffer;
vwochnik 7:f77afd49c35d 103
vwochnik 7:f77afd49c35d 104 if ((cmdIface == NULL) || (strlen(cICCID)))
vwochnik 7:f77afd49c35d 105 return cICCID;
vwochnik 7:f77afd49c35d 106
vwochnik 7:f77afd49c35d 107 cmdIface->execute("AT+CCID?", &buffer, &result);
vwochnik 7:f77afd49c35d 108 if (buffer.getLastLine() == NULL)
vwochnik 7:f77afd49c35d 109 return cCellId;
vwochnik 7:f77afd49c35d 110 sscanf(buffer.getLastLine(), "+CCID: %s%n", cICCID, &len);
vwochnik 7:f77afd49c35d 111 if (len != strlen(buffer.getLastLine()))
vwochnik 7:f77afd49c35d 112 cICCID[0] = '\0';
vwochnik 7:f77afd49c35d 113
vwochnik 7:f77afd49c35d 114 return cICCID;
vwochnik 7:f77afd49c35d 115 }
vwochnik 7:f77afd49c35d 116
vwochnik 6:642e7c233e83 117 sigq_t * signalQuality()
vwochnik 4:363b4cc49445 118 {
vwochnik 6:642e7c233e83 119 int rssi = 0, ber = 0, len = 0;
vwochnik 4:363b4cc49445 120
vwochnik 6:642e7c233e83 121 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 122 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 123
vwochnik 6:642e7c233e83 124 sigQ.rssi = 0; sigQ.ber = 0;
vwochnik 20:ef9cc1b42e9d 125
vwochnik 20:ef9cc1b42e9d 126 lcd_signal(0, 0);
vwochnik 4:363b4cc49445 127
vwochnik 6:642e7c233e83 128 if (cmdIface == NULL)
vwochnik 6:642e7c233e83 129 return &sigQ;
vwochnik 4:363b4cc49445 130
vwochnik 6:642e7c233e83 131 cmdIface->execute("AT+CSQ", &buffer, &result);
vwochnik 6:642e7c233e83 132 if (buffer.getLastLine() == NULL)
vwochnik 6:642e7c233e83 133 return &sigQ;
vwochnik 6:642e7c233e83 134
vwochnik 6:642e7c233e83 135 sscanf(buffer.getLastLine(), "+CSQ: %d,%d%n", &rssi, &ber, &len);
vwochnik 6:642e7c233e83 136 if (len != strlen(buffer.getLastLine()))
vwochnik 6:642e7c233e83 137 return &sigQ;
vwochnik 6:642e7c233e83 138
vwochnik 6:642e7c233e83 139 if (rssi <= 31)
vwochnik 6:642e7c233e83 140 sigQ.rssi = -113 + (2 * rssi);
vwochnik 6:642e7c233e83 141 else
vwochnik 6:642e7c233e83 142 sigQ.rssi = 0;
vwochnik 4:363b4cc49445 143
vwochnik 6:642e7c233e83 144 switch (ber) {
vwochnik 6:642e7c233e83 145 case 0: sigQ.ber = 49; break;
vwochnik 6:642e7c233e83 146 case 1: sigQ.ber = 43; break;
vwochnik 6:642e7c233e83 147 case 2: sigQ.ber = 37; break;
vwochnik 6:642e7c233e83 148 case 3: sigQ.ber = 31; break;
vwochnik 6:642e7c233e83 149 case 4: sigQ.ber = 25; break;
vwochnik 6:642e7c233e83 150 case 5: sigQ.ber = 19; break;
vwochnik 6:642e7c233e83 151 case 6: sigQ.ber = 13; break;
vwochnik 6:642e7c233e83 152 case 7: sigQ.ber = 7; break;
vwochnik 6:642e7c233e83 153 default: sigQ.ber = 0;
vwochnik 4:363b4cc49445 154 }
vwochnik 20:ef9cc1b42e9d 155
vwochnik 20:ef9cc1b42e9d 156 lcd_signal(sigQ.rssi, sigQ.ber);
vwochnik 4:363b4cc49445 157
vwochnik 6:642e7c233e83 158 return &sigQ;
vwochnik 4:363b4cc49445 159 }