Station API

Dependents:   GMCStation

Committer:
yamaguch
Date:
Thu Dec 22 02:08:01 2011 +0000
Revision:
5:3df13e2e928e
Parent:
2:a9d1a9c92927
added #include \"Utils.h\"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 2:a9d1a9c92927 1 /*
yamaguch 2:a9d1a9c92927 2 Copyright (c) 2011, Senio Networks, Inc.
yamaguch 2:a9d1a9c92927 3
yamaguch 2:a9d1a9c92927 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 2:a9d1a9c92927 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 2:a9d1a9c92927 6 in the Software without restriction, including without limitation the rights
yamaguch 2:a9d1a9c92927 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 2:a9d1a9c92927 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 2:a9d1a9c92927 9 furnished to do so, subject to the following conditions:
yamaguch 2:a9d1a9c92927 10
yamaguch 2:a9d1a9c92927 11 The above copyright notice and this permission notice shall be included in
yamaguch 2:a9d1a9c92927 12 all copies or substantial portions of the Software.
yamaguch 2:a9d1a9c92927 13
yamaguch 2:a9d1a9c92927 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 2:a9d1a9c92927 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 2:a9d1a9c92927 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 2:a9d1a9c92927 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 2:a9d1a9c92927 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 2:a9d1a9c92927 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 2:a9d1a9c92927 20 THE SOFTWARE.
yamaguch 2:a9d1a9c92927 21 */
yamaguch 2:a9d1a9c92927 22
yamaguch 0:d81f611c59ec 23 #include "EthernetNetIf.h"
yamaguch 1:a22e390c70b3 24 #include "Utils.h"
yamaguch 0:d81f611c59ec 25
yamaguch 2:a9d1a9c92927 26 /**
yamaguch 2:a9d1a9c92927 27 * A wrapper class for EthernetNetIf to create an instance from a config file
yamaguch 2:a9d1a9c92927 28 */
yamaguch 0:d81f611c59ec 29 class Ether {
yamaguch 0:d81f611c59ec 30 public:
yamaguch 2:a9d1a9c92927 31 /**
yamaguch 2:a9d1a9c92927 32 * creates Ether instance
yamaguch 2:a9d1a9c92927 33 *
yamaguch 2:a9d1a9c92927 34 * @param verbose if true display debug info
yamaguch 2:a9d1a9c92927 35 */
yamaguch 0:d81f611c59ec 36 Ether(bool verbose = false)
yamaguch 0:d81f611c59ec 37 : active(false), verbose(verbose) {
yamaguch 0:d81f611c59ec 38 }
yamaguch 0:d81f611c59ec 39
yamaguch 2:a9d1a9c92927 40 /**
yamaguch 2:a9d1a9c92927 41 * creates Ether instance
yamaguch 2:a9d1a9c92927 42 *
yamaguch 2:a9d1a9c92927 43 * @param ip IP address
yamaguch 2:a9d1a9c92927 44 * @param subnet subnet mask
yamaguch 2:a9d1a9c92927 45 * @param gateway gateway address
yamaguch 2:a9d1a9c92927 46 * @param dns DNS server address
yamaguch 2:a9d1a9c92927 47 * @param verbose if true display debug info
yamaguch 2:a9d1a9c92927 48 */
yamaguch 0:d81f611c59ec 49 Ether(IpAddr ip, IpAddr subnet, IpAddr gateway, IpAddr dns, bool verbose = false)
yamaguch 0:d81f611c59ec 50 : eth(ip, subnet, gateway, dns), active(false), verbose(verbose) {
yamaguch 0:d81f611c59ec 51 }
yamaguch 0:d81f611c59ec 52
yamaguch 2:a9d1a9c92927 53 /**
yamaguch 2:a9d1a9c92927 54 * creates Ether instance
yamaguch 2:a9d1a9c92927 55 *
yamaguch 2:a9d1a9c92927 56 * @param ip IP address
yamaguch 2:a9d1a9c92927 57 * @param subnet subnet mask
yamaguch 2:a9d1a9c92927 58 * @param gateway gateway address
yamaguch 2:a9d1a9c92927 59 * @param dns DNS server address
yamaguch 2:a9d1a9c92927 60 * @param verbose if true display debug info
yamaguch 2:a9d1a9c92927 61 */
yamaguch 0:d81f611c59ec 62 static Ether create(IpAddr ip, IpAddr subnet, IpAddr gateway, IpAddr dns, bool verbose = false) {
yamaguch 0:d81f611c59ec 63 return Ether(ip, subnet, gateway, dns, verbose);
yamaguch 0:d81f611c59ec 64 }
yamaguch 0:d81f611c59ec 65
yamaguch 2:a9d1a9c92927 66 /**
yamaguch 2:a9d1a9c92927 67 * creates Ether instance
yamaguch 2:a9d1a9c92927 68 *
yamaguch 2:a9d1a9c92927 69 * @param filename configuration file containing IP address, subnet mask, gateway and DNS address
yamaguch 2:a9d1a9c92927 70 * @param verbose if true display debug info
yamaguch 2:a9d1a9c92927 71 */
yamaguch 0:d81f611c59ec 72 static Ether create(char *filename = 0, bool verbose = false) {
yamaguch 0:d81f611c59ec 73 if (filename) {
yamaguch 0:d81f611c59ec 74 char path[32];
yamaguch 0:d81f611c59ec 75 LocalFileSystem local("local");
yamaguch 0:d81f611c59ec 76 sprintf(path, "/local/%s", filename);
yamaguch 0:d81f611c59ec 77 if (FILE *fp = fopen(path, "r")) {
yamaguch 0:d81f611c59ec 78 char b1, b2, b3, b4;
yamaguch 1:a22e390c70b3 79 IpAddr ip = Utils::fgetValues(fp, "ip-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 1:a22e390c70b3 80 IpAddr subnet = Utils::fgetValues(fp, "subnet-mask:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 1:a22e390c70b3 81 IpAddr gateway = Utils::fgetValues(fp, "gateway-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 1:a22e390c70b3 82 IpAddr dns = Utils::fgetValues(fp, "dns-address:%hhu.%hhu.%hhu.%hhu", &b1, &b2, &b3, &b4) ? IpAddr(b1, b2, b3, b4) : IpAddr();
yamaguch 0:d81f611c59ec 83 fclose(fp);
yamaguch 0:d81f611c59ec 84 if (verbose) {
yamaguch 2:a9d1a9c92927 85 printf("ip-address:%hhu.%hhu.%hhu.%hhu\n", ip[0], ip[1], ip[2], ip[3]);
yamaguch 2:a9d1a9c92927 86 printf("subnet-mask:%hhu.%hhu.%hhu.%hhu\n", subnet[0], subnet[1], subnet[2], subnet[3]);
yamaguch 2:a9d1a9c92927 87 printf("gateway-address:%hhu.%hhu.%hhu.%hhu\n", gateway[0], gateway[1], gateway[2], gateway[3]);
yamaguch 2:a9d1a9c92927 88 printf("dns-address:%hhu.%hhu.%hhu.%hhu\n", dns[0], dns[1], dns[2], dns[3]);
yamaguch 0:d81f611c59ec 89 }
yamaguch 2:a9d1a9c92927 90
yamaguch 1:a22e390c70b3 91 return Ether(ip, subnet, gateway, dns, verbose);
yamaguch 0:d81f611c59ec 92 }
yamaguch 0:d81f611c59ec 93 }
yamaguch 2:a9d1a9c92927 94
yamaguch 0:d81f611c59ec 95 return Ether();
yamaguch 0:d81f611c59ec 96 }
yamaguch 0:d81f611c59ec 97
yamaguch 2:a9d1a9c92927 98 /**
yamaguch 2:a9d1a9c92927 99 * sets up Ethernet interface
yamaguch 2:a9d1a9c92927 100 */
yamaguch 0:d81f611c59ec 101 void setup() {
yamaguch 0:d81f611c59ec 102 EthernetErr err = eth.setup();
yamaguch 0:d81f611c59ec 103 active = err == ETH_OK;
yamaguch 0:d81f611c59ec 104 if (verbose) {
yamaguch 2:a9d1a9c92927 105 printf("EthernetNetIf.setup() = %d\n", err);
yamaguch 0:d81f611c59ec 106 }
yamaguch 0:d81f611c59ec 107 }
yamaguch 0:d81f611c59ec 108
yamaguch 2:a9d1a9c92927 109 /**
yamaguch 2:a9d1a9c92927 110 * returns Ethernet status
yamaguch 2:a9d1a9c92927 111 *
yamaguch 2:a9d1a9c92927 112 * @returns true if setup succeeded
yamaguch 2:a9d1a9c92927 113 */
yamaguch 1:a22e390c70b3 114 bool isActive() {
yamaguch 0:d81f611c59ec 115 return active;
yamaguch 0:d81f611c59ec 116 }
yamaguch 0:d81f611c59ec 117
yamaguch 2:a9d1a9c92927 118 /**
yamaguch 2:a9d1a9c92927 119 * returns its IP address in bytes
yamaguch 2:a9d1a9c92927 120 *
yamaguch 2:a9d1a9c92927 121 * @returns IP address in byte array
yamaguch 2:a9d1a9c92927 122 */
yamaguch 2:a9d1a9c92927 123 char *getIpAddress() {
yamaguch 2:a9d1a9c92927 124 static char ip[] = {eth.getIp()[0], eth.getIp()[1], eth.getIp()[2], eth.getIp()[3]};
yamaguch 2:a9d1a9c92927 125 return ip;
yamaguch 2:a9d1a9c92927 126 }
yamaguch 2:a9d1a9c92927 127
yamaguch 0:d81f611c59ec 128 private:
yamaguch 0:d81f611c59ec 129 EthernetNetIf eth;
yamaguch 0:d81f611c59ec 130 bool active;
yamaguch 0:d81f611c59ec 131 bool verbose;
yamaguch 1:a22e390c70b3 132 };