Station API

Dependents:   GMCStation

Committer:
yamaguch
Date:
Wed Nov 30 04:35:45 2011 +0000
Revision:
0:d81f611c59ec
Child:
1:a22e390c70b3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:d81f611c59ec 1 /*
yamaguch 0:d81f611c59ec 2 Copyright (c) 2011, Senio Networks, Inc.
yamaguch 0:d81f611c59ec 3
yamaguch 0:d81f611c59ec 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 0:d81f611c59ec 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 0:d81f611c59ec 6 in the Software without restriction, including without limitation the rights
yamaguch 0:d81f611c59ec 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 0:d81f611c59ec 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 0:d81f611c59ec 9 furnished to do so, subject to the following conditions:
yamaguch 0:d81f611c59ec 10
yamaguch 0:d81f611c59ec 11 The above copyright notice and this permission notice shall be included in
yamaguch 0:d81f611c59ec 12 all copies or substantial portions of the Software.
yamaguch 0:d81f611c59ec 13
yamaguch 0:d81f611c59ec 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 0:d81f611c59ec 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 0:d81f611c59ec 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 0:d81f611c59ec 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 0:d81f611c59ec 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 0:d81f611c59ec 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 0:d81f611c59ec 20 THE SOFTWARE.
yamaguch 0:d81f611c59ec 21 */
yamaguch 0:d81f611c59ec 22
yamaguch 0:d81f611c59ec 23 #ifndef ETHER_H
yamaguch 0:d81f611c59ec 24 #define ETHER_H
yamaguch 0:d81f611c59ec 25
yamaguch 0:d81f611c59ec 26 #include "EthernetNetIf.h"
yamaguch 0:d81f611c59ec 27 #include "utils.h"
yamaguch 0:d81f611c59ec 28
yamaguch 0:d81f611c59ec 29 class Ether {
yamaguch 0:d81f611c59ec 30 public:
yamaguch 0:d81f611c59ec 31 Ether(bool verbose = false)
yamaguch 0:d81f611c59ec 32 : active(false), verbose(verbose) {
yamaguch 0:d81f611c59ec 33 }
yamaguch 0:d81f611c59ec 34
yamaguch 0:d81f611c59ec 35 Ether(IpAddr ip, IpAddr subnet, IpAddr gateway, IpAddr dns, bool verbose = false)
yamaguch 0:d81f611c59ec 36 : eth(ip, subnet, gateway, dns), active(false), verbose(verbose) {
yamaguch 0:d81f611c59ec 37 }
yamaguch 0:d81f611c59ec 38
yamaguch 0:d81f611c59ec 39 static Ether create(IpAddr ip, IpAddr subnet, IpAddr gateway, IpAddr dns, bool verbose = false) {
yamaguch 0:d81f611c59ec 40 return Ether(ip, subnet, gateway, dns, verbose);
yamaguch 0:d81f611c59ec 41 }
yamaguch 0:d81f611c59ec 42
yamaguch 0:d81f611c59ec 43 static Ether create(char *filename = 0, bool verbose = false) {
yamaguch 0:d81f611c59ec 44 if (filename) {
yamaguch 0:d81f611c59ec 45 char path[32];
yamaguch 0:d81f611c59ec 46 LocalFileSystem local("local");
yamaguch 0:d81f611c59ec 47 sprintf(path, "/local/%s", filename);
yamaguch 0:d81f611c59ec 48 if (FILE *fp = fopen(path, "r")) {
yamaguch 0:d81f611c59ec 49 char b1, b2, b3, b4;
yamaguch 0:d81f611c59ec 50 IpAddr ip = fgetValues(fp, "ip-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 0:d81f611c59ec 51 IpAddr subnet = fgetValues(fp, "subnet-mask:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 0:d81f611c59ec 52 IpAddr gateway = fgetValues(fp, "gateway-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 0:d81f611c59ec 53 IpAddr dns = fgetValues(fp, "dns-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 0:d81f611c59ec 54 fclose(fp);
yamaguch 0:d81f611c59ec 55 if (verbose) {
yamaguch 0:d81f611c59ec 56 ::printf( "ip-address:%hhu.%hhu.%hhu.%hhu\n", ip[0], ip[1], ip[2], ip[3]);
yamaguch 0:d81f611c59ec 57 ::printf( "subnet-mask:%hhu.%hhu.%hhu.%hhu\n", subnet[0], subnet[1], subnet[2], subnet[3]);
yamaguch 0:d81f611c59ec 58 ::printf( "gateway-address:%hhu.%hhu.%hhu.%hhu\n", gateway[0], gateway[1], gateway[2], gateway[3]);
yamaguch 0:d81f611c59ec 59 ::printf( "dns-address:%hhu.%hhu.%hhu.%hhu\n", dns[0], dns[1], dns[2], dns[3]);
yamaguch 0:d81f611c59ec 60 }
yamaguch 0:d81f611c59ec 61 if (!ip.isNull())
yamaguch 0:d81f611c59ec 62 return Ether(ip, subnet, gateway, dns, verbose);
yamaguch 0:d81f611c59ec 63 }
yamaguch 0:d81f611c59ec 64 }
yamaguch 0:d81f611c59ec 65 return Ether();
yamaguch 0:d81f611c59ec 66 }
yamaguch 0:d81f611c59ec 67
yamaguch 0:d81f611c59ec 68 void setup() {
yamaguch 0:d81f611c59ec 69 EthernetErr err = eth.setup();
yamaguch 0:d81f611c59ec 70 active = err == ETH_OK;
yamaguch 0:d81f611c59ec 71 if (verbose) {
yamaguch 0:d81f611c59ec 72 ::printf("EthernetNetIf.setup() = %d\n", err);
yamaguch 0:d81f611c59ec 73 }
yamaguch 0:d81f611c59ec 74 }
yamaguch 0:d81f611c59ec 75
yamaguch 0:d81f611c59ec 76 operator bool() {
yamaguch 0:d81f611c59ec 77 return active;
yamaguch 0:d81f611c59ec 78 }
yamaguch 0:d81f611c59ec 79
yamaguch 0:d81f611c59ec 80 private:
yamaguch 0:d81f611c59ec 81 EthernetNetIf eth;
yamaguch 0:d81f611c59ec 82 bool active;
yamaguch 0:d81f611c59ec 83 bool verbose;
yamaguch 0:d81f611c59ec 84 };
yamaguch 0:d81f611c59ec 85
yamaguch 0:d81f611c59ec 86 #endif