portable version of the cumulocity demo

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Committer:
vwochnik
Date:
Wed Feb 12 12:13:36 2014 +0000
Revision:
8:940c782eec5e
Parent:
7:f77afd49c35d
Child:
12:beb64aa0da86
fix

Who changed what in which revision?

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