Using DHT11 sensor, sdWrite, wdt. Need to sleep more then this.
Dependencies: DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed
TCP_YEELINK/tcp_yeelink.cpp@0:b6b64c1e74bb, 2015-04-01 (annotated)
- Committer:
- seedteam20
- Date:
- Wed Apr 01 16:16:13 2015 +0000
- Revision:
- 0:b6b64c1e74bb
Using DHT11 sensor and wdt. Not fully going to sleep.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
seedteam20 | 0:b6b64c1e74bb | 1 | /* |
seedteam20 | 0:b6b64c1e74bb | 2 | IOT_Mbed.cpp |
seedteam20 | 0:b6b64c1e74bb | 3 | 2013 Copyright (c) Seeed Technology Inc. All right reserved. |
seedteam20 | 0:b6b64c1e74bb | 4 | |
seedteam20 | 0:b6b64c1e74bb | 5 | Author:Loovee |
seedteam20 | 0:b6b64c1e74bb | 6 | 2013-7-21 |
seedteam20 | 0:b6b64c1e74bb | 7 | |
seedteam20 | 0:b6b64c1e74bb | 8 | This library is free software; you can redistribute it and/or |
seedteam20 | 0:b6b64c1e74bb | 9 | modify it under the terms of the GNU Lesser General Public |
seedteam20 | 0:b6b64c1e74bb | 10 | License as published by the Free Software Foundation; either |
seedteam20 | 0:b6b64c1e74bb | 11 | version 2.1 of the License, or (at your option) any later version. |
seedteam20 | 0:b6b64c1e74bb | 12 | |
seedteam20 | 0:b6b64c1e74bb | 13 | This library is distributed in the hope that it will be useful, |
seedteam20 | 0:b6b64c1e74bb | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
seedteam20 | 0:b6b64c1e74bb | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
seedteam20 | 0:b6b64c1e74bb | 16 | Lesser General Public License for more details. |
seedteam20 | 0:b6b64c1e74bb | 17 | |
seedteam20 | 0:b6b64c1e74bb | 18 | You should have received a copy of the GNU Lesser General Public |
seedteam20 | 0:b6b64c1e74bb | 19 | License along with this library; if not, write to the Free Software |
seedteam20 | 0:b6b64c1e74bb | 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
seedteam20 | 0:b6b64c1e74bb | 21 | */ |
seedteam20 | 0:b6b64c1e74bb | 22 | #include <stdio.h> |
seedteam20 | 0:b6b64c1e74bb | 23 | |
seedteam20 | 0:b6b64c1e74bb | 24 | #include "mbed.h" |
seedteam20 | 0:b6b64c1e74bb | 25 | #include "tcp_yeelink.h" |
seedteam20 | 0:b6b64c1e74bb | 26 | #include "tcp_yeelink_dfs.h" |
seedteam20 | 0:b6b64c1e74bb | 27 | #include "i2c_uart.h" |
seedteam20 | 0:b6b64c1e74bb | 28 | #include "ARCH_GPRS_Sleep.h" |
seedteam20 | 0:b6b64c1e74bb | 29 | |
seedteam20 | 0:b6b64c1e74bb | 30 | |
seedteam20 | 0:b6b64c1e74bb | 31 | Serial serial1(P0_19, P0_18); // tx, rx |
seedteam20 | 0:b6b64c1e74bb | 32 | Timer tcnt; |
seedteam20 | 0:b6b64c1e74bb | 33 | |
seedteam20 | 0:b6b64c1e74bb | 34 | void IOT_Mbed::init(char *postURL, char *APIKey) |
seedteam20 | 0:b6b64c1e74bb | 35 | { |
seedteam20 | 0:b6b64c1e74bb | 36 | serial1.baud(115200); |
seedteam20 | 0:b6b64c1e74bb | 37 | strcpy(yeelinkPostURL, postURL); |
seedteam20 | 0:b6b64c1e74bb | 38 | sprintf(yeelinkPostHeads, "U-ApiKey: %s\r\n", APIKey); |
seedteam20 | 0:b6b64c1e74bb | 39 | strcpy(yeelinkDns, "42.96.164.52"); // api.yeelink.net |
seedteam20 | 0:b6b64c1e74bb | 40 | sprintf(yeelinkPort, "%d", HTTP_DEFAULT_PORT); |
seedteam20 | 0:b6b64c1e74bb | 41 | } |
seedteam20 | 0:b6b64c1e74bb | 42 | |
seedteam20 | 0:b6b64c1e74bb | 43 | void IOT_Mbed::callTest() |
seedteam20 | 0:b6b64c1e74bb | 44 | { |
seedteam20 | 0:b6b64c1e74bb | 45 | sendCmdAndWaitForRest("ATD:10086;\r\n", "OK", 10); |
seedteam20 | 0:b6b64c1e74bb | 46 | } |
seedteam20 | 0:b6b64c1e74bb | 47 | |
seedteam20 | 0:b6b64c1e74bb | 48 | int IOT_Mbed::checkAT(int timeout) |
seedteam20 | 0:b6b64c1e74bb | 49 | { |
seedteam20 | 0:b6b64c1e74bb | 50 | return sendCmdAndWaitForRest("AT\r\n", "OK", timeout); |
seedteam20 | 0:b6b64c1e74bb | 51 | } |
seedteam20 | 0:b6b64c1e74bb | 52 | |
seedteam20 | 0:b6b64c1e74bb | 53 | int IOT_Mbed::waitString(const char *str, int timeout) // time out : s |
seedteam20 | 0:b6b64c1e74bb | 54 | { |
seedteam20 | 0:b6b64c1e74bb | 55 | int len = strlen(str); |
seedteam20 | 0:b6b64c1e74bb | 56 | int sum=0; |
seedteam20 | 0:b6b64c1e74bb | 57 | |
seedteam20 | 0:b6b64c1e74bb | 58 | tcnt.start(); // start timer |
seedteam20 | 0:b6b64c1e74bb | 59 | |
seedteam20 | 0:b6b64c1e74bb | 60 | for(;;) |
seedteam20 | 0:b6b64c1e74bb | 61 | { |
seedteam20 | 0:b6b64c1e74bb | 62 | if(serial1.readable()) |
seedteam20 | 0:b6b64c1e74bb | 63 | { |
seedteam20 | 0:b6b64c1e74bb | 64 | char c = serial1.getc(); |
seedteam20 | 0:b6b64c1e74bb | 65 | DBG(c); |
seedteam20 | 0:b6b64c1e74bb | 66 | sum = (c==str[sum]) ? sum+1 : 0; |
seedteam20 | 0:b6b64c1e74bb | 67 | if(sum == len)break; |
seedteam20 | 0:b6b64c1e74bb | 68 | } |
seedteam20 | 0:b6b64c1e74bb | 69 | |
seedteam20 | 0:b6b64c1e74bb | 70 | if(tcnt.read() > timeout) // time out |
seedteam20 | 0:b6b64c1e74bb | 71 | { |
seedteam20 | 0:b6b64c1e74bb | 72 | tcnt.stop(); |
seedteam20 | 0:b6b64c1e74bb | 73 | tcnt.reset(); |
seedteam20 | 0:b6b64c1e74bb | 74 | |
seedteam20 | 0:b6b64c1e74bb | 75 | DBG("time out\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 76 | return ERRTOUT; |
seedteam20 | 0:b6b64c1e74bb | 77 | } |
seedteam20 | 0:b6b64c1e74bb | 78 | |
seedteam20 | 0:b6b64c1e74bb | 79 | wdt_sleep.feed(); |
seedteam20 | 0:b6b64c1e74bb | 80 | } |
seedteam20 | 0:b6b64c1e74bb | 81 | |
seedteam20 | 0:b6b64c1e74bb | 82 | tcnt.stop(); // stop timer |
seedteam20 | 0:b6b64c1e74bb | 83 | tcnt.reset(); // clear timer |
seedteam20 | 0:b6b64c1e74bb | 84 | |
seedteam20 | 0:b6b64c1e74bb | 85 | while(serial1.readable()) // display the other thing.. |
seedteam20 | 0:b6b64c1e74bb | 86 | { |
seedteam20 | 0:b6b64c1e74bb | 87 | char c = serial1.getc(); |
seedteam20 | 0:b6b64c1e74bb | 88 | DBG(c); |
seedteam20 | 0:b6b64c1e74bb | 89 | } |
seedteam20 | 0:b6b64c1e74bb | 90 | |
seedteam20 | 0:b6b64c1e74bb | 91 | return 1; |
seedteam20 | 0:b6b64c1e74bb | 92 | } |
seedteam20 | 0:b6b64c1e74bb | 93 | |
seedteam20 | 0:b6b64c1e74bb | 94 | |
seedteam20 | 0:b6b64c1e74bb | 95 | int IOT_Mbed::sendCmdAndWaitForRest(char *dta, const char *resq, int timeout) |
seedteam20 | 0:b6b64c1e74bb | 96 | { |
seedteam20 | 0:b6b64c1e74bb | 97 | sendCmd(dta); |
seedteam20 | 0:b6b64c1e74bb | 98 | return waitString(resq, timeout); |
seedteam20 | 0:b6b64c1e74bb | 99 | } |
seedteam20 | 0:b6b64c1e74bb | 100 | |
seedteam20 | 0:b6b64c1e74bb | 101 | void IOT_Mbed::sendCmd(char *dta) |
seedteam20 | 0:b6b64c1e74bb | 102 | { |
seedteam20 | 0:b6b64c1e74bb | 103 | serial1.printf("%s\r\n", dta); |
seedteam20 | 0:b6b64c1e74bb | 104 | } |
seedteam20 | 0:b6b64c1e74bb | 105 | |
seedteam20 | 0:b6b64c1e74bb | 106 | int IOT_Mbed::connectTCP() |
seedteam20 | 0:b6b64c1e74bb | 107 | { |
seedteam20 | 0:b6b64c1e74bb | 108 | |
seedteam20 | 0:b6b64c1e74bb | 109 | sendCmdAndWaitForRest("ATE0\r\n", "OK", 3); |
seedteam20 | 0:b6b64c1e74bb | 110 | int tout = 0; |
seedteam20 | 0:b6b64c1e74bb | 111 | while(1) |
seedteam20 | 0:b6b64c1e74bb | 112 | { |
seedteam20 | 0:b6b64c1e74bb | 113 | if(sendCmdAndWaitForRest(STROPENGPRS, "OK", 20) == ERRTOUT) |
seedteam20 | 0:b6b64c1e74bb | 114 | { |
seedteam20 | 0:b6b64c1e74bb | 115 | DBG("GPRS OPEN ERR, OPEN AGAIN\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 116 | wait(5); |
seedteam20 | 0:b6b64c1e74bb | 117 | } |
seedteam20 | 0:b6b64c1e74bb | 118 | else |
seedteam20 | 0:b6b64c1e74bb | 119 | { |
seedteam20 | 0:b6b64c1e74bb | 120 | DBG("GPRS OPEN OK!\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 121 | break; |
seedteam20 | 0:b6b64c1e74bb | 122 | } |
seedteam20 | 0:b6b64c1e74bb | 123 | tout++; |
seedteam20 | 0:b6b64c1e74bb | 124 | if(tout>5)return 0; |
seedteam20 | 0:b6b64c1e74bb | 125 | } |
seedteam20 | 0:b6b64c1e74bb | 126 | |
seedteam20 | 0:b6b64c1e74bb | 127 | |
seedteam20 | 0:b6b64c1e74bb | 128 | if(!sendCmdAndWaitForRest(STRSETGPRS, "OK", 20))return 0; |
seedteam20 | 0:b6b64c1e74bb | 129 | if(!sendCmdAndWaitForRest(STRSETAPN, "OK", 20))return 0;; |
seedteam20 | 0:b6b64c1e74bb | 130 | |
seedteam20 | 0:b6b64c1e74bb | 131 | char cipstart[50]; |
seedteam20 | 0:b6b64c1e74bb | 132 | sprintf(cipstart, "AT+CIPSTART=\"TCP\",\"%s\",\"%s\"", yeelinkDns, yeelinkPort); |
seedteam20 | 0:b6b64c1e74bb | 133 | if(!sendCmdAndWaitForRest(cipstart, "CONNECT OK", 20))return 0;; // connect tcp |
seedteam20 | 0:b6b64c1e74bb | 134 | |
seedteam20 | 0:b6b64c1e74bb | 135 | return 1; |
seedteam20 | 0:b6b64c1e74bb | 136 | } |
seedteam20 | 0:b6b64c1e74bb | 137 | |
seedteam20 | 0:b6b64c1e74bb | 138 | int IOT_Mbed::connectTCP(char *ip, char *port) |
seedteam20 | 0:b6b64c1e74bb | 139 | { |
seedteam20 | 0:b6b64c1e74bb | 140 | |
seedteam20 | 0:b6b64c1e74bb | 141 | sendCmdAndWaitForRest("ATE0\r\n", "OK", 3); |
seedteam20 | 0:b6b64c1e74bb | 142 | int tout = 0; |
seedteam20 | 0:b6b64c1e74bb | 143 | |
seedteam20 | 0:b6b64c1e74bb | 144 | while(1) |
seedteam20 | 0:b6b64c1e74bb | 145 | { |
seedteam20 | 0:b6b64c1e74bb | 146 | if(sendCmdAndWaitForRest(STROPENGPRS, "OK", 20) == ERRTOUT) |
seedteam20 | 0:b6b64c1e74bb | 147 | { |
seedteam20 | 0:b6b64c1e74bb | 148 | DBG("GPRS OPEN ERR, OPEN AGAIN\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 149 | wait(5); |
seedteam20 | 0:b6b64c1e74bb | 150 | } |
seedteam20 | 0:b6b64c1e74bb | 151 | else |
seedteam20 | 0:b6b64c1e74bb | 152 | { |
seedteam20 | 0:b6b64c1e74bb | 153 | DBG("GPRS OPEN OK!\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 154 | break; |
seedteam20 | 0:b6b64c1e74bb | 155 | } |
seedteam20 | 0:b6b64c1e74bb | 156 | tout++; |
seedteam20 | 0:b6b64c1e74bb | 157 | if(tout>5)return 0; |
seedteam20 | 0:b6b64c1e74bb | 158 | } |
seedteam20 | 0:b6b64c1e74bb | 159 | |
seedteam20 | 0:b6b64c1e74bb | 160 | |
seedteam20 | 0:b6b64c1e74bb | 161 | if(!sendCmdAndWaitForRest(STRSETGPRS, "OK", 20))return 0; |
seedteam20 | 0:b6b64c1e74bb | 162 | if(!sendCmdAndWaitForRest(STRSETAPN, "OK", 20))return 0;; |
seedteam20 | 0:b6b64c1e74bb | 163 | |
seedteam20 | 0:b6b64c1e74bb | 164 | char cipstart[50]; |
seedteam20 | 0:b6b64c1e74bb | 165 | sprintf(cipstart, "AT+CIPSTART=\"TCP\",\"%s\",\"%s\"", ip, port); |
seedteam20 | 0:b6b64c1e74bb | 166 | if(!sendCmdAndWaitForRest(cipstart, "CONNECT OK", 20))return 0;; // connect tcp |
seedteam20 | 0:b6b64c1e74bb | 167 | return 1; |
seedteam20 | 0:b6b64c1e74bb | 168 | |
seedteam20 | 0:b6b64c1e74bb | 169 | } |
seedteam20 | 0:b6b64c1e74bb | 170 | |
seedteam20 | 0:b6b64c1e74bb | 171 | //send data to tcp |
seedteam20 | 0:b6b64c1e74bb | 172 | int IOT_Mbed::sendDtaTcp(char *dta, int timeout) |
seedteam20 | 0:b6b64c1e74bb | 173 | { |
seedteam20 | 0:b6b64c1e74bb | 174 | serial1.printf("AT+CIPSEND=%d\r\n", strlen(dta)); |
seedteam20 | 0:b6b64c1e74bb | 175 | waitString(">", 10); |
seedteam20 | 0:b6b64c1e74bb | 176 | serial1.printf("%s", dta); |
seedteam20 | 0:b6b64c1e74bb | 177 | |
seedteam20 | 0:b6b64c1e74bb | 178 | wait_ms(50); |
seedteam20 | 0:b6b64c1e74bb | 179 | return waitString("SEND OK", timeout); |
seedteam20 | 0:b6b64c1e74bb | 180 | } |
seedteam20 | 0:b6b64c1e74bb | 181 | |
seedteam20 | 0:b6b64c1e74bb | 182 | bool IOT_Mbed::sendToYeelink_t() |
seedteam20 | 0:b6b64c1e74bb | 183 | { |
seedteam20 | 0:b6b64c1e74bb | 184 | char dtaSend[300]; |
seedteam20 | 0:b6b64c1e74bb | 185 | sprintf(dtaSend, "%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n\r\n%s\r\n", POST1, POST2, POST3, POST4, POST5, POST6, POST7); |
seedteam20 | 0:b6b64c1e74bb | 186 | return sendDtaTcp(dtaSend, 20); |
seedteam20 | 0:b6b64c1e74bb | 187 | } |
seedteam20 | 0:b6b64c1e74bb | 188 | |
seedteam20 | 0:b6b64c1e74bb | 189 | void IOT_Mbed::postDtaToYeelink() |
seedteam20 | 0:b6b64c1e74bb | 190 | { |
seedteam20 | 0:b6b64c1e74bb | 191 | |
seedteam20 | 0:b6b64c1e74bb | 192 | } |
seedteam20 | 0:b6b64c1e74bb | 193 | |
seedteam20 | 0:b6b64c1e74bb | 194 | int IOT_Mbed::postDtaToYeelink(char *url, char *apikey, int sensorDta) |
seedteam20 | 0:b6b64c1e74bb | 195 | { |
seedteam20 | 0:b6b64c1e74bb | 196 | return postDtaToYeelink(url, apikey, sensorDta, 0); |
seedteam20 | 0:b6b64c1e74bb | 197 | } |
seedteam20 | 0:b6b64c1e74bb | 198 | |
seedteam20 | 0:b6b64c1e74bb | 199 | int IOT_Mbed::postDtaToYeelink(char *url, char *apikey, float sensorDta, int dec) |
seedteam20 | 0:b6b64c1e74bb | 200 | { |
seedteam20 | 0:b6b64c1e74bb | 201 | char dtaPost[350]; |
seedteam20 | 0:b6b64c1e74bb | 202 | |
seedteam20 | 0:b6b64c1e74bb | 203 | char request[100]; |
seedteam20 | 0:b6b64c1e74bb | 204 | char heads[200]; |
seedteam20 | 0:b6b64c1e74bb | 205 | char body[100]; |
seedteam20 | 0:b6b64c1e74bb | 206 | |
seedteam20 | 0:b6b64c1e74bb | 207 | unsigned int port; |
seedteam20 | 0:b6b64c1e74bb | 208 | |
seedteam20 | 0:b6b64c1e74bb | 209 | char host[HTTP_MAX_HOST_LEN]; |
seedteam20 | 0:b6b64c1e74bb | 210 | char path[HTTP_MAX_PATH_LEN]; |
seedteam20 | 0:b6b64c1e74bb | 211 | |
seedteam20 | 0:b6b64c1e74bb | 212 | if (parseURL(url, host, sizeof(host), &port, path, sizeof(path)) != 0) |
seedteam20 | 0:b6b64c1e74bb | 213 | { |
seedteam20 | 0:b6b64c1e74bb | 214 | DBG("Failed to parse URL.\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 215 | return 0; |
seedteam20 | 0:b6b64c1e74bb | 216 | } |
seedteam20 | 0:b6b64c1e74bb | 217 | |
seedteam20 | 0:b6b64c1e74bb | 218 | if(!connectTCP()) |
seedteam20 | 0:b6b64c1e74bb | 219 | { |
seedteam20 | 0:b6b64c1e74bb | 220 | DBG("connect to tcp err!\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 221 | return 0; |
seedteam20 | 0:b6b64c1e74bb | 222 | } |
seedteam20 | 0:b6b64c1e74bb | 223 | |
seedteam20 | 0:b6b64c1e74bb | 224 | if(dec == 0) |
seedteam20 | 0:b6b64c1e74bb | 225 | { |
seedteam20 | 0:b6b64c1e74bb | 226 | sprintf(body, "{\"value\": %.0f}\r\n", sensorDta); |
seedteam20 | 0:b6b64c1e74bb | 227 | } |
seedteam20 | 0:b6b64c1e74bb | 228 | else if(dec == 1) |
seedteam20 | 0:b6b64c1e74bb | 229 | { |
seedteam20 | 0:b6b64c1e74bb | 230 | sprintf(body, "{\"value\": %.1f}\r\n", sensorDta); |
seedteam20 | 0:b6b64c1e74bb | 231 | } |
seedteam20 | 0:b6b64c1e74bb | 232 | else if(dec == 2) |
seedteam20 | 0:b6b64c1e74bb | 233 | { |
seedteam20 | 0:b6b64c1e74bb | 234 | sprintf(body, "{\"value\": %.2f}\r\n", sensorDta); |
seedteam20 | 0:b6b64c1e74bb | 235 | } |
seedteam20 | 0:b6b64c1e74bb | 236 | else |
seedteam20 | 0:b6b64c1e74bb | 237 | { |
seedteam20 | 0:b6b64c1e74bb | 238 | sprintf(body, "{\"value\": %.3f}\r\n", sensorDta); |
seedteam20 | 0:b6b64c1e74bb | 239 | |
seedteam20 | 0:b6b64c1e74bb | 240 | } |
seedteam20 | 0:b6b64c1e74bb | 241 | sprintf(request, "POST %s HTTP/1.1\r\n", path); |
seedteam20 | 0:b6b64c1e74bb | 242 | sprintf(heads, "Host: %s\r\nU-ApiKey: %s\r\nContent-Length: %d\r\nContent-Type: %s\r\n\r\n",host, apikey, strlen(body), CONTENT_TYPE); |
seedteam20 | 0:b6b64c1e74bb | 243 | sprintf(dtaPost, "%s%s%s", request, heads, body); |
seedteam20 | 0:b6b64c1e74bb | 244 | |
seedteam20 | 0:b6b64c1e74bb | 245 | sendDtaTcp(dtaPost, 10); |
seedteam20 | 0:b6b64c1e74bb | 246 | |
seedteam20 | 0:b6b64c1e74bb | 247 | while(serial1.readable()) |
seedteam20 | 0:b6b64c1e74bb | 248 | { |
seedteam20 | 0:b6b64c1e74bb | 249 | char c = serial1.getc(); |
seedteam20 | 0:b6b64c1e74bb | 250 | DBG(c); |
seedteam20 | 0:b6b64c1e74bb | 251 | } |
seedteam20 | 0:b6b64c1e74bb | 252 | |
seedteam20 | 0:b6b64c1e74bb | 253 | return sendCmdAndWaitForRest(STRCLOSE, "OK", 20); |
seedteam20 | 0:b6b64c1e74bb | 254 | } |
seedteam20 | 0:b6b64c1e74bb | 255 | |
seedteam20 | 0:b6b64c1e74bb | 256 | int IOT_Mbed::parseURL(const char *url, char *host, int max_host_len, unsigned int *port, char *path, int max_path_len) |
seedteam20 | 0:b6b64c1e74bb | 257 | { |
seedteam20 | 0:b6b64c1e74bb | 258 | char *scheme_ptr = (char *)url; |
seedteam20 | 0:b6b64c1e74bb | 259 | char *host_ptr = (char *)strstr(url, "://"); |
seedteam20 | 0:b6b64c1e74bb | 260 | if (host_ptr != NULL) |
seedteam20 | 0:b6b64c1e74bb | 261 | { |
seedteam20 | 0:b6b64c1e74bb | 262 | if (strncmp(scheme_ptr, "http://", 7)) |
seedteam20 | 0:b6b64c1e74bb | 263 | { |
seedteam20 | 0:b6b64c1e74bb | 264 | DBG("Bad scheme\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 265 | return -1; |
seedteam20 | 0:b6b64c1e74bb | 266 | } |
seedteam20 | 0:b6b64c1e74bb | 267 | host_ptr += 3; |
seedteam20 | 0:b6b64c1e74bb | 268 | } |
seedteam20 | 0:b6b64c1e74bb | 269 | else |
seedteam20 | 0:b6b64c1e74bb | 270 | { |
seedteam20 | 0:b6b64c1e74bb | 271 | host_ptr = (char *)url; |
seedteam20 | 0:b6b64c1e74bb | 272 | } |
seedteam20 | 0:b6b64c1e74bb | 273 | |
seedteam20 | 0:b6b64c1e74bb | 274 | int host_len = 0; |
seedteam20 | 0:b6b64c1e74bb | 275 | char *port_ptr = strchr(host_ptr, ':'); |
seedteam20 | 0:b6b64c1e74bb | 276 | |
seedteam20 | 0:b6b64c1e74bb | 277 | if (port_ptr != NULL) |
seedteam20 | 0:b6b64c1e74bb | 278 | { |
seedteam20 | 0:b6b64c1e74bb | 279 | host_len = port_ptr - host_ptr; |
seedteam20 | 0:b6b64c1e74bb | 280 | port_ptr++; |
seedteam20 | 0:b6b64c1e74bb | 281 | if (sscanf(port_ptr, "%hu", port) != 1) |
seedteam20 | 0:b6b64c1e74bb | 282 | { |
seedteam20 | 0:b6b64c1e74bb | 283 | DBG("Could not find port.\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 284 | return -3; |
seedteam20 | 0:b6b64c1e74bb | 285 | } |
seedteam20 | 0:b6b64c1e74bb | 286 | } |
seedteam20 | 0:b6b64c1e74bb | 287 | else |
seedteam20 | 0:b6b64c1e74bb | 288 | { |
seedteam20 | 0:b6b64c1e74bb | 289 | *port = HTTP_DEFAULT_PORT; |
seedteam20 | 0:b6b64c1e74bb | 290 | } |
seedteam20 | 0:b6b64c1e74bb | 291 | |
seedteam20 | 0:b6b64c1e74bb | 292 | char *path_ptr = strchr(host_ptr, '/'); |
seedteam20 | 0:b6b64c1e74bb | 293 | |
seedteam20 | 0:b6b64c1e74bb | 294 | if (host_len == 0) |
seedteam20 | 0:b6b64c1e74bb | 295 | { |
seedteam20 | 0:b6b64c1e74bb | 296 | host_len = path_ptr - host_ptr; |
seedteam20 | 0:b6b64c1e74bb | 297 | } |
seedteam20 | 0:b6b64c1e74bb | 298 | |
seedteam20 | 0:b6b64c1e74bb | 299 | if (max_host_len < (host_len + 1)) |
seedteam20 | 0:b6b64c1e74bb | 300 | { |
seedteam20 | 0:b6b64c1e74bb | 301 | DBG("Host buffer is too small.\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 302 | return -4; |
seedteam20 | 0:b6b64c1e74bb | 303 | } |
seedteam20 | 0:b6b64c1e74bb | 304 | |
seedteam20 | 0:b6b64c1e74bb | 305 | memcpy(host, host_ptr, host_len); |
seedteam20 | 0:b6b64c1e74bb | 306 | host[host_len] = '\0'; |
seedteam20 | 0:b6b64c1e74bb | 307 | |
seedteam20 | 0:b6b64c1e74bb | 308 | int path_len; |
seedteam20 | 0:b6b64c1e74bb | 309 | |
seedteam20 | 0:b6b64c1e74bb | 310 | char *fragment_ptr = strchr(host_ptr, '#'); |
seedteam20 | 0:b6b64c1e74bb | 311 | if (fragment_ptr != NULL) |
seedteam20 | 0:b6b64c1e74bb | 312 | { |
seedteam20 | 0:b6b64c1e74bb | 313 | path_len = fragment_ptr - path_ptr; |
seedteam20 | 0:b6b64c1e74bb | 314 | } |
seedteam20 | 0:b6b64c1e74bb | 315 | else |
seedteam20 | 0:b6b64c1e74bb | 316 | { |
seedteam20 | 0:b6b64c1e74bb | 317 | path_len = strlen(path_ptr); |
seedteam20 | 0:b6b64c1e74bb | 318 | } |
seedteam20 | 0:b6b64c1e74bb | 319 | |
seedteam20 | 0:b6b64c1e74bb | 320 | if (max_path_len < (path_len + 1)) |
seedteam20 | 0:b6b64c1e74bb | 321 | { |
seedteam20 | 0:b6b64c1e74bb | 322 | DBG("Path buffer is too small.\r\n"); |
seedteam20 | 0:b6b64c1e74bb | 323 | return -5; |
seedteam20 | 0:b6b64c1e74bb | 324 | } |
seedteam20 | 0:b6b64c1e74bb | 325 | memcpy(path, path_ptr, path_len); |
seedteam20 | 0:b6b64c1e74bb | 326 | path[path_len] = '\0'; |
seedteam20 | 0:b6b64c1e74bb | 327 | |
seedteam20 | 0:b6b64c1e74bb | 328 | return 0; |
seedteam20 | 0:b6b64c1e74bb | 329 | } |
seedteam20 | 0:b6b64c1e74bb | 330 | |
seedteam20 | 0:b6b64c1e74bb | 331 | |
seedteam20 | 0:b6b64c1e74bb | 332 | |
seedteam20 | 0:b6b64c1e74bb | 333 | IOT_Mbed IOT; |
seedteam20 | 0:b6b64c1e74bb | 334 | /********************************************************************************************************* |
seedteam20 | 0:b6b64c1e74bb | 335 | END FILE |
seedteam20 | 0:b6b64c1e74bb | 336 | *********************************************************************************************************/ |