mbed Phone Platform

Dependencies:   ulaw mbed ConfigFile

Committer:
okini3939
Date:
Fri Jan 21 16:06:15 2011 +0000
Revision:
6:bd62b12de751

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 6:bd62b12de751 1 #include "mbed.h"
okini3939 6:bd62b12de751 2 #include "EthernetNetIf.h"
okini3939 6:bd62b12de751 3 #include "ConfigFile.h"
okini3939 6:bd62b12de751 4 #include "phone.h"
okini3939 6:bd62b12de751 5
okini3939 6:bd62b12de751 6 LocalFileSystem local("local");
okini3939 6:bd62b12de751 7
okini3939 6:bd62b12de751 8 extern EthernetNetIf *eth;
okini3939 6:bd62b12de751 9 extern int useipline;
okini3939 6:bd62b12de751 10 extern struct PhoneBook phonebook[];
okini3939 6:bd62b12de751 11
okini3939 6:bd62b12de751 12 char* chop (char *s) {
okini3939 6:bd62b12de751 13 int i;
okini3939 6:bd62b12de751 14
okini3939 6:bd62b12de751 15 for (i = strlen(s) - 1; i >= 0; i --) {
okini3939 6:bd62b12de751 16 if (s[i] == ' ' || s[i] == '\n' || s[i] == '\r') {
okini3939 6:bd62b12de751 17 s[i] = 0;
okini3939 6:bd62b12de751 18 } else {
okini3939 6:bd62b12de751 19 break;
okini3939 6:bd62b12de751 20 }
okini3939 6:bd62b12de751 21 }
okini3939 6:bd62b12de751 22 return s;
okini3939 6:bd62b12de751 23 }
okini3939 6:bd62b12de751 24
okini3939 6:bd62b12de751 25 int config () {
okini3939 6:bd62b12de751 26 int i, j;
okini3939 6:bd62b12de751 27 ConfigFile cfg;
okini3939 6:bd62b12de751 28 char buf[80], key[20];
okini3939 6:bd62b12de751 29 int ip0, ip1, ip2, ip3;
okini3939 6:bd62b12de751 30 EthernetErr r;
okini3939 6:bd62b12de751 31 IpAddr ipaddr, netmask, gateway, nameserver;
okini3939 6:bd62b12de751 32
okini3939 6:bd62b12de751 33 if (! cfg.read("/local/phone.cfg")) {
okini3939 6:bd62b12de751 34 printf("config err\r\n");
okini3939 6:bd62b12de751 35 return -1;
okini3939 6:bd62b12de751 36 }
okini3939 6:bd62b12de751 37
okini3939 6:bd62b12de751 38 if (cfg.getValue("IPADDRESS", buf, sizeof(buf))) {
okini3939 6:bd62b12de751 39 chop(buf);
okini3939 6:bd62b12de751 40 if (strcmp(buf, "DHCP") == 0) {
okini3939 6:bd62b12de751 41 eth = new EthernetNetIf;
okini3939 6:bd62b12de751 42 } else {
okini3939 6:bd62b12de751 43 sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 6:bd62b12de751 44 ipaddr = IpAddr(ip0, ip1, ip2, ip3);
okini3939 6:bd62b12de751 45 if (cfg.getValue("NETMASK", buf, sizeof(buf))) {
okini3939 6:bd62b12de751 46 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 6:bd62b12de751 47 netmask = IpAddr(ip0, ip1, ip2, ip3);
okini3939 6:bd62b12de751 48 }
okini3939 6:bd62b12de751 49 if (cfg.getValue("GATEWAY", buf, sizeof(buf))) {
okini3939 6:bd62b12de751 50 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 6:bd62b12de751 51 gateway = IpAddr(ip0, ip1, ip2, ip3);
okini3939 6:bd62b12de751 52 }
okini3939 6:bd62b12de751 53 if (cfg.getValue("NAMESERVER", buf, sizeof(buf))) {
okini3939 6:bd62b12de751 54 sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3);
okini3939 6:bd62b12de751 55 nameserver = IpAddr(ip0, ip1, ip2, ip3);
okini3939 6:bd62b12de751 56 }
okini3939 6:bd62b12de751 57 eth = new EthernetNetIf(ipaddr, netmask, gateway, nameserver);
okini3939 6:bd62b12de751 58 }
okini3939 6:bd62b12de751 59 r = eth->setup();
okini3939 6:bd62b12de751 60 if (! r) {
okini3939 6:bd62b12de751 61 useipline = 1;
okini3939 6:bd62b12de751 62 }
okini3939 6:bd62b12de751 63 }
okini3939 6:bd62b12de751 64
okini3939 6:bd62b12de751 65 for (i = 0; i < PB_SIZE; i ++) {
okini3939 6:bd62b12de751 66 sprintf(key, "DIAL[%d]", i);
okini3939 6:bd62b12de751 67 if (cfg.getValue(key, buf, sizeof(buf))) {
okini3939 6:bd62b12de751 68 for (j = 0; j < strlen(buf) && j < DIAL_SIZE; j ++) {
okini3939 6:bd62b12de751 69 if (buf[j] == '0') {
okini3939 6:bd62b12de751 70 phonebook[i].dial[j] = 10;
okini3939 6:bd62b12de751 71 } else
okini3939 6:bd62b12de751 72 if (buf[j] >= '1' && buf[j] <= '9') {
okini3939 6:bd62b12de751 73 phonebook[i].dial[j] = buf[j] - '0';
okini3939 6:bd62b12de751 74 }
okini3939 6:bd62b12de751 75 }
okini3939 6:bd62b12de751 76 phonebook[i].dial[j] = 0;
okini3939 6:bd62b12de751 77 }
okini3939 6:bd62b12de751 78 sprintf(key, "TYPE[%d]", i);
okini3939 6:bd62b12de751 79 if (cfg.getValue(key, buf, sizeof(buf))) {
okini3939 6:bd62b12de751 80 phonebook[i].target = (enum PhoneType)atoi(buf);
okini3939 6:bd62b12de751 81 }
okini3939 6:bd62b12de751 82 sprintf(key, "ADDR[%d]", i);
okini3939 6:bd62b12de751 83 cfg.getValue(key, phonebook[i].hostname, sizeof(phonebook[i].hostname));
okini3939 6:bd62b12de751 84 }
okini3939 6:bd62b12de751 85
okini3939 6:bd62b12de751 86 return 0;
okini3939 6:bd62b12de751 87 }
okini3939 6:bd62b12de751 88