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
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 }
Generated on Wed Jul 13 2022 19:03:58 by 1.7.2