mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/
Dependencies: ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD
net.cpp@1:6c7141895545, 2011-07-10 (annotated)
- Committer:
- okini3939
- Date:
- Sun Jul 10 15:36:46 2011 +0000
- Revision:
- 1:6c7141895545
- Parent:
- 0:bdb53686c194
- Child:
- 2:a3e5edf84f74
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 1:6c7141895545 | 1 | /* |
okini3939 | 1:6c7141895545 | 2 | * Weather Station - mbed Weather Platform |
okini3939 | 1:6c7141895545 | 3 | * Copyright (c) 2011 Hiroshi Suga |
okini3939 | 1:6c7141895545 | 4 | * Released under the MIT License: http://mbed.org/license/mit |
okini3939 | 1:6c7141895545 | 5 | */ |
okini3939 | 1:6c7141895545 | 6 | |
okini3939 | 1:6c7141895545 | 7 | /** @file |
okini3939 | 1:6c7141895545 | 8 | * @brief Weather Station |
okini3939 | 1:6c7141895545 | 9 | */ |
okini3939 | 1:6c7141895545 | 10 | |
okini3939 | 0:bdb53686c194 | 11 | #include "mbed.h" |
okini3939 | 0:bdb53686c194 | 12 | #include "weather.h" |
okini3939 | 0:bdb53686c194 | 13 | #include "EthernetNetIf.h" |
okini3939 | 0:bdb53686c194 | 14 | #ifdef USE_NTP |
okini3939 | 0:bdb53686c194 | 15 | #include "NTPClient.h" |
okini3939 | 0:bdb53686c194 | 16 | #endif |
okini3939 | 0:bdb53686c194 | 17 | #include "HTTPClient.h" |
okini3939 | 0:bdb53686c194 | 18 | #ifdef USE_EMAIL |
okini3939 | 0:bdb53686c194 | 19 | #include "SMTPClient.h" |
okini3939 | 0:bdb53686c194 | 20 | #endif |
okini3939 | 0:bdb53686c194 | 21 | |
okini3939 | 0:bdb53686c194 | 22 | #define STATION_URL "http://weather.sugakoubou.com/p" |
okini3939 | 0:bdb53686c194 | 23 | #define TWITTER_URL "http://api.supertweet.net/1/statuses/update.xml" |
okini3939 | 0:bdb53686c194 | 24 | #define PACHUBE_URL "http://api.pachube.com/v1/feeds/" |
okini3939 | 0:bdb53686c194 | 25 | |
okini3939 | 0:bdb53686c194 | 26 | EthernetNetIf *eth; |
okini3939 | 1:6c7141895545 | 27 | DigitalOut led_gayk(p24),led_gkya(p25), led_yk(p26); |
okini3939 | 0:bdb53686c194 | 28 | static DigitalIn eth_link(P1_25), eth_speed(P1_26); |
okini3939 | 0:bdb53686c194 | 29 | static volatile int ethernet_flg = 0; |
okini3939 | 0:bdb53686c194 | 30 | static HTTPClient *http; |
okini3939 | 1:6c7141895545 | 31 | #ifdef USE_NTP |
okini3939 | 1:6c7141895545 | 32 | static NTPClient ntp; |
okini3939 | 1:6c7141895545 | 33 | #endif |
okini3939 | 1:6c7141895545 | 34 | #ifdef USE_EMAIL |
okini3939 | 1:6c7141895545 | 35 | static SMTPClient smtp; |
okini3939 | 1:6c7141895545 | 36 | #endif |
okini3939 | 0:bdb53686c194 | 37 | |
okini3939 | 0:bdb53686c194 | 38 | int weatherstations () { |
okini3939 | 0:bdb53686c194 | 39 | char post_data[200]; |
okini3939 | 0:bdb53686c194 | 40 | char id[10], pin[40]; |
okini3939 | 0:bdb53686c194 | 41 | // HTTPClient http; |
okini3939 | 0:bdb53686c194 | 42 | HTTPResult ret; |
okini3939 | 0:bdb53686c194 | 43 | HTTPText postContent("application/x-www-form-urlencoded"); |
okini3939 | 0:bdb53686c194 | 44 | |
okini3939 | 0:bdb53686c194 | 45 | if (! ethernet_flg) return 0; |
okini3939 | 0:bdb53686c194 | 46 | if (! cfg.getValue("STATIONS_ID", id, sizeof(id)) || |
okini3939 | 0:bdb53686c194 | 47 | ! cfg.getValue("STATIONS_PIN", pin, sizeof(pin))) { |
okini3939 | 0:bdb53686c194 | 48 | return -1; |
okini3939 | 0:bdb53686c194 | 49 | } |
okini3939 | 0:bdb53686c194 | 50 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 51 | pc.printf("S: %s %s\r\n", id, pin); |
okini3939 | 0:bdb53686c194 | 52 | #endif |
okini3939 | 0:bdb53686c194 | 53 | |
okini3939 | 1:6c7141895545 | 54 | LED_NET_ACT_ON; |
okini3939 | 0:bdb53686c194 | 55 | format_str("d0=%.2P&d1=%.2T&d2=%.2H&d3=%.2A&d4=%.2V&d5=%.2R&d6=%.2L&d7=%.2U&d8=%.2M&d9=%.2p", post_data, sizeof(post_data)); |
okini3939 | 0:bdb53686c194 | 56 | strcat(post_data, "&fcd="); |
okini3939 | 0:bdb53686c194 | 57 | strcat(post_data, chop(id)); |
okini3939 | 0:bdb53686c194 | 58 | strcat(post_data, "&pin="); |
okini3939 | 0:bdb53686c194 | 59 | strcat(post_data, chop(pin)); |
okini3939 | 0:bdb53686c194 | 60 | postContent.puts(post_data); |
okini3939 | 0:bdb53686c194 | 61 | |
okini3939 | 0:bdb53686c194 | 62 | http->resetRequestHeaders(); |
okini3939 | 0:bdb53686c194 | 63 | http->basicAuth(NULL, NULL); |
okini3939 | 0:bdb53686c194 | 64 | http->setTimeout(NET_TIMEOUT); |
okini3939 | 0:bdb53686c194 | 65 | ret = http->post(STATION_URL, postContent, NULL); |
okini3939 | 0:bdb53686c194 | 66 | |
okini3939 | 0:bdb53686c194 | 67 | if (ret != HTTP_OK && ret != HTTP_PROCESSING) { |
okini3939 | 0:bdb53686c194 | 68 | pc.printf("Weather Statuons failure: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 69 | return -1; |
okini3939 | 0:bdb53686c194 | 70 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 71 | } else { |
okini3939 | 0:bdb53686c194 | 72 | pc.printf("Weather Stations success: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 73 | #endif |
okini3939 | 0:bdb53686c194 | 74 | } |
okini3939 | 0:bdb53686c194 | 75 | return 0; |
okini3939 | 0:bdb53686c194 | 76 | } |
okini3939 | 0:bdb53686c194 | 77 | |
okini3939 | 0:bdb53686c194 | 78 | int pachube (char *csv) { |
okini3939 | 0:bdb53686c194 | 79 | char uri[100]; |
okini3939 | 0:bdb53686c194 | 80 | char apikey[70], feedid[10]; |
okini3939 | 0:bdb53686c194 | 81 | // HTTPClient http; |
okini3939 | 0:bdb53686c194 | 82 | HTTPResult ret; |
okini3939 | 0:bdb53686c194 | 83 | HTTPText csvContent("text/csv"); |
okini3939 | 0:bdb53686c194 | 84 | |
okini3939 | 0:bdb53686c194 | 85 | if (! ethernet_flg) return 0; |
okini3939 | 0:bdb53686c194 | 86 | if (! cfg.getValue("PACHUBE_APIKEY", apikey, sizeof(apikey)) || |
okini3939 | 0:bdb53686c194 | 87 | ! cfg.getValue("PACHUBE_FEEDID", feedid, sizeof(feedid))) { |
okini3939 | 0:bdb53686c194 | 88 | return -1; |
okini3939 | 0:bdb53686c194 | 89 | } |
okini3939 | 0:bdb53686c194 | 90 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 91 | pc.printf("P: %s %s\r\n", apikey, feedid); |
okini3939 | 0:bdb53686c194 | 92 | #endif |
okini3939 | 0:bdb53686c194 | 93 | |
okini3939 | 1:6c7141895545 | 94 | LED_NET_ACT_ON; |
okini3939 | 0:bdb53686c194 | 95 | csvContent.set(csv); |
okini3939 | 0:bdb53686c194 | 96 | strcpy(uri, PACHUBE_URL); |
okini3939 | 0:bdb53686c194 | 97 | strcat(uri, chop(feedid)); |
okini3939 | 0:bdb53686c194 | 98 | strcat(uri, ".csv?_method=put"); |
okini3939 | 0:bdb53686c194 | 99 | |
okini3939 | 0:bdb53686c194 | 100 | http->resetRequestHeaders(); |
okini3939 | 0:bdb53686c194 | 101 | http->basicAuth(NULL, NULL); |
okini3939 | 0:bdb53686c194 | 102 | http->setTimeout(NET_TIMEOUT); |
okini3939 | 0:bdb53686c194 | 103 | http->setRequestHeader("X-PachubeApiKey", chop(apikey)); |
okini3939 | 0:bdb53686c194 | 104 | ret = http->post(uri, csvContent, NULL); |
okini3939 | 0:bdb53686c194 | 105 | |
okini3939 | 0:bdb53686c194 | 106 | if (ret != HTTP_OK && ret != HTTP_PROCESSING) { |
okini3939 | 0:bdb53686c194 | 107 | pc.printf("Pachube failure: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 108 | return -1; |
okini3939 | 0:bdb53686c194 | 109 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 110 | } else { |
okini3939 | 0:bdb53686c194 | 111 | pc.printf("Pachube success: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 112 | #endif |
okini3939 | 0:bdb53686c194 | 113 | } |
okini3939 | 0:bdb53686c194 | 114 | return 0; |
okini3939 | 0:bdb53686c194 | 115 | } |
okini3939 | 0:bdb53686c194 | 116 | |
okini3939 | 0:bdb53686c194 | 117 | int twitter (int num) { |
okini3939 | 0:bdb53686c194 | 118 | char buf[170], tmp[128]; |
okini3939 | 0:bdb53686c194 | 119 | char user[20], pwd[20], key[20]; |
okini3939 | 0:bdb53686c194 | 120 | // HTTPClient http; |
okini3939 | 0:bdb53686c194 | 121 | HTTPMap msg; |
okini3939 | 0:bdb53686c194 | 122 | HTTPResult ret; |
okini3939 | 0:bdb53686c194 | 123 | |
okini3939 | 0:bdb53686c194 | 124 | if (! ethernet_flg || num >= CF_TWITTER_NUM) return 0; |
okini3939 | 0:bdb53686c194 | 125 | sprintf(key, "TWITTER_MESG[%d]", num); |
okini3939 | 0:bdb53686c194 | 126 | if (! cfg.getValue("TWITTER_USER", user, sizeof(user)) || |
okini3939 | 0:bdb53686c194 | 127 | ! cfg.getValue("TWITTER_PWD", pwd, sizeof(pwd)) || |
okini3939 | 0:bdb53686c194 | 128 | ! cfg.getValue(key, tmp, sizeof(tmp))) { |
okini3939 | 0:bdb53686c194 | 129 | return -1; |
okini3939 | 0:bdb53686c194 | 130 | } |
okini3939 | 0:bdb53686c194 | 131 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 132 | pc.printf("T: %s %s %s\r\n", user, pwd, tmp); |
okini3939 | 0:bdb53686c194 | 133 | #endif |
okini3939 | 0:bdb53686c194 | 134 | |
okini3939 | 1:6c7141895545 | 135 | LED_NET_ACT_ON; |
okini3939 | 0:bdb53686c194 | 136 | format_str(tmp, buf, sizeof(buf)); |
okini3939 | 0:bdb53686c194 | 137 | msg["status"] = buf; |
okini3939 | 0:bdb53686c194 | 138 | |
okini3939 | 0:bdb53686c194 | 139 | http->resetRequestHeaders(); |
okini3939 | 0:bdb53686c194 | 140 | http->setTimeout(NET_TIMEOUT); |
okini3939 | 0:bdb53686c194 | 141 | http->basicAuth(chop(user), chop(pwd)); |
okini3939 | 0:bdb53686c194 | 142 | ret = http->post(TWITTER_URL, msg, NULL); |
okini3939 | 0:bdb53686c194 | 143 | |
okini3939 | 0:bdb53686c194 | 144 | if (ret != HTTP_OK && ret != HTTP_PROCESSING) { |
okini3939 | 0:bdb53686c194 | 145 | pc.printf("Twitter failure: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 146 | return -1; |
okini3939 | 0:bdb53686c194 | 147 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 148 | } else { |
okini3939 | 0:bdb53686c194 | 149 | pc.printf("Twitter success: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 150 | #endif |
okini3939 | 0:bdb53686c194 | 151 | } |
okini3939 | 0:bdb53686c194 | 152 | return 0; |
okini3939 | 0:bdb53686c194 | 153 | } |
okini3939 | 0:bdb53686c194 | 154 | |
okini3939 | 0:bdb53686c194 | 155 | int email (int num) { |
okini3939 | 0:bdb53686c194 | 156 | #ifdef USE_EMAIL |
okini3939 | 0:bdb53686c194 | 157 | int port = 25; |
okini3939 | 0:bdb53686c194 | 158 | char buf[170], smtphost[40], from[40], to[40], tmp[128]; |
okini3939 | 0:bdb53686c194 | 159 | char key[40], key2[40]; |
okini3939 | 0:bdb53686c194 | 160 | Host smtpserver; |
okini3939 | 0:bdb53686c194 | 161 | EmailMessage msg; |
okini3939 | 0:bdb53686c194 | 162 | SMTPResult ret; |
okini3939 | 0:bdb53686c194 | 163 | |
okini3939 | 0:bdb53686c194 | 164 | if (! ethernet_flg || num >= CF_MAIL_NUM) return 0; |
okini3939 | 0:bdb53686c194 | 165 | sprintf(key, "MAIL_MESG[%d]", num); |
okini3939 | 0:bdb53686c194 | 166 | sprintf(key2, "MAIL_TO[%d]", num); |
okini3939 | 0:bdb53686c194 | 167 | if (! cfg.getValue("SMTPSERVER", smtphost, sizeof(smtphost)) || |
okini3939 | 0:bdb53686c194 | 168 | ! cfg.getValue("MAIL_FROM", from, sizeof(from)) || |
okini3939 | 0:bdb53686c194 | 169 | ! cfg.getValue(key2, to, sizeof(to)) || |
okini3939 | 0:bdb53686c194 | 170 | ! cfg.getValue(key, tmp, sizeof(tmp))) { |
okini3939 | 0:bdb53686c194 | 171 | return -1; |
okini3939 | 0:bdb53686c194 | 172 | } |
okini3939 | 0:bdb53686c194 | 173 | |
okini3939 | 1:6c7141895545 | 174 | LED_NET_ACT_ON; |
okini3939 | 0:bdb53686c194 | 175 | if (cfg.getValue("SMTPPORT", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 176 | port = atoi(buf); |
okini3939 | 0:bdb53686c194 | 177 | } |
okini3939 | 0:bdb53686c194 | 178 | smtpserver.setName(chop(smtphost)); |
okini3939 | 0:bdb53686c194 | 179 | smtpserver.setPort(port); |
okini3939 | 0:bdb53686c194 | 180 | smtp.setServer(smtpserver); |
okini3939 | 0:bdb53686c194 | 181 | smtp.setHeloDomain("mbed"); |
okini3939 | 0:bdb53686c194 | 182 | |
okini3939 | 0:bdb53686c194 | 183 | msg.setFrom(chop(from)); |
okini3939 | 0:bdb53686c194 | 184 | msg.addTo(chop(to)); |
okini3939 | 0:bdb53686c194 | 185 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 186 | pc.printf("SMTP %s %s %s\r\n", smtphost, from, to); |
okini3939 | 0:bdb53686c194 | 187 | #endif |
okini3939 | 0:bdb53686c194 | 188 | /* |
okini3939 | 0:bdb53686c194 | 189 | msg.printf("Content-Type: text/plain; charset=UTF-8\n"); |
okini3939 | 0:bdb53686c194 | 190 | msg.printf("Content-Transfer-Encoding: 8bit\n"); |
okini3939 | 0:bdb53686c194 | 191 | msg.printf("From: %s\n", from); |
okini3939 | 0:bdb53686c194 | 192 | msg.printf("To: %s\n", to); |
okini3939 | 0:bdb53686c194 | 193 | */ |
okini3939 | 0:bdb53686c194 | 194 | msg.printf("Subject: Message from weather\n"); |
okini3939 | 0:bdb53686c194 | 195 | format_str(tmp, buf, sizeof(buf)); |
okini3939 | 0:bdb53686c194 | 196 | msg.printf("\n%s\n", buf); |
okini3939 | 0:bdb53686c194 | 197 | |
okini3939 | 0:bdb53686c194 | 198 | if (cfg.getValue("SMTPUSER", key, sizeof(key)) && |
okini3939 | 0:bdb53686c194 | 199 | cfg.getValue("SMTPPWD", key2, sizeof(key2))) { |
okini3939 | 0:bdb53686c194 | 200 | // SMTP auth |
okini3939 | 0:bdb53686c194 | 201 | smtp.setAuth(chop(key), chop(key2)); |
okini3939 | 0:bdb53686c194 | 202 | } |
okini3939 | 0:bdb53686c194 | 203 | smtp.setTimeout(NET_TIMEOUT); |
okini3939 | 0:bdb53686c194 | 204 | ret = smtp.send(&msg); |
okini3939 | 0:bdb53686c194 | 205 | |
okini3939 | 0:bdb53686c194 | 206 | if (ret != HTTP_OK) { |
okini3939 | 0:bdb53686c194 | 207 | pc.printf("Mail failure: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 208 | return -1; |
okini3939 | 0:bdb53686c194 | 209 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 210 | } else { |
okini3939 | 0:bdb53686c194 | 211 | pc.printf("Mail success: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 212 | pc.printf("SMTP response %s", smtp.getLastResponse().c_str()); |
okini3939 | 0:bdb53686c194 | 213 | #endif |
okini3939 | 0:bdb53686c194 | 214 | } |
okini3939 | 0:bdb53686c194 | 215 | #endif |
okini3939 | 0:bdb53686c194 | 216 | return 0; |
okini3939 | 0:bdb53686c194 | 217 | } |
okini3939 | 0:bdb53686c194 | 218 | |
okini3939 | 0:bdb53686c194 | 219 | int ntpdate (char *hostname) { |
okini3939 | 0:bdb53686c194 | 220 | #ifdef USE_NTP |
okini3939 | 0:bdb53686c194 | 221 | Host ntpserver; |
okini3939 | 0:bdb53686c194 | 222 | NTPResult ret; |
okini3939 | 0:bdb53686c194 | 223 | time_t sec; |
okini3939 | 0:bdb53686c194 | 224 | |
okini3939 | 0:bdb53686c194 | 225 | if (! ethernet_flg) return 0; |
okini3939 | 0:bdb53686c194 | 226 | |
okini3939 | 1:6c7141895545 | 227 | LED_NET_ACT_ON; |
okini3939 | 0:bdb53686c194 | 228 | ntpserver.setName(hostname); |
okini3939 | 0:bdb53686c194 | 229 | ntpserver.setPort(123); |
okini3939 | 0:bdb53686c194 | 230 | |
okini3939 | 0:bdb53686c194 | 231 | ret = ntp.setTime(ntpserver); |
okini3939 | 0:bdb53686c194 | 232 | if (ret == NTP_OK) { |
okini3939 | 0:bdb53686c194 | 233 | sec = time(NULL) + (60 * 60 * TIMEZONE); |
okini3939 | 0:bdb53686c194 | 234 | set_time(sec); |
okini3939 | 0:bdb53686c194 | 235 | } |
okini3939 | 0:bdb53686c194 | 236 | // ntp.close(); |
okini3939 | 0:bdb53686c194 | 237 | |
okini3939 | 0:bdb53686c194 | 238 | if (ret != NTP_OK) { |
okini3939 | 0:bdb53686c194 | 239 | pc.printf("NTP failure: %d\r\n", ret); |
okini3939 | 0:bdb53686c194 | 240 | return -1; |
okini3939 | 0:bdb53686c194 | 241 | #ifdef DEBUG |
okini3939 | 0:bdb53686c194 | 242 | } else { |
okini3939 | 0:bdb53686c194 | 243 | pc.printf("NTP success %s\r\n", ctime(&sec)); |
okini3939 | 0:bdb53686c194 | 244 | #endif |
okini3939 | 0:bdb53686c194 | 245 | } |
okini3939 | 0:bdb53686c194 | 246 | #endif |
okini3939 | 0:bdb53686c194 | 247 | return 0; |
okini3939 | 0:bdb53686c194 | 248 | } |
okini3939 | 0:bdb53686c194 | 249 | |
okini3939 | 0:bdb53686c194 | 250 | int init_net () { |
okini3939 | 0:bdb53686c194 | 251 | char buf[128]; |
okini3939 | 0:bdb53686c194 | 252 | int ip0, ip1, ip2, ip3; |
okini3939 | 0:bdb53686c194 | 253 | IpAddr ipaddr, netmask, gateway, nameserver; |
okini3939 | 0:bdb53686c194 | 254 | EthernetErr ethErr; |
okini3939 | 0:bdb53686c194 | 255 | |
okini3939 | 0:bdb53686c194 | 256 | eth_link.mode(PullUp); |
okini3939 | 0:bdb53686c194 | 257 | eth_speed.mode(PullUp); |
okini3939 | 0:bdb53686c194 | 258 | |
okini3939 | 0:bdb53686c194 | 259 | if (cfg.getValue("IPADDRESS", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 260 | |
okini3939 | 1:6c7141895545 | 261 | if (! eth_link) { |
okini3939 | 1:6c7141895545 | 262 | LED_NET_G_ON; |
okini3939 | 1:6c7141895545 | 263 | } |
okini3939 | 1:6c7141895545 | 264 | LED_NET_ACT_ON; |
okini3939 | 1:6c7141895545 | 265 | |
okini3939 | 0:bdb53686c194 | 266 | if (strncmp(buf, "DHCP", 4) == 0) { |
okini3939 | 0:bdb53686c194 | 267 | // dhcp ip address |
okini3939 | 0:bdb53686c194 | 268 | |
okini3939 | 0:bdb53686c194 | 269 | eth = new EthernetNetIf; |
okini3939 | 0:bdb53686c194 | 270 | |
okini3939 | 0:bdb53686c194 | 271 | } else { |
okini3939 | 0:bdb53686c194 | 272 | // static ip address |
okini3939 | 0:bdb53686c194 | 273 | |
okini3939 | 0:bdb53686c194 | 274 | sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); |
okini3939 | 0:bdb53686c194 | 275 | ipaddr = IpAddr(ip0, ip1, ip2, ip3); |
okini3939 | 0:bdb53686c194 | 276 | |
okini3939 | 0:bdb53686c194 | 277 | if (cfg.getValue("NETMASK", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 278 | sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); |
okini3939 | 0:bdb53686c194 | 279 | netmask = IpAddr(ip0, ip1, ip2, ip3); |
okini3939 | 0:bdb53686c194 | 280 | } |
okini3939 | 0:bdb53686c194 | 281 | |
okini3939 | 0:bdb53686c194 | 282 | if (cfg.getValue("GATEWAY", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 283 | sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); |
okini3939 | 0:bdb53686c194 | 284 | gateway = IpAddr(ip0, ip1, ip2, ip3); |
okini3939 | 0:bdb53686c194 | 285 | } |
okini3939 | 0:bdb53686c194 | 286 | |
okini3939 | 0:bdb53686c194 | 287 | if (cfg.getValue("NAMESERVER", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 288 | sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); |
okini3939 | 0:bdb53686c194 | 289 | nameserver = IpAddr(ip0, ip1, ip2, ip3); |
okini3939 | 0:bdb53686c194 | 290 | } |
okini3939 | 0:bdb53686c194 | 291 | |
okini3939 | 0:bdb53686c194 | 292 | eth = new EthernetNetIf(ipaddr, netmask, gateway, nameserver); |
okini3939 | 0:bdb53686c194 | 293 | |
okini3939 | 0:bdb53686c194 | 294 | } |
okini3939 | 0:bdb53686c194 | 295 | if (eth == NULL) return -1; |
okini3939 | 0:bdb53686c194 | 296 | |
okini3939 | 0:bdb53686c194 | 297 | ethErr = eth->setup(); |
okini3939 | 0:bdb53686c194 | 298 | if (ethErr) { |
okini3939 | 0:bdb53686c194 | 299 | // error |
okini3939 | 1:6c7141895545 | 300 | LED_NET_Y_ON; |
okini3939 | 0:bdb53686c194 | 301 | return -1; |
okini3939 | 0:bdb53686c194 | 302 | } |
okini3939 | 0:bdb53686c194 | 303 | |
okini3939 | 0:bdb53686c194 | 304 | pc.printf("\r\nEthernet: %d.%d.%d.%d\r\n", eth->getIp()[0], eth->getIp()[1], eth->getIp()[2], eth->getIp()[3]); |
okini3939 | 0:bdb53686c194 | 305 | ethernet_flg = 1; |
okini3939 | 0:bdb53686c194 | 306 | pool_net(); |
okini3939 | 0:bdb53686c194 | 307 | |
okini3939 | 0:bdb53686c194 | 308 | http = new HTTPClient; |
okini3939 | 0:bdb53686c194 | 309 | if (http == NULL) return -1; |
okini3939 | 0:bdb53686c194 | 310 | } |
okini3939 | 0:bdb53686c194 | 311 | |
okini3939 | 0:bdb53686c194 | 312 | if (cfg.getValue("NTPSERVER", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 313 | pc.printf("NTP: %s\r\n", buf); |
okini3939 | 0:bdb53686c194 | 314 | ntpdate(chop(buf)); |
okini3939 | 0:bdb53686c194 | 315 | } |
okini3939 | 0:bdb53686c194 | 316 | |
okini3939 | 0:bdb53686c194 | 317 | if (cfg.getValue("SNMP_COMMNAME", buf, sizeof(buf))) { |
okini3939 | 0:bdb53686c194 | 318 | snmp_init(chop(buf)); |
okini3939 | 0:bdb53686c194 | 319 | pc.printf("SNMP community name: %s\r\n", buf); |
okini3939 | 0:bdb53686c194 | 320 | } |
okini3939 | 0:bdb53686c194 | 321 | |
okini3939 | 0:bdb53686c194 | 322 | return 0; |
okini3939 | 0:bdb53686c194 | 323 | } |
okini3939 | 0:bdb53686c194 | 324 | |
okini3939 | 0:bdb53686c194 | 325 | void pool_net () { |
okini3939 | 0:bdb53686c194 | 326 | |
okini3939 | 0:bdb53686c194 | 327 | if (ethernet_flg) { |
okini3939 | 0:bdb53686c194 | 328 | Net::poll(); |
okini3939 | 0:bdb53686c194 | 329 | |
okini3939 | 1:6c7141895545 | 330 | if (! eth_link) { |
okini3939 | 1:6c7141895545 | 331 | LED_NET_G_ON; |
okini3939 | 1:6c7141895545 | 332 | } else { |
okini3939 | 1:6c7141895545 | 333 | LED_NET_GY_OFF; |
okini3939 | 1:6c7141895545 | 334 | } |
okini3939 | 0:bdb53686c194 | 335 | } |
okini3939 | 0:bdb53686c194 | 336 | } |