Own fork of MbedSmartRestMain
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
main.cpp@6:642e7c233e83, 2014-02-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |