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:
Mon Feb 10 15:46:26 2014 +0000
Revision:
6:642e7c233e83
Parent:
5:dee05a7c70f9
Child:
7:f77afd49c35d
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 6:642e7c233e83 8 sigq_t sigQ = {0, 0};
vwochnik 0:ed4d6fd405ea 9
vwochnik 0:ed4d6fd405ea 10 int main()
vwochnik 0:ed4d6fd405ea 11 {
vwochnik 6:642e7c233e83 12 int ret;
vwochnik 6:642e7c233e83 13
vwochnik 6:642e7c233e83 14 puts("Started...");
vwochnik 5:dee05a7c70f9 15 c027.mdmWakeup();
vwochnik 5:dee05a7c70f9 16 c027.mdmReset();
vwochnik 5:dee05a7c70f9 17 c027.mdmPower(true);
vwochnik 5:dee05a7c70f9 18 UbloxUSBGSMModem modem;
vwochnik 6:642e7c233e83 19 cmdIface = modem.getATCommandsInterface();
vwochnik 6:642e7c233e83 20
vwochnik 6:642e7c233e83 21 puts("Connecting...");
vwochnik 4:363b4cc49445 22 if (modem.connect("public4.m2minternet.com")) {
vwochnik 4:363b4cc49445 23 puts("GPRS connection failure.");
vwochnik 4:363b4cc49445 24 return 2;
vwochnik 4:363b4cc49445 25 }
vwochnik 5:dee05a7c70f9 26
vwochnik 6:642e7c233e83 27 printf("IMEI: %s\r\n", imei());
vwochnik 6:642e7c233e83 28 printf("Cell-ID: %s\r\n", cellId());
vwochnik 6:642e7c233e83 29 sigq_t *sq = signalQuality();
vwochnik 6:642e7c233e83 30 printf("RSSI: %d dBm, BER: %d %%\r\n", sq->rssi, sq->ber);
vwochnik 4:363b4cc49445 31
vwochnik 6:642e7c233e83 32 //puts("Starting program...");
vwochnik 6:642e7c233e83 33 //ret = program();
vwochnik 4:363b4cc49445 34
vwochnik 4:363b4cc49445 35 modem.disconnect();
vwochnik 6:642e7c233e83 36 c027.mdmPower(false);
vwochnik 6:642e7c233e83 37
vwochnik 6:642e7c233e83 38 return ret;
vwochnik 4:363b4cc49445 39 }
vwochnik 4:363b4cc49445 40
vwochnik 6:642e7c233e83 41 const char * imei()
vwochnik 4:363b4cc49445 42 {
vwochnik 6:642e7c233e83 43 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 44 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 45
vwochnik 6:642e7c233e83 46 if ((cmdIface == NULL) || (strlen(cIMEI)))
vwochnik 6:642e7c233e83 47 return cIMEI;
vwochnik 4:363b4cc49445 48
vwochnik 6:642e7c233e83 49 cmdIface->execute("AT+CGSN", &buffer, &result);
vwochnik 6:642e7c233e83 50 if (ATCommandsInterface::ATResult::AT_OK == result.result)
vwochnik 6:642e7c233e83 51 strcpy(cIMEI, buffer.getLastLine());
vwochnik 6:642e7c233e83 52 else
vwochnik 6:642e7c233e83 53 cIMEI[0] = '\0';
vwochnik 4:363b4cc49445 54
vwochnik 6:642e7c233e83 55 return cIMEI;
vwochnik 0:ed4d6fd405ea 56 }
vwochnik 4:363b4cc49445 57
vwochnik 6:642e7c233e83 58 const char * cellId()
vwochnik 4:363b4cc49445 59 {
vwochnik 6:642e7c233e83 60 int len; uint32_t cellId;
vwochnik 6:642e7c233e83 61
vwochnik 6:642e7c233e83 62 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 63 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 64
vwochnik 6:642e7c233e83 65 cCellId[0] = '\0';
vwochnik 4:363b4cc49445 66
vwochnik 6:642e7c233e83 67 if (cmdIface == NULL)
vwochnik 6:642e7c233e83 68 return cCellId;
vwochnik 4:363b4cc49445 69
vwochnik 6:642e7c233e83 70 cmdIface->executeSimple("AT+CREG=2", &result);
vwochnik 6:642e7c233e83 71 if (ATCommandsInterface::ATResult::AT_OK != result.result)
vwochnik 6:642e7c233e83 72 return cCellId;
vwochnik 4:363b4cc49445 73
vwochnik 6:642e7c233e83 74 cmdIface->execute("AT+CREG?", &buffer, &result);
vwochnik 6:642e7c233e83 75 if (buffer.getLastLine() == NULL)
vwochnik 6:642e7c233e83 76 return cCellId;
vwochnik 6:642e7c233e83 77 sscanf(buffer.getLastLine(), "+CREG: 2,%*d,\"%*lx\",\"%lx\",%*d%n", &cellId, &len);
vwochnik 6:642e7c233e83 78 if (len != strlen(buffer.getLastLine()))
vwochnik 6:642e7c233e83 79 return cCellId;
vwochnik 6:642e7c233e83 80 snprintf(cCellId, sizeof(cCellId), "%lX", cellId);
vwochnik 4:363b4cc49445 81
vwochnik 6:642e7c233e83 82 return cCellId;
vwochnik 4:363b4cc49445 83 }
vwochnik 4:363b4cc49445 84
vwochnik 6:642e7c233e83 85 sigq_t * signalQuality()
vwochnik 4:363b4cc49445 86 {
vwochnik 6:642e7c233e83 87 int rssi = 0, ber = 0, len = 0;
vwochnik 4:363b4cc49445 88
vwochnik 6:642e7c233e83 89 ATCommandsInterface::ATResult result;
vwochnik 6:642e7c233e83 90 ATResultBuffer buffer;
vwochnik 6:642e7c233e83 91
vwochnik 6:642e7c233e83 92 sigQ.rssi = 0; sigQ.ber = 0;
vwochnik 4:363b4cc49445 93
vwochnik 6:642e7c233e83 94 if (cmdIface == NULL)
vwochnik 6:642e7c233e83 95 return &sigQ;
vwochnik 4:363b4cc49445 96
vwochnik 6:642e7c233e83 97 cmdIface->execute("AT+CSQ", &buffer, &result);
vwochnik 6:642e7c233e83 98 if (buffer.getLastLine() == NULL)
vwochnik 6:642e7c233e83 99 return &sigQ;
vwochnik 6:642e7c233e83 100
vwochnik 6:642e7c233e83 101 sscanf(buffer.getLastLine(), "+CSQ: %d,%d%n", &rssi, &ber, &len);
vwochnik 6:642e7c233e83 102 if (len != strlen(buffer.getLastLine()))
vwochnik 6:642e7c233e83 103 return &sigQ;
vwochnik 6:642e7c233e83 104
vwochnik 6:642e7c233e83 105 if (rssi <= 31)
vwochnik 6:642e7c233e83 106 sigQ.rssi = -113 + (2 * rssi);
vwochnik 6:642e7c233e83 107 else
vwochnik 6:642e7c233e83 108 sigQ.rssi = 0;
vwochnik 4:363b4cc49445 109
vwochnik 6:642e7c233e83 110 switch (ber) {
vwochnik 6:642e7c233e83 111 case 0: sigQ.ber = 49; break;
vwochnik 6:642e7c233e83 112 case 1: sigQ.ber = 43; break;
vwochnik 6:642e7c233e83 113 case 2: sigQ.ber = 37; break;
vwochnik 6:642e7c233e83 114 case 3: sigQ.ber = 31; break;
vwochnik 6:642e7c233e83 115 case 4: sigQ.ber = 25; break;
vwochnik 6:642e7c233e83 116 case 5: sigQ.ber = 19; break;
vwochnik 6:642e7c233e83 117 case 6: sigQ.ber = 13; break;
vwochnik 6:642e7c233e83 118 case 7: sigQ.ber = 7; break;
vwochnik 6:642e7c233e83 119 default: sigQ.ber = 0;
vwochnik 4:363b4cc49445 120 }
vwochnik 4:363b4cc49445 121
vwochnik 6:642e7c233e83 122 return &sigQ;
vwochnik 4:363b4cc49445 123 }