A
Revision 0:cde2733d9088, committed 2017-11-27
- Comitter:
- ChesterLin
- Date:
- Mon Nov 27 06:05:26 2017 +0000
- Commit message:
- RU
Changed in this revision
getData.cpp | Show annotated file Show diff for this revision Revisions of this file |
getData.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r cde2733d9088 getData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getData.cpp Mon Nov 27 06:05:26 2017 +0000 @@ -0,0 +1,179 @@ +#include"mbed.h" +#include"getData.h" +#include"OneWire_Functions.h" +#include "HTTPServer.h" + +OneWire ow(p21); +Serial pc1(USBTX,USBRX); +getData::getData(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg, TCPSocketConnection& Tcp) + : HTTPRequestHandler(Msg, Tcp)// inherit from HttpRequestHandler +{ + m_rootPath = rootPath; + m_localPath = localPath; + handleRequest(); +} +getData::~getData() +{ +} + +int getData::handlePutRequest() +{ + return 404; +} +int getData::handlePostRequest() +{ + return 404; +} + +std::string getData::getpath() +{ + return m_rootPath; +} +/** Handler function to serve GET requests. Download ressource from server from \c uri location. + */ +int getData::handleGetRequest() +{ + char outBuf[1024] = {}; // the web page buffer + char htpmsg[10]= {}; //http message + char h1[5]= {}; + char h2[1]= {}; + bool retval = false; + int err = 404; + int i=0; + int m=0; + int h,j=8; + int16_t d1,d2,d3,d4,d5; + float t1,t2,t3,t4,t5; + float config; + char temp; + map<string ,string >::iterator iter;// interation the map + + strncpy(htpmsg,msg.uri.c_str(),msg.uri.length());// convert the string to char* + // if recive the path "get" eg:127.0.0.1/get/ we will get the data from onewire. + if(strcmp(htpmsg,"/get")==0) { + + if(ow.Read_Temp_On_bus()) { + //Get the resolution from onewire, there are some different arguments ot calculate the temperture + if(ow.sca[0]==0x1f) { + h=3; + config=0.5; + } else if(ow.sca[0]==0x3f) { + h=2; + config=0.25; + } else if(ow.sca[0]==0x5f) { + h=1; + config=0.125; + } else if(ow.sca[0]==0x7f) { + h=0; + config=0.0625; + } + // calculate the temperture + d1=((ow.alltemp[9]<<(j-h))|(ow.alltemp[8]>>h)); + d2=((ow.alltemp[7]<<(j-h))|(ow.alltemp[6]>>h)); + d3=((ow.alltemp[5]<<(j-h))|(ow.alltemp[4]>>h)); + d4=((ow.alltemp[3]<<(j-h))|(ow.alltemp[2]>>h)); + d5=((ow.alltemp[1]<<(j-h))|(ow.alltemp[0]>>h)); + t1=d1*config; + t2=d2*config; + t3=d3*config; + t4=d4*config; + t5=d5*config; + // formating the webpage + 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); + } else { + sprintf(outBuf,"No device on bus!"); + } + }//if recive the path "setalert" eg:127.0.0.1/setalert/ we will get the alert temperture and set the alert temperture . + else if(strcmp(htpmsg,"/setalert")==0) { + + if(ow.sca[2]==0x20) { + i=32; + } else if(ow.sca[2]==0x30) { + i=48; + } else if(ow.sca[2]==0x40) { + i=64; + } else if(ow.sca[2]==0x50) { + i=80; + }// + if(!msg.args.empty()) { + //get the arguments from the require message + for(iter=msg.args.begin(); iter!=msg.args.end(); iter++) { + strncpy(h1,iter->first.c_str(),iter->first.length());//key + strncpy(h2,iter->second.c_str(),iter->second.length());//value + } + temp=h2[0]; + switch(temp) { + case '1': + ow.sca[2]=0x20; + i=32; + break; + case '2': + ow.sca[2]=0x30; + i=48; + break; + case '3': + ow.sca[2]=0x40; + i=64; + break; + case '4': + ow.sca[2]=0x50; + i=80; + break; + } + ow.Change_Res(); //change the temp alarm + 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); + } else { + // if the server dont get the arguments just refresh the page or go into this pages from other one + 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); + } + }//if recive the path "setreso" eg:127.0.0.1/setreso/ we will get the resolution and set the resolution . + else if(strcmp(htpmsg,"/setreso")==0) { + + if(ow.sca[0]==0x1f) { + m=9; + } else if(ow.sca[0]==0x3f) { + m=10; + } else if(ow.sca[0]==0x5f) { + m=11; + } else if(ow.sca[0]==0x7f) { + m=12; + } + if(!msg.args.empty()) { + for(iter=msg.args.begin(); iter!=msg.args.end(); iter++) { + strncpy(h1,iter->first.c_str(),iter->first.length()); + strncpy(h2,iter->second.c_str(),iter->second.length()); + } + temp=h2[0]; + switch (temp) { + case '1': + ow.sca[0]=0x1f; + m=9; + break; + case '2': + ow.sca[0]=0x3f; + m=10; + break; + case '3': + ow.sca[0]=0x5f; + m=11; + break; + case '4': + ow.sca[0]=0x7f; + m=12; + break; + } + ow.Change_Res();//change the resolution + 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); + } else { + 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); + } + } + //set the web page to the web browser + startResponse(retval, strlen(outBuf)); + processResponse(strlen(outBuf), outBuf); + endResponse(); + err = 0; + return err; +} + +
diff -r 000000000000 -r cde2733d9088 getData.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getData.h Mon Nov 27 06:05:26 2017 +0000 @@ -0,0 +1,22 @@ +#ifndef __GETDATA_H__ +#define __GETDATA_H__ +#include "mbed.h" +#include "FsHandler.h" +#include "HTTPRequestHandler.h" + +class getData:public HTTPRequestHandler +{ + std::string m_rootPath; + std::string m_localPath; +public: + getData(const char* rootPath,const char* localPath, HTTPConnection::HTTPMessage& Msg,TCPSocketConnection& Tcp); + virtual ~getData(); + std::string getpath(); + static inline HTTPRequestHandler* create(const char* rootPath,const char* localPath, HTTPConnection::HTTPMessage& msg,TCPSocketConnection& tcp) { + return new getData(rootPath, localPath, msg, tcp); + } + virtual int handleGetRequest(); + virtual int handlePutRequest(); + virtual int handlePostRequest(); +}; +#endif \ No newline at end of file