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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "common.h"
00002 #include "apndb.h"
00003 #include "io.h"
00004 
00005 C027 c027;
00006 MDMSerial* pMdm;
00007 sigq_t sigQ = {};
00008 char cCellId[8+1];
00009 MDMParser::DevStatus devStatus = {};
00010 MDMParser::NetStatus netStatus = {};
00011 
00012 int main()
00013 {
00014     int ret; size_t c;
00015     
00016     puts("Hello");
00017 
00018     io_init();
00019     puts("IO initialized.");
00020 
00021     MDMSerial mdm;
00022     //mdm.setDebug(4);
00023     pMdm = &mdm;
00024 
00025     if (!mdm.init(NULL, &devStatus)) {
00026         puts("Modem initialization failed. Check your PIN number.");
00027         return 1;
00028     }
00029 
00030     puts("Searching for login...");
00031     apndb_t *apn = apndb_get(devStatus.imsi);
00032     if (apn == NULL) {
00033         puts("No APN found. Stop.");
00034         return 1;
00035     }
00036     
00037     // print out basic device data
00038     printf("IMEI: %s\n", devStatus.imei);
00039     printf("IMSI: %s\n", devStatus.imsi);
00040 
00041     if (!mdm.registerNet(&netStatus)) {
00042         puts("Network registration failed.");
00043         return 1;
00044     }
00045 
00046     printf("Carrier: %s\n", apn->carrier);
00047     puts("Joining Network.");
00048     if (mdm.join(apn->apn) == NOIP) {
00049         puts("Could not join network. Make sure chosen carrier is correct and no credentials are required.");
00050         return 1;
00051     }
00052     
00053     // Shown on display
00054     signalQuality();
00055 
00056     puts("Starting program...");    
00057     
00058     // restart program upon failure
00059     do {
00060         ret = program();
00061         if (ret)
00062             puts("Restarting program...");
00063     } while (ret);
00064     
00065     mdm.disconnect();
00066     c027.mdmPower(false);
00067     
00068     return 0;
00069 }
00070 
00071 const char * imei()
00072 {
00073     return devStatus.imei;
00074 }
00075 
00076 const char * imsi()
00077 {
00078     return devStatus.imsi;
00079 }
00080 
00081 const char * cellId()
00082 {
00083     if (!pMdm->checkNetStatus(&netStatus))
00084         return NULL;
00085 
00086     if (snprintf(cCellId, sizeof(cCellId), "%X", netStatus.ci) < 1)
00087         return NULL;
00088         
00089     return cCellId;
00090 }
00091 
00092 const char * iccid()
00093 {
00094     return devStatus.ccid;
00095 }
00096 
00097 sigq_t * signalQuality()
00098 {
00099     sigQ.rssi = 0; sigQ.ber = 0;
00100     if (!pMdm->checkNetStatus(&netStatus))
00101         return NULL;
00102 
00103     sigQ.rssi = netStatus.rssi;
00104     sigQ.ber = netStatus.ber;
00105     
00106     lcd_signal(sigQ.rssi, sigQ.ber);
00107     return &sigQ;
00108 }
00109 
00110 void credentials_set(credentials_t *dst, const char *tenant, const char *username, const char *password)
00111 {
00112     char *ptr = dst->username;
00113     
00114     strcpy(ptr, tenant);
00115     ptr += strlen(tenant);
00116     strcpy(ptr++, "/");
00117     strcpy(ptr, username);
00118     strcpy(dst->password, password);
00119 }
00120 
00121 bool credentials_read(credentials_t *dst)
00122 {
00123     char buf[CREDENTIALS_BUFFER], *ptr;
00124 
00125     int res =  pMdm->readFile(CREDENTIALS_FILE, buf, CREDENTIALS_BUFFER);
00126 
00127     if (res < 0)
00128         return false;
00129         
00130     buf[res] = '\0';
00131     if ((ptr = strchr(buf, '\n')) == NULL)
00132         return false;
00133     *ptr = '\0';
00134     
00135     ptr = buf;
00136     strcpy(dst->username, ptr);
00137     ptr += strlen(ptr)+1;
00138     strcpy(dst->password, ptr);
00139     return true;
00140 }
00141 
00142 void credentials_write(credentials_t *src)
00143 {
00144     char buf[CREDENTIALS_BUFFER], *ptr;
00145     size_t len;
00146 
00147     ptr = buf;
00148     len = strlen(src->username);
00149     strcpy(ptr, src->username);
00150     ptr += len;
00151     
00152     *ptr++ = '\n';
00153     len++;
00154     
00155     len += strlen(src->password);
00156     strcpy(ptr, src->password);
00157     
00158     pMdm->delFile(CREDENTIALS_FILE);
00159     pMdm->writeFile(CREDENTIALS_FILE, buf, len);
00160 }
00161 
00162 void credentials_reset()
00163 {
00164     pMdm->delFile(CREDENTIALS_FILE);
00165 }