A
getData.cpp@0:cde2733d9088, 2017-11-27 (annotated)
- Committer:
- ChesterLin
- Date:
- Mon Nov 27 06:05:26 2017 +0000
- Revision:
- 0:cde2733d9088
RU
Who changed what in which revision?
User | Revision | Line number | New 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 |