A

Committer:
ChesterLin
Date:
Mon Nov 27 06:05:26 2017 +0000
Revision:
0:cde2733d9088
RU

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChesterLin 0:cde2733d9088 1 #include"mbed.h"
ChesterLin 0:cde2733d9088 2 #include"getData.h"
ChesterLin 0:cde2733d9088 3 #include"OneWire_Functions.h"
ChesterLin 0:cde2733d9088 4 #include "HTTPServer.h"
ChesterLin 0:cde2733d9088 5
ChesterLin 0:cde2733d9088 6 OneWire ow(p21);
ChesterLin 0:cde2733d9088 7 Serial pc1(USBTX,USBRX);
ChesterLin 0:cde2733d9088 8 getData::getData(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg, TCPSocketConnection& Tcp)
ChesterLin 0:cde2733d9088 9 : HTTPRequestHandler(Msg, Tcp)// inherit from HttpRequestHandler
ChesterLin 0:cde2733d9088 10 {
ChesterLin 0:cde2733d9088 11 m_rootPath = rootPath;
ChesterLin 0:cde2733d9088 12 m_localPath = localPath;
ChesterLin 0:cde2733d9088 13 handleRequest();
ChesterLin 0:cde2733d9088 14 }
ChesterLin 0:cde2733d9088 15 getData::~getData()
ChesterLin 0:cde2733d9088 16 {
ChesterLin 0:cde2733d9088 17 }
ChesterLin 0:cde2733d9088 18
ChesterLin 0:cde2733d9088 19 int getData::handlePutRequest()
ChesterLin 0:cde2733d9088 20 {
ChesterLin 0:cde2733d9088 21 return 404;
ChesterLin 0:cde2733d9088 22 }
ChesterLin 0:cde2733d9088 23 int getData::handlePostRequest()
ChesterLin 0:cde2733d9088 24 {
ChesterLin 0:cde2733d9088 25 return 404;
ChesterLin 0:cde2733d9088 26 }
ChesterLin 0:cde2733d9088 27
ChesterLin 0:cde2733d9088 28 std::string getData::getpath()
ChesterLin 0:cde2733d9088 29 {
ChesterLin 0:cde2733d9088 30 return m_rootPath;
ChesterLin 0:cde2733d9088 31 }
ChesterLin 0:cde2733d9088 32 /** Handler function to serve GET requests. Download ressource from server from \c uri location.
ChesterLin 0:cde2733d9088 33 */
ChesterLin 0:cde2733d9088 34 int getData::handleGetRequest()
ChesterLin 0:cde2733d9088 35 {
ChesterLin 0:cde2733d9088 36 char outBuf[1024] = {}; // the web page buffer
ChesterLin 0:cde2733d9088 37 char htpmsg[10]= {}; //http message
ChesterLin 0:cde2733d9088 38 char h1[5]= {};
ChesterLin 0:cde2733d9088 39 char h2[1]= {};
ChesterLin 0:cde2733d9088 40 bool retval = false;
ChesterLin 0:cde2733d9088 41 int err = 404;
ChesterLin 0:cde2733d9088 42 int i=0;
ChesterLin 0:cde2733d9088 43 int m=0;
ChesterLin 0:cde2733d9088 44 int h,j=8;
ChesterLin 0:cde2733d9088 45 int16_t d1,d2,d3,d4,d5;
ChesterLin 0:cde2733d9088 46 float t1,t2,t3,t4,t5;
ChesterLin 0:cde2733d9088 47 float config;
ChesterLin 0:cde2733d9088 48 char temp;
ChesterLin 0:cde2733d9088 49 map<string ,string >::iterator iter;// interation the map
ChesterLin 0:cde2733d9088 50
ChesterLin 0:cde2733d9088 51 strncpy(htpmsg,msg.uri.c_str(),msg.uri.length());// convert the string to char*
ChesterLin 0:cde2733d9088 52 // if recive the path "get" eg:127.0.0.1/get/ we will get the data from onewire.
ChesterLin 0:cde2733d9088 53 if(strcmp(htpmsg,"/get")==0) {
ChesterLin 0:cde2733d9088 54
ChesterLin 0:cde2733d9088 55 if(ow.Read_Temp_On_bus()) {
ChesterLin 0:cde2733d9088 56 //Get the resolution from onewire, there are some different arguments ot calculate the temperture
ChesterLin 0:cde2733d9088 57 if(ow.sca[0]==0x1f) {
ChesterLin 0:cde2733d9088 58 h=3;
ChesterLin 0:cde2733d9088 59 config=0.5;
ChesterLin 0:cde2733d9088 60 } else if(ow.sca[0]==0x3f) {
ChesterLin 0:cde2733d9088 61 h=2;
ChesterLin 0:cde2733d9088 62 config=0.25;
ChesterLin 0:cde2733d9088 63 } else if(ow.sca[0]==0x5f) {
ChesterLin 0:cde2733d9088 64 h=1;
ChesterLin 0:cde2733d9088 65 config=0.125;
ChesterLin 0:cde2733d9088 66 } else if(ow.sca[0]==0x7f) {
ChesterLin 0:cde2733d9088 67 h=0;
ChesterLin 0:cde2733d9088 68 config=0.0625;
ChesterLin 0:cde2733d9088 69 }
ChesterLin 0:cde2733d9088 70 // calculate the temperture
ChesterLin 0:cde2733d9088 71 d1=((ow.alltemp[9]<<(j-h))|(ow.alltemp[8]>>h));
ChesterLin 0:cde2733d9088 72 d2=((ow.alltemp[7]<<(j-h))|(ow.alltemp[6]>>h));
ChesterLin 0:cde2733d9088 73 d3=((ow.alltemp[5]<<(j-h))|(ow.alltemp[4]>>h));
ChesterLin 0:cde2733d9088 74 d4=((ow.alltemp[3]<<(j-h))|(ow.alltemp[2]>>h));
ChesterLin 0:cde2733d9088 75 d5=((ow.alltemp[1]<<(j-h))|(ow.alltemp[0]>>h));
ChesterLin 0:cde2733d9088 76 t1=d1*config;
ChesterLin 0:cde2733d9088 77 t2=d2*config;
ChesterLin 0:cde2733d9088 78 t3=d3*config;
ChesterLin 0:cde2733d9088 79 t4=d4*config;
ChesterLin 0:cde2733d9088 80 t5=d5*config;
ChesterLin 0:cde2733d9088 81 // formating the webpage
ChesterLin 0:cde2733d9088 82 sprintf(outBuf,"<h2>Temperature</h2><dd><dt>D1:%f</dt><br/><dt>D2:%f</dt><br/><dt>D3:%f</dt><br/><dt>D4:%f</dt><br/><dt>D5:%f</dt><br/></dd><form name=\"input\"action=\"/get\"method=\"get\"><input type=\"submit\"value=\"Refresh\"></form><dd><a href=\"/setalert\"><dt>Alarm set</dt></a><a href=\"/setreso\"><dt><br/>Resolution set</dt></a></dd>",t1,t2,t3,t4,t5);
ChesterLin 0:cde2733d9088 83 } else {
ChesterLin 0:cde2733d9088 84 sprintf(outBuf,"No device on bus!");
ChesterLin 0:cde2733d9088 85 }
ChesterLin 0:cde2733d9088 86 }//if recive the path "setalert" eg:127.0.0.1/setalert/ we will get the alert temperture and set the alert temperture .
ChesterLin 0:cde2733d9088 87 else if(strcmp(htpmsg,"/setalert")==0) {
ChesterLin 0:cde2733d9088 88
ChesterLin 0:cde2733d9088 89 if(ow.sca[2]==0x20) {
ChesterLin 0:cde2733d9088 90 i=32;
ChesterLin 0:cde2733d9088 91 } else if(ow.sca[2]==0x30) {
ChesterLin 0:cde2733d9088 92 i=48;
ChesterLin 0:cde2733d9088 93 } else if(ow.sca[2]==0x40) {
ChesterLin 0:cde2733d9088 94 i=64;
ChesterLin 0:cde2733d9088 95 } else if(ow.sca[2]==0x50) {
ChesterLin 0:cde2733d9088 96 i=80;
ChesterLin 0:cde2733d9088 97 }//
ChesterLin 0:cde2733d9088 98 if(!msg.args.empty()) {
ChesterLin 0:cde2733d9088 99 //get the arguments from the require message
ChesterLin 0:cde2733d9088 100 for(iter=msg.args.begin(); iter!=msg.args.end(); iter++) {
ChesterLin 0:cde2733d9088 101 strncpy(h1,iter->first.c_str(),iter->first.length());//key
ChesterLin 0:cde2733d9088 102 strncpy(h2,iter->second.c_str(),iter->second.length());//value
ChesterLin 0:cde2733d9088 103 }
ChesterLin 0:cde2733d9088 104 temp=h2[0];
ChesterLin 0:cde2733d9088 105 switch(temp) {
ChesterLin 0:cde2733d9088 106 case '1':
ChesterLin 0:cde2733d9088 107 ow.sca[2]=0x20;
ChesterLin 0:cde2733d9088 108 i=32;
ChesterLin 0:cde2733d9088 109 break;
ChesterLin 0:cde2733d9088 110 case '2':
ChesterLin 0:cde2733d9088 111 ow.sca[2]=0x30;
ChesterLin 0:cde2733d9088 112 i=48;
ChesterLin 0:cde2733d9088 113 break;
ChesterLin 0:cde2733d9088 114 case '3':
ChesterLin 0:cde2733d9088 115 ow.sca[2]=0x40;
ChesterLin 0:cde2733d9088 116 i=64;
ChesterLin 0:cde2733d9088 117 break;
ChesterLin 0:cde2733d9088 118 case '4':
ChesterLin 0:cde2733d9088 119 ow.sca[2]=0x50;
ChesterLin 0:cde2733d9088 120 i=80;
ChesterLin 0:cde2733d9088 121 break;
ChesterLin 0:cde2733d9088 122 }
ChesterLin 0:cde2733d9088 123 ow.Change_Res(); //change the temp alarm
ChesterLin 0:cde2733d9088 124 sprintf(outBuf,"<h2>Temperture setting</h2>Now is %d.<br><br><div><form name=\"set\"action=\"/setalert\"method=\"get\">32<input type=\"radio\"name=\"s\"value=\"1\">48<input type=\"radio\"name=\"s\"value=\"2\">64<input type=\"radio\"name=\"s\"value=\"3\">80<input type=\"radio\"name=\"s\"value=\"4\"><input type=\"submit\"value=\"Submit\"></form></div><a href=\"/get\">Back</a>",i);
ChesterLin 0:cde2733d9088 125 } else {
ChesterLin 0:cde2733d9088 126 // if the server dont get the arguments just refresh the page or go into this pages from other one
ChesterLin 0:cde2733d9088 127 sprintf(outBuf,"<h2>Temperture setting</h2>Now is %d.<br><br><div><form name=\"set\"action=\"/setalert\"method=\"get\">32<input type=\"radio\"name=\"s\"value=\"1\">48<input type=\"radio\"name=\"s\"value=\"2\">64<input type=\"radio\"name=\"s\"value=\"3\">80<input type=\"radio\"name=\"s\"value=\"4\"><input type=\"submit\"value=\"Submit\"></form></div><a href=\"/get\">Back</a>",i);
ChesterLin 0:cde2733d9088 128 }
ChesterLin 0:cde2733d9088 129 }//if recive the path "setreso" eg:127.0.0.1/setreso/ we will get the resolution and set the resolution .
ChesterLin 0:cde2733d9088 130 else if(strcmp(htpmsg,"/setreso")==0) {
ChesterLin 0:cde2733d9088 131
ChesterLin 0:cde2733d9088 132 if(ow.sca[0]==0x1f) {
ChesterLin 0:cde2733d9088 133 m=9;
ChesterLin 0:cde2733d9088 134 } else if(ow.sca[0]==0x3f) {
ChesterLin 0:cde2733d9088 135 m=10;
ChesterLin 0:cde2733d9088 136 } else if(ow.sca[0]==0x5f) {
ChesterLin 0:cde2733d9088 137 m=11;
ChesterLin 0:cde2733d9088 138 } else if(ow.sca[0]==0x7f) {
ChesterLin 0:cde2733d9088 139 m=12;
ChesterLin 0:cde2733d9088 140 }
ChesterLin 0:cde2733d9088 141 if(!msg.args.empty()) {
ChesterLin 0:cde2733d9088 142 for(iter=msg.args.begin(); iter!=msg.args.end(); iter++) {
ChesterLin 0:cde2733d9088 143 strncpy(h1,iter->first.c_str(),iter->first.length());
ChesterLin 0:cde2733d9088 144 strncpy(h2,iter->second.c_str(),iter->second.length());
ChesterLin 0:cde2733d9088 145 }
ChesterLin 0:cde2733d9088 146 temp=h2[0];
ChesterLin 0:cde2733d9088 147 switch (temp) {
ChesterLin 0:cde2733d9088 148 case '1':
ChesterLin 0:cde2733d9088 149 ow.sca[0]=0x1f;
ChesterLin 0:cde2733d9088 150 m=9;
ChesterLin 0:cde2733d9088 151 break;
ChesterLin 0:cde2733d9088 152 case '2':
ChesterLin 0:cde2733d9088 153 ow.sca[0]=0x3f;
ChesterLin 0:cde2733d9088 154 m=10;
ChesterLin 0:cde2733d9088 155 break;
ChesterLin 0:cde2733d9088 156 case '3':
ChesterLin 0:cde2733d9088 157 ow.sca[0]=0x5f;
ChesterLin 0:cde2733d9088 158 m=11;
ChesterLin 0:cde2733d9088 159 break;
ChesterLin 0:cde2733d9088 160 case '4':
ChesterLin 0:cde2733d9088 161 ow.sca[0]=0x7f;
ChesterLin 0:cde2733d9088 162 m=12;
ChesterLin 0:cde2733d9088 163 break;
ChesterLin 0:cde2733d9088 164 }
ChesterLin 0:cde2733d9088 165 ow.Change_Res();//change the resolution
ChesterLin 0:cde2733d9088 166 sprintf(outBuf,"<h2> Resolution setting</h2>Now is %d-bit.<br><br><div><form name=\"set\" action=\"/setreso\" method=\"get\">9-bit<input type=\"radio\" name=\"s\" value=\"1\">10-bit<input type=\"radio\" name=\"s\" value=\"2\">11-bit<input type=\"radio\" name=\"s\" value=\"3\">12-bit<input type=\"radio\" name=\"s\" value=\"4\"><input type=\"submit\" value=\"Submit\"></form></div><a href=\"/get\">Back</a>",m);
ChesterLin 0:cde2733d9088 167 } else {
ChesterLin 0:cde2733d9088 168 sprintf(outBuf,"<h2> Resolution setting</h2>Now is %d-bit.<br><br><div><form name=\"set\" action=\"/setreso\" method=\"get\">9-bit<input type=\"radio\" name=\"s\" value=\"1\">10-bit<input type=\"radio\" name=\"s\" value=\"2\">11-bit<input type=\"radio\" name=\"s\" value=\"3\">12-bit<input type=\"radio\" name=\"s\" value=\"4\"><input type=\"submit\" value=\"Submit\"></form></div><a href=\"/get\">Back</a>",m);
ChesterLin 0:cde2733d9088 169 }
ChesterLin 0:cde2733d9088 170 }
ChesterLin 0:cde2733d9088 171 //set the web page to the web browser
ChesterLin 0:cde2733d9088 172 startResponse(retval, strlen(outBuf));
ChesterLin 0:cde2733d9088 173 processResponse(strlen(outBuf), outBuf);
ChesterLin 0:cde2733d9088 174 endResponse();
ChesterLin 0:cde2733d9088 175 err = 0;
ChesterLin 0:cde2733d9088 176 return err;
ChesterLin 0:cde2733d9088 177 }
ChesterLin 0:cde2733d9088 178
ChesterLin 0:cde2733d9088 179