Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MBed_Adafruit-GPS-Library SDFileSystem mbed
Fork of GPR_Interface by
Revision 11:045cb766d9a5, committed 2015-10-21
- Comitter:
- DeWayneDennis
- Date:
- Wed Oct 21 19:41:42 2015 +0000
- Parent:
- 10:8c55dfcc9a7c
- Commit message:
- Changed GPR Interface to work with pushingbox
Changed in this revision
--- a/GPRS/GPRS.cpp Fri Sep 25 04:10:56 2015 +0000
+++ b/GPRS/GPRS.cpp Wed Oct 21 19:41:42 2015 +0000
@@ -32,6 +32,7 @@
_userName = userName;
_passWord = passWord;
socketID = -1;
+ _phoneNumber = "12345678910";
}
bool GPRS::preInit()
@@ -61,13 +62,13 @@
sendCmdAndWaitForResp("AT+CMGF=1\r\n","OK",DEFAULT_TIMEOUT,CMD);
wait(2);
//printf("\032\n");
- sendCmdAndWaitForResp("AT+CMGS=\"+18183977481\"\r\n",">",DEFAULT_TIMEOUT,CMD);
+ sendCmdAndWaitForResp("AT+CMGS=\"+17066311506\"\r\n",">",DEFAULT_TIMEOUT,CMD);
printf("sent at cmgf\n");
wait(2);
//printf("032");
sendCmd(IPAdress); // sends the address
sendCmd("\x1a"); // this is like pressing control - z to end the send command
- wait(10); // giving the send enough time to do its thing
+ wait(10); // giving the send enough time to do its thing
printf("should have been received");
}
@@ -82,28 +83,31 @@
wait(10);
sendCmd("AT+CMGR=1\r\n");
storeResp();
- char temp[30];
return get_server_IP();
}
// end of what Noah Milam added
bool GPRS::checkSIMStatus(void)
{
+ printf("Checking SIM Status...\r\n");
char gprsBuffer[32];
int count = 0;
- cleanBuffer(gprsBuffer,32);
+
while(count < 3) {
+ cleanBuffer(gprsBuffer,32);
sendCmd("AT+CPIN?\r\n");
readBuffer(gprsBuffer,32,DEFAULT_TIMEOUT);
if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) {
break;
}
+ printf("SIM Not Ready..Try Again\r\n");
count++;
wait(1);
}
if(count == 3) {
return false;
}
+ printf("SIM Status GOOD!\r\n");
return true;
}
@@ -111,26 +115,114 @@
{
char cmd[64];
char ipAddr[32];
+ char resp[96];
+ //get the phone number
+ printf(">>>>AT+CNUM\r\n");
+ sendCmd("AT+CNUM\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"+CNUM:")) {
+ //if(storePhoneNumber(resp)){
+ printf("Successfull stored the phone number!\r\n");
+ //}
+ }
+ else{
+ return false;
+ }
+
+ printf(">>>>AT+CREG\r\n");
+ sendCmd("AT+CREG?\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"+CREG:")) {
+ }
+ else{
+ return false;
+ }
+ //close any existing connections
+ printf(">>>>AT+CIPSHUT\r\n");
+ sendCmd("AT+CIPSHUT\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"OK")) {
+ }
+ else{
+ return false;
+ }
//Select multiple connection
- sendCmdAndWaitForResp("AT+CIPMUX=1\r\n","OK",DEFAULT_TIMEOUT,CMD);
-
+ printf(">>>>AT+CIPMUX=0\r\n");
+ sendCmd("AT+CIPMUX=0\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"CIPMUX")) {
+ }
+ else{
+ return false;
+ }
+ //get signal strength
+ printf(">>>>AT+CSQ\r\n");
+ sendCmd("AT+CSQ\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"+CSQ:")) {
+ }
+ else{
+ return false;
+ }
+
+ //attach the device
+ printf(">>>>AT+CGATT=1\r\n");
+ sendCmd("AT+CGATT=1\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"OK")) {
+ }
+ else{
+ return false;
+ }
+
//set APN
snprintf(cmd,sizeof(cmd),"AT+CSTT=\"%s\",\"%s\",\"%s\"\r\n",_apn,_userName,_passWord);
- sendCmdAndWaitForResp(cmd, "OK", DEFAULT_TIMEOUT,CMD);
-
+ printf(">>>>%s",cmd);
+ //sendCmdAndWaitForRes p(cmd, "OK", DEFAULT_TIMEOUT,CMD);
+ sendCmd(cmd);
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"OK")) {
+ }
+ else{
+ return false;
+ }
//Brings up wireless connection
- sendCmdAndWaitForResp("AT+CIICR\r\n","OK",DEFAULT_TIMEOUT,CMD);
-
+ printf(">>>>AT+CIICR\r\n");
+ sendCmd("AT+CIICR\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"OK")) {
+ }
+ else{
+ return false;
+ }
+
//Get local IP address
+ printf(">>>>AT+CIFSR\r\n");
sendCmd("AT+CIFSR\r\n");
readBuffer(ipAddr,32,2);
-
+ printf(">>>>AT+CIFSR returns: %s\r\n", ipAddr);
if(NULL != strstr(ipAddr,"AT+CIFSR")) {
_ip = str_to_ip(ipAddr+12);
if(_ip != 0) {
- return true;
+ //set to quick sending mode
+ printf(">>>>AT+CIPQSEND=1\r\n");
+ sendCmd("AT+CIPQSEND=1\r\n");
+ cleanBuffer(resp,96);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"OK")) {
+ return true;
+ }
}
}
+
return false;
}
@@ -151,14 +243,15 @@
return false;
}
if(ptl == TCP) {
- sprintf(cmd, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d\r\n",socket, host, port);
+ sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",\"%d\"\r\n", host, port);
} else if(ptl == UDP) {
sprintf(cmd, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d\r\n",socket, host, port);
} else {
return false;
}
+
sendCmd(cmd);
- readBuffer(resp,96,2*DEFAULT_TIMEOUT);
+ readBuffer(resp,96,DEFAULT_TIMEOUT);
if(NULL != strstr(resp,"CONNECT")) { //ALREADY CONNECT or CONNECT OK
return true;
}
@@ -185,24 +278,23 @@
bool GPRS::is_connected(int socket)
{
+
char cmd[16];
char resp[96];
- snprintf(cmd,16,"AT+CIPSTATUS=%d\r\n",socket);
- sendCmd(cmd);
- readBuffer(resp,sizeof(resp),DEFAULT_TIMEOUT);
- if(NULL != strstr(resp,"CONNECTED")) {
- //+CIPSTATUS: 1,0,"TCP","216.52.233.120","80","CONNECTED"
- return true;
- } else {
- //+CIPSTATUS: 1,0,"TCP","216.52.233.120","80","CLOSED"
- //+CIPSTATUS: 0,,"","","","INITIAL"
- return false;
+ while(1){
+ snprintf(cmd,16,"AT+CIPSTATUS\r\n");
+ sendCmd(cmd);
+ readBuffer(resp,sizeof(resp),DEFAULT_TIMEOUT);
+ if(NULL != strstr(resp,"CONNECTED")) {
+ return true;
+ } else {
+ return false;
+ }
}
}
void GPRS::reset()
{
-
}
bool GPRS::close(int socket)
@@ -271,12 +363,15 @@
char cmd[32];
wait(1);
if(len > 0){
- snprintf(cmd,sizeof(cmd),"AT+CIPSEND=%d\r\n",socket);
- if(0 != sendCmdAndWaitForResp(cmd,">",2,CMD)) {
+ snprintf(cmd,sizeof(cmd),"AT+CIPSEND\r\n");
+ if(0 != sendCmdAndWaitForResp(cmd,">",1,CMD)) {
+
return false;
}
sendCmd(str);
+ printf("Sending: %s\r\n", str);
serialModem.putc((char)0x1a);
+
}
return len;
}
@@ -320,3 +415,30 @@
}
return ip;
}
+bool GPRS::storePhoneNumber(char* atCNumValue){
+ char* leftDelimiter = "+";
+ char* rightDelimiter = "\"";
+ // find the left delimiter and use it as the beginning of the substring
+ const char* beginning = strstr(atCNumValue, leftDelimiter);
+ if(beginning == NULL)
+ return 1; // left delimiter not found
+
+ // find the right delimiter
+ const char* end = strstr(atCNumValue, rightDelimiter);
+ if(end == NULL)
+ return 2; // right delimiter not found
+
+ // offset the beginning by the length of the left delimiter, so beginning points _after_ the left delimiter
+ beginning += strlen(leftDelimiter);
+
+ // get the length of the substring
+ ptrdiff_t segmentLength = end - beginning;
+
+ // allocate memory and copy the substring there
+ //*_phoneNumber = (char*)malloc(segmentLength + 1);
+ strncpy(_phoneNumber, beginning, segmentLength);
+ (_phoneNumber)[segmentLength] = 0;
+
+ printf("Phone Number: %s\r\n", _phoneNumber);
+ return 0; // success!
+}
\ No newline at end of file
--- a/GPRS/GPRS.h Fri Sep 25 04:10:56 2015 +0000
+++ b/GPRS/GPRS.h Wed Oct 21 19:41:42 2015 +0000
@@ -144,7 +144,13 @@
* @returns true if successful
*/
bool gethostbyname(const char* host, uint32_t* ip);
-
+
+ /** Parse the phone number from the AT command return value and store it
+ * @param atCNumValue the return value from the AT+CNUM AT Command
+ * @return true if successful
+ */
+ bool storePhoneNumber(char* atCNumValue);
+
int new_socket();
uint16_t new_port();
uint32_t _ip;
@@ -159,6 +165,7 @@
const char* _apn;
const char* _userName;
const char* _passWord;
+ char* _phoneNumber;
};
#endif
--- a/GPRS/modem/modem.cpp Fri Sep 25 04:10:56 2015 +0000
+++ b/GPRS/modem/modem.cpp Wed Oct 21 19:41:42 2015 +0000
@@ -161,7 +161,6 @@
void Modem::sendCmdResp(const char* cmd)
{
serialModem.puts(cmd);
- getResp();
}
void Modem::getResp()
{
@@ -177,7 +176,7 @@
timeCnt.stop();
timeCnt.reset();
buffer[count] = '\0';
- printf("%s \n",buffer);
+ printf("Response:--%s--\r\n",buffer);
for(int i = 0; i < count+2; i++) {
buffer[i] = NULL;
}
@@ -221,7 +220,7 @@
while(1) {
if(serialModem.readable()) {
- char c = serialModem.getc();
+ char c = serialModem.getc();
sum = (c==resp[sum]) ? sum+1 : 0;
if(sum == len)break;
}
@@ -231,15 +230,16 @@
return -1;
}
}
+
timeCnt.stop();
timeCnt.reset();
-
+
if(type == CMD) {
while(serialModem.readable()) {
char c = serialModem.getc();
}
+
}
-
return 0;
}
--- a/GPRS/modem/modem.h Fri Sep 25 04:10:56 2015 +0000
+++ b/GPRS/modem/modem.h Wed Oct 21 19:41:42 2015 +0000
@@ -25,7 +25,7 @@
#include "mbed.h"
#include "SDFileSystem.h"
-#define DEFAULT_TIMEOUT 5
+#define DEFAULT_TIMEOUT 5
enum DataType {
CMD = 0,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GSMLibrary.h Wed Oct 21 19:41:42 2015 +0000
@@ -0,0 +1,46 @@
+#ifndef GSMLIBRARY_H
+#define GSMLIBRARY_H
+
+#include "mbed.h"
+
+#define TIME_CONST 1 //Specify length of each GSM tick (currently 1 seconds in our debugger)
+#define SECONDS_TIMEOUT 30
+#define SMS_END_CHAR "\x1A" //Character that must be appended to end of text message before it will be sent
+#define SMS_ESCAPE_CHAR "\x1A" //Character that can be appended to end of text message to abort sending it
+
+enum gsm_states{GSM_INITIALIZE,
+ GSM_AT_OK, //Make sure communication is established with GSM
+ GSM_AT_CSQ, //Check signal strength
+ GSM_AT_CREG, //Check if phone is connected to network
+ GSM_AT_CNMI, //Turn off incoming SMS notifications
+ GSM_AT_CMGF, //Change to text message mode
+ GSM_READ_MSG, //Check for new messages.
+ GSM_AT_CMGS, //Input phone number and indicate beginning of SMS message body
+ GSM_AT_SENDSMS, //Write message, finish with SMS_END_CHAR
+ GSM_DEL_R_MSGS //Delete unread messages (if present)
+ };
+
+//GSM state machine
+void gsm_tick();
+bool gsm_timeOut();
+void gsm_printState();
+void gsm_nextStateLogic();
+void gsm_mealyOutputs();
+
+//Initialize DMA data transfer, and UART3.
+void gsm_initialize();
+
+//returns 1 for ready to send again, 0 for busy.
+bool gsm_ready();
+
+//Have the GSM send data - L = long, S = short, hh/mm/ss for time, "lat ns" for latitute, "lon we" for longitude
+void gsm_send_data(float L, float Lref, float S, float Sref, int hh, int mm, int ss, float lat, char ns, float lon, char we);
+
+//Brings state machine back to initialize state (notice this is a bit different than the initialize function)
+//This will set flags to their initial values and prepare gsm to start anew.
+void gsm_reset();
+
+//For debugging: print registers related to DMA and UART setup
+void print_registers();
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MBed_Adafruit-GPS-Library.lib Wed Oct 21 19:41:42 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mlee350/code/MBed_Adafruit-GPS-Library/#a23e3099bb0a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/QAM.h Wed Oct 21 19:41:42 2015 +0000
@@ -0,0 +1,33 @@
+#include "mbed.h"
+#include "math.h"
+#include "param.h"
+
+
+float LPF[FILTER_LENGTH] = {-0.0144708808511496,-0.000385188817745075,-0.000390533183235675,-0.000394742906792089,-0.000399769196519628,-0.000403738202294335,-0.000408404623158276,-0.000412113149650395,-0.000416462833527476,-0.000419815012719482,-0.000423797959228978,-0.000426739337854087,-0.000430334330303594,-0.000432832690421492,-0.000436010304838419,-0.000438015762483701,-0.000440725998487324,-0.000442176271462813,-0.000444366451120004,-0.000445200741523877,-0.000446824764367193,-0.000446985068265349,-0.000448006554506719,-0.000447442784206942,-0.000447849219199270,-0.000446533842477948,-0.000446356250904501,-0.000444298930233344,-0.000443635712144896,-0.000440904172137380,-0.000439959781942889,-0.000436697184341028,-0.000435806956375018,-0.000432172615546733,-0.000431753345765173,-0.000427687598858029,-0.000428156810812652,-0.000422747252741829,-0.000424187630414963,-0.000407818792155013,-0.000395501352613792,-0.000405744503950700,-0.000392851507058367,-0.000390382687328383,-0.000381121528334916,-0.000376496114768088,-0.000367538945283741,-0.000361525919288397,-0.000352310773450881,-0.000345231412211433,-0.000335566815920174,-0.000327541463775560,-0.000317294849082828,-0.000308353744912893,-0.000297429505735636,-0.000287581380689517,-0.000275914761004970,-0.000265156646491960,-0.000252692261710763,-0.000241008558077738,-0.000227700089453720,-0.000215083331568167,-0.000200913782464340,-0.000187389392522164,-0.000172384694451466,-0.000158020178787410,-0.000142244665767066,-0.000127136823721230,-0.000110658475023229,-9.48790548136458e-05,-7.76831002440304e-05,-6.11819123150781e-05,-4.30660620622803e-05,-2.56168041232741e-05,-6.17332989349961e-06,1.25088872664492e-05,3.37927012878936e-05,5.35608705831692e-05,7.59589602239430e-05,9.15368291316554e-05,0.000115204777102917,0.000138069211971015,0.000159190880367532,0.000182373449206352,0.000205067466595210,0.000228860953939147,0.000252562953392044,0.000277043582173064,0.000301679014228284,0.000326937646605074,0.000352496019331738,0.000378568482119590,0.000405024475185201,0.000431919761467725,0.000459260045317933,0.000486996257677674,0.000515223422553390,0.000543812348041683,0.000572911638300866,0.000602328160312027,0.000632248178590089,0.000662431004457176,0.000693100970238447,0.000723983335774392,0.000755351502448320,0.000786905176937580,0.000818981905467808,0.000851254211738706,0.000884129083715379,0.000917225959710777,0.000951002817600966,0.000984976999461651,0.00101962720509619,0.00105433282442391,0.00108958012424409,0.00112464418634772,0.00115993840154260,0.00119539198931307,0.00123186816927046,0.00127036077901721,0.00130541180260479,0.00134335225448012,0.00138072879053652,0.00141863315366209,0.00145663029979914,0.00149499706458300,0.00153361610136926,0.00157251046039164,0.00161168223712593,0.00165107252541929,0.00169074663426727,0.00173062458634377,0.00177079136483371,0.00181115593295544,0.00185179221443832,0.00189260160550475,0.00193364149890840,0.00197481806389987,0.00201618182472885,0.00205765641294420,0.00209929421544075,0.00214104214683175,0.00218295189552009,0.00222499505616725,0.00226720655336976,0.00230957893654704,0.00235209893435240,0.00239478098228574,0.00243752682581544,0.00248040445148945,0.00252320826984942,0.00256614456884563,0.00260887923650444,0.00265189493075013,0.00269464123994112,0.00273811141960323,0.00278127146884799,0.00282487273216248,0.00286725582554936,0.00291011668741703,0.00295400852337480,0.00299631315283477,0.00303968228399754,0.00308228214271367,0.00312544335611165,0.00316800503060222,0.00321092060767114,0.00325335212983191,0.00329604768194258,0.00333833065815270,0.00338080571964383,0.00342287984676659,0.00346506666392088,0.00350683252327144,0.00354864820837975,0.00359002966433764,0.00363143184222281,0.00367240631021559,0.00371339474804699,0.00375396921299398,0.00379455066286027,0.00383471907116473,0.00387486722320318,0.00391457835212350,0.00395421450957656,0.00399336963891983,0.00403239345178008,0.00407090689986944,0.00410927413031459,0.00414714356884360,0.00418491195887327,0.00422220071777701,0.00425944291055203,0.00429609837010503,0.00433271517977119,0.00436816038563848,0.00440392829477787,0.00443863216787577,0.00447419332340360,0.00450790720060468,0.00454199779778719,0.00457557942718267,0.00460866745561361,0.00464128935709596,0.00467348005622625,0.00470521813258529,0.00473655480891466,0.00476738158613443,0.00479778554290533,0.00482760230079293,0.00485697947442532,0.00488572614267468,0.00491404812783003,0.00494172982871532,0.00496901245787740,0.00499565014615655,0.00502189761027694,0.00504747871309519,0.00507265469059348,0.00509712658822537,0.00512116774916649,0.00514446385204792,0.00516731571406126,0.00518939504399896,0.00521104829385877,0.00523192156106234,0.00525241391733289,0.00527210766449571,0.00529145309701562,0.00530992168933153,0.00532803731039166,0.00534513592720032,0.00536190019920468,0.00537753105163574,0.00539305759593844,0.00540779717266560,0.00542178330942988,0.00543520553037524,0.00544764194637537,0.00546016823500395,0.00547122210264206,0.00548202730715275,0.00549201155081391,0.00550147471949458,0.00551019050180912,0.00551821896806359,0.00552552472800016,0.00553208775818348,0.00553797790780664,0.00554313324391842,0.00554766040295363,0.00555146159604192,0.00555464252829552,0.00555708399042487,0.00555888703092933,0.00555992824956775,0.00556031381711364,0.00555992824956775,0.00555888703092933,0.00555708399042487,0.00555464252829552,0.00555146159604192,0.00554766040295363,0.00554313324391842,0.00553797790780664,0.00553208775818348,0.00552552472800016,0.00551821896806359,0.00551019050180912,0.00550147471949458,0.00549201155081391,0.00548202730715275,0.00547122210264206,0.00546016823500395,0.00544764194637537,0.00543520553037524,0.00542178330942988,0.00540779717266560,0.00539305759593844,0.00537753105163574,0.00536190019920468,0.00534513592720032,0.00532803731039166,0.00530992168933153,0.00529145309701562,0.00527210766449571,0.00525241391733289,0.00523192156106234,0.00521104829385877,0.00518939504399896,0.00516731571406126,0.00514446385204792,0.00512116774916649,0.00509712658822537,0.00507265469059348,0.00504747871309519,0.00502189761027694,0.00499565014615655,0.00496901245787740,0.00494172982871532,0.00491404812783003,0.00488572614267468,0.00485697947442532,0.00482760230079293,0.00479778554290533,0.00476738158613443,0.00473655480891466,0.00470521813258529,0.00467348005622625,0.00464128935709596,0.00460866745561361,0.00457557942718267,0.00454199779778719,0.00450790720060468,0.00447419332340360,0.00443863216787577,0.00440392829477787,0.00436816038563848,0.00433271517977119,0.00429609837010503,0.00425944291055203,0.00422220071777701,0.00418491195887327,0.00414714356884360,0.00410927413031459,0.00407090689986944,0.00403239345178008,0.00399336963891983,0.00395421450957656,0.00391457835212350,0.00387486722320318,0.00383471907116473,0.00379455066286027,0.00375396921299398,0.00371339474804699,0.00367240631021559,0.00363143184222281,0.00359002966433764,0.00354864820837975,0.00350683252327144,0.00346506666392088,0.00342287984676659,0.00338080571964383,0.00333833065815270,0.00329604768194258,0.00325335212983191,0.00321092060767114,0.00316800503060222,0.00312544335611165,0.00308228214271367,0.00303968228399754,0.00299631315283477,0.00295400852337480,0.00291011668741703,0.00286725582554936,0.00282487273216248,0.00278127146884799,0.00273811141960323,0.00269464123994112,0.00265189493075013,0.00260887923650444,0.00256614456884563,0.00252320826984942,0.00248040445148945,0.00243752682581544,0.00239478098228574,0.00235209893435240,0.00230957893654704,0.00226720655336976,0.00222499505616725,0.00218295189552009,0.00214104214683175,0.00209929421544075,0.00205765641294420,0.00201618182472885,0.00197481806389987,0.00193364149890840,0.00189260160550475,0.00185179221443832,0.00181115593295544,0.00177079136483371,0.00173062458634377,0.00169074663426727,0.00165107252541929,0.00161168223712593,0.00157251046039164,0.00153361610136926,0.00149499706458300,0.00145663029979914,0.00141863315366209,0.00138072879053652,0.00134335225448012,0.00130541180260479,0.00127036077901721,0.00123186816927046,0.00119539198931307,0.00115993840154260,0.00112464418634772,0.00108958012424409,0.00105433282442391,0.00101962720509619,0.000984976999461651,0.000951002817600966,0.000917225959710777,0.000884129083715379,0.000851254211738706,0.000818981905467808,0.000786905176937580,0.000755351502448320,0.000723983335774392,0.000693100970238447,0.000662431004457176,0.000632248178590089,0.000602328160312027,0.000572911638300866,0.000543812348041683,0.000515223422553390,0.000486996257677674,0.000459260045317933,0.000431919761467725,0.000405024475185201,0.000378568482119590,0.000352496019331738,0.000326937646605074,0.000301679014228284,0.000277043582173064,0.000252562953392044,0.000228860953939147,0.000205067466595210,0.000182373449206352,0.000159190880367532,0.000138069211971015,0.000115204777102917,9.15368291316554e-05,7.59589602239430e-05,5.35608705831692e-05,3.37927012878936e-05,1.25088872664492e-05,-6.17332989349961e-06,-2.56168041232741e-05,-4.30660620622803e-05,-6.11819123150781e-05,-7.76831002440304e-05,-9.48790548136458e-05,-0.000110658475023229,-0.000127136823721230,-0.000142244665767066,-0.000158020178787410,-0.000172384694451466,-0.000187389392522164,-0.000200913782464340,-0.000215083331568167,-0.000227700089453720,-0.000241008558077738,-0.000252692261710763,-0.000265156646491960,-0.000275914761004970,-0.000287581380689517,-0.000297429505735636,-0.000308353744912893,-0.000317294849082828,-0.000327541463775560,-0.000335566815920174,-0.000345231412211433,-0.000352310773450881,-0.000361525919288397,-0.000367538945283741,-0.000376496114768088,-0.000381121528334916,-0.000390382687328383,-0.000392851507058367,-0.000405744503950700,-0.000395501352613792,-0.000407818792155013,-0.000424187630414963,-0.000422747252741829,-0.000428156810812652,-0.000427687598858029,-0.000431753345765173,-0.000432172615546733,-0.000435806956375018,-0.000436697184341028,-0.000439959781942889,-0.000440904172137380,-0.000443635712144896,-0.000444298930233344,-0.000446356250904501,-0.000446533842477948,-0.000447849219199270,-0.000447442784206942,-0.000448006554506719,-0.000446985068265349,-0.000446824764367193,-0.000445200741523877,-0.000444366451120004,-0.000442176271462813,-0.000440725998487324,-0.000438015762483701,-0.000436010304838419,-0.000432832690421492,-0.000430334330303594,-0.000426739337854087,-0.000423797959228978,-0.000419815012719482,-0.000416462833527476,-0.000412113149650395,-0.000408404623158276,-0.000403738202294335,-0.000399769196519628,-0.000394742906792089,-0.000390533183235675,-0.000385188817745075,-0.0144708808511496};
+
+
+float QAM(float *sI, float *sQ){
+
+ float total = 0.0;
+ float I = 0.0;
+ float Q = 0.0;
+
+ for ( int i = 0; i < SAMPLE_LENGTH; i+=DEC_FACTOR){
+ I = 0.0;
+ Q = 0.0;
+ for (int j = 0; j < FILTER_LENGTH; j++){
+ if(i-j > 0 && i > 0 && j > 0){
+ I = I + (sI[ i - j] * LPF[ j ]);
+ Q = Q + (sQ[ i - j] * LPF[ j ]);
+ }
+ }
+
+ total = total + (I*I + Q*Q);
+
+ }
+
+ total = total/3000;
+
+ return total;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Wed Oct 21 19:41:42 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Oct 21 19:41:42 2015 +0000
@@ -0,0 +1,352 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#pragma once
+#include "mbed.h"
+#include "math.h"
+#include "MBed_Adafruit_GPS.h"
+#include "SDFileSystem.h"
+#include "QAM.h"
+#include "GPRSInterface.h"
+#include "param.h"
+#include "stdlib.h"
+
+#define NUM_SIZE 250
+/** On many platforms USBTX/USBRX overlap with serial on D1/D0 pins and enabling the below will interrupt the communication.
+ * You can use an LCD display to print the values or store them on an SD card etc.
+ */
+DigitalOut led_red(LED_RED);
+Serial pc(USBTX, USBRX);
+//Serial gsm(D1,D0);
+
+/**************************************************
+ ** SD FILE SYSTEM **
+ **************************************************/
+//SDFileSystem sdModem(PTE3, PTE1, PTE2, PTE4, "sd"); //MOSI, MISO, SCLK, SSEL. Tested on K64F, correct pins.
+FILE *fpData;
+FILE *fpLog;
+
+/**************************************************
+ ** GPS **
+ **************************************************/
+Serial * gps_Serial;
+
+/**************************************************
+ ** GPRS **
+ **************************************************/
+/**
+ * D1 - TX pin (RX on the WiFi side)
+ * D0 - RX pin (TX on the WiFi side)
+ * 19200 - Baud rate
+ * "apn" - APN name
+ * "username" - APN username
+ * "password" - APN passowrd
+ */
+GPRSInterface eth(D1,D0, 19200, "ndo","","");
+/**************************************************
+ ** SENSOR INPUTS **
+ **************************************************/
+AnalogIn An(A0);
+AnalogIn AnRef(A2);
+Ticker sample_tick;
+bool takeSample = false;
+void tick(){takeSample = true;}
+
+/**************************************************
+ ** SIN OUTPUT **
+ **************************************************/
+AnalogOut dac0(DAC0_OUT);
+int sinRes = (int)1/(CARRIER_FREQ*TIME_CONST);
+float sinWave[SIN_LENGTH] = {};
+int sinIndex = 0;
+
+
+/**************************************************
+ ** QAM **
+ **************************************************/
+float sQ[SAMPLE_LENGTH] = {};
+float sI[SAMPLE_LENGTH] = {};
+float sRefQ[SAMPLE_LENGTH] = {};
+float sRefI[SAMPLE_LENGTH] = {};
+
+float Iarray[SAMPLE_LENGTH] = {};
+float Qarray[SAMPLE_LENGTH] = {};
+int sampleIndex = 0;
+float I = 0;
+float Q = 0;
+float lon = 0;
+float lonRef = 0;
+
+/*Global Variables */
+char c;
+int s;
+bool run = 0;
+bool fil = 0;
+float filtered = 0;
+float filteredRef = 0;
+char gsm_header[250]; //String storing SMS message that will be sent (add 250 length to give leeway)
+char gsm_msg[250];
+char num[NUM_SIZE]; //Temporary string storage to help with concatenation of strings
+
+void buildIQ(){
+ for(int i = 0; i < SAMPLE_LENGTH; i++){
+ Iarray[i] = cos(2*PI*CARRIER_FREQ*i*TIME_CONST);
+ Qarray[i] = -sin(2*PI*CARRIER_FREQ*i*TIME_CONST);
+ }
+}
+
+void create_sinWave(){
+ int i = 0;
+ for(i = 0; i < SIN_LENGTH; i++){
+ sinWave[i] = 0.25 * sin(2.0*PI*i/sinRes) + 0.75;
+ }
+}
+void init(Adafruit_GPS myGPS){
+
+ //fprintf(fpLog, "%s\r\n", ":)\r\n");
+
+ //fprintf(fpLog, "%s\r\n", "Initializing the GPS\r\n");
+
+ myGPS.begin(9600);
+ myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
+ myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
+ myGPS.sendCommand(PGCMD_ANTENNA);
+ //fprintf(fpLog, "%s\r\n", "GPS Initialized\r\n");
+
+ // Initialize filtering structures.
+ buildIQ();
+ create_sinWave();
+
+
+
+ //Intialize the dhcp (or die trying)
+ s = eth.init();
+ if (s != NULL) {
+ printf(">>> Could not initialise. Halting!\n");
+ exit(0);
+ }
+
+ //Check the SIM card
+ s= eth.preInit();
+ if(s == true) {
+ //fprintf(fpLog, "%s\r\n", "SIM Card is good!\r\n");
+ } else {
+ //fprintf(fpLog, "%s\r\n", "check your baud rate\r\n");
+ }
+}
+void gatherData(Adafruit_GPS myGPS){
+ //sample
+ if(takeSample){
+
+ dac0 = sinWave[sinIndex];
+
+ lon = An.read();
+ lonRef = AnRef.read();
+
+ I = Iarray[sampleIndex];
+ Q = Qarray[sampleIndex];
+ sI[sampleIndex] = lon*I;
+ sQ[sampleIndex] = lon*Q;
+ sRefI[sampleIndex] = lonRef*I;
+ sRefQ[sampleIndex] = lonRef*Q;
+
+ takeSample = false;
+ sinIndex++;
+ if((sinIndex+1) > SIN_LENGTH){
+ sinIndex = 0;
+ }
+
+ sampleIndex++;
+ if(sampleIndex+1 > SAMPLE_LENGTH){
+ fil = 1;
+ }
+ }
+ //Filter
+ if(fil==1){
+
+ fil = 0;
+ run = 1;
+ sampleIndex = 0;
+ filtered = 15*QAM(sI, sQ);
+ filteredRef = QAM(sRefI, sRefQ);
+ }
+
+ c = myGPS.read();
+ if ( myGPS.newNMEAreceived() ) {
+ if ( !myGPS.parse(myGPS.lastNMEA()) ) {
+ //fprintf(fpLog, "%s\r\n", "Couldn't parse the GPS Data\r\n");
+ }
+ }
+ if(run){
+ run = 0;
+ printf("Logged Data\r\n");
+ /*fprintf(fpLog, "15CM: %f, ", filtered);
+ fprintf(fpLog, "15CM Reference: %f\r\n", filteredRef);
+ fprintf(fpLog, "15CM / 15CM Refernce: %f\r\n", (filteredRef ? (filtered/filteredRef) : 0));
+ fprintf(fpLog, "GPS TIME: %d:%d:%d \r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds);*/
+
+ if (myGPS.fix){
+ printf("Lat: %5.2f%c, Long: %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
+ //fprintf(fpLog, "Lat: %5.2f%c, Long: %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
+ }
+ else{
+ printf("No GPS FIX\r\n");
+ /*fprintf(fpLog, "%s\r\n", "No GPS fix\r\n");
+ fprintf(fpLog, "%s\r\n", "--------------------------------\r\n");*/
+ }
+
+ /*fpData = fopen("/sd/data.txt", "a");
+ if (fpData != NULL){
+
+ fprintf(fpData, "%f, ", filtered);
+ fprintf(fpData, "%f, ", filteredRef);
+ fprintf(fpData, "%d:%d:%d\r\n", myGPS.hour-6, myGPS.minute, myGPS.seconds);
+ if (myGPS.fix) fprintf(fpData, "%5.2f%c, %5.2f%c\r\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
+ else fprintf(fpData, "No_GPS_fix\r\n");
+
+ fclose(fpData);
+ }*/
+
+ }
+
+}
+int main()
+{
+ //set the baud rates
+ //gsm.baud(19200);
+
+ gps_Serial = new Serial(PTC4,PTC3); ////Serial gsm(D1,D0);
+ Adafruit_GPS myGPS(gps_Serial);
+
+ //Initialize SD Card with log and data
+ /*fpLog = fopen("/sd/log.txt", "a");
+ if (fpLog != NULL){
+ fprintf(fpLog, "%s\r\n", "--------------- DCS LOG ------------------");
+ }
+ fpData = fopen("/sd/data.txt", "a");
+ if (fpData != NULL){
+ fprintf(fpData, "%s", "--------------- DCS DATA ------------------");
+ }
+
+ //Successful Connection Message
+ fprintf(fpLog, "%s\r\n", "---DPG Connection Successful!---\r\n");*/
+
+ //initialize gps, gprs, sd card etc...
+ init(myGPS);
+
+ //fprintf(fpLog, "%s\r\n", ">>> Get IP address...\r\n");
+ while (1) {
+ s = eth.connect(); // Connect to network
+ if (s == false || s < 0) {
+ printf(">>> Could not connect to network. Retrying!\r\n");
+ wait(3);
+ } else {
+ break;
+ }
+ }
+ //fprintf(fpLog, ">>> Got IP address: %s\r\n", eth.getIPAddress());
+
+ //fprintf(fpLog, "%s\r\n", ">>> Create a TCP Socket Connection\r\n");
+ TCPSocketConnection sock;
+ sock.set_blocking(true,5000);
+
+ sock.connect("api.pushingbox.com",80);
+
+ //fprintf(fpLog, "%s\r\n", "Gathering Data...\r\n");
+ while(1){
+
+ //take a sample
+ tick();
+ gatherData(myGPS);
+ //if(!myGPS.fix){
+ printf("Done Gathering Data\r\n");
+
+ //fprintf(fpLog, "%s\r\n", "Begin Sending data...\r\n");
+ //Concatenate data
+ gsm_msg[0] = NULL;
+ gsm_header[0] = NULL;
+ int contentLength = 0;
+ snprintf(num, NUM_SIZE, "&phone=%s", "3852368101");
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ snprintf(num, NUM_SIZE, "&data=%f", filtered);
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ snprintf(num, NUM_SIZE, "&dataRef=%f", filteredRef);
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ snprintf(num, NUM_SIZE, "&dataRatio=%f", (filteredRef ? (filtered/filteredRef) : 0));
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ snprintf(num, NUM_SIZE, "&time=%02d:%02d:%02d", myGPS.hour, myGPS.minute, myGPS.seconds); //If there is no data from GPS, the time will just be "00:00:00" (that is okay)
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ if (myGPS.lat != NULL) //If there is a gps fix (i.e. the gps has data on our location), ns will be set
+ {
+ snprintf(num, NUM_SIZE, "&latitude=%.4f&longitude=%.4f", (myGPS.lat == 'N') ? myGPS.latitude : -myGPS.latitude, (myGPS.lon == 'E') ? myGPS.longitude : -myGPS.longitude); //Use + or - rather than N/S, E/W
+ contentLength += strlen(num);
+ strcat(gsm_msg, num);
+ }
+ else {
+ snprintf(num, NUM_SIZE,"&latitude=0&longitude=0");
+ strcat(gsm_msg, num); //Otherwise just send 0's for latitude and longitude
+ contentLength += strlen(num);
+ }
+
+
+ //header information
+ snprintf(num, NUM_SIZE, "%s", "POST /pushingbox?devid=v941C443DE0C7B14");
+ strcat(gsm_header, num);
+ strcat(gsm_header, gsm_msg);
+ snprintf(num, NUM_SIZE, "%s\r\n"," HTTP/1.1");
+ strcat(gsm_header, num);
+ snprintf(num, NUM_SIZE, "%s\r\n","Host: api.pushingbox.com");
+ strcat(gsm_header, num);
+ snprintf(num, NUM_SIZE, "%s\r\n","Connection: Keep-Alive");
+ strcat(gsm_header, num);
+ snprintf(num, NUM_SIZE, "%s\r\n","User-Agent: FRDM-KD64");
+ strcat(gsm_header, num);
+ //must have two blank lines after so the server knows that this is the end of headers
+ snprintf(num, NUM_SIZE, "Content-Length: %d\r\n\r\n\r\n", contentLength);
+ strcat(gsm_header, num);
+
+ //fprintf(fpLog, "%s\r\n", ">>> Sending data to the server: %s\r\n",gsm_header);
+ int result = sock.send_all(gsm_header, contentLength);
+ //sock.set_blocking(false);
+ if (result > 0) {
+ //fprintf(fpLog, "%s\r\n", ">>> Successfully Sent Data to Server\r\n");
+ printf("Successfully send data\r\n");
+ } else {
+ //fprintf(fpLog, "%s\r\n", ">>> Failed to Send Data, Error Code: %d \r\n",result);
+ printf("Data Not Sent!! Content-Length:%d\r\n", contentLength);
+ }
+
+ //check that we are still connected (if not reconnect)
+ //sock.close();
+ //printf("end of program\n");
+ // Disconnect from network
+ eth.disconnect();
+ //return 0;
+ /*}
+ else{
+ fprintf(fpLog, "%s\r\n", ">>>No GPS Fix\r\n");
+ }*/
+ //wait(4);
+ }
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Oct 21 19:41:42 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/param.h Wed Oct 21 19:41:42 2015 +0000 @@ -0,0 +1,9 @@ +#define SAMPLE_LENGTH 6000 +#define SAMPLE_RATE 10000 +#define SIN_LENGTH 500 +#define OUTAVG_LENGTH 100 +#define CARRIER_FREQ 220 +#define TIME_CONST 0.0001 +#define PI 3.14159265 +#define FILTER_LENGTH 513 +#define DEC_FACTOR 2 \ No newline at end of file
