mbed Phone Platform
Dependencies: ulaw mbed ConfigFile
Diff: config.cpp
- Revision:
- 6:bd62b12de751
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.cpp Fri Jan 21 16:06:15 2011 +0000 @@ -0,0 +1,88 @@ +#include "mbed.h" +#include "EthernetNetIf.h" +#include "ConfigFile.h" +#include "phone.h" + +LocalFileSystem local("local"); + +extern EthernetNetIf *eth; +extern int useipline; +extern struct PhoneBook phonebook[]; + +char* chop (char *s) { + int i; + + for (i = strlen(s) - 1; i >= 0; i --) { + if (s[i] == ' ' || s[i] == '\n' || s[i] == '\r') { + s[i] = 0; + } else { + break; + } + } + return s; +} + +int config () { + int i, j; + ConfigFile cfg; + char buf[80], key[20]; + int ip0, ip1, ip2, ip3; + EthernetErr r; + IpAddr ipaddr, netmask, gateway, nameserver; + + if (! cfg.read("/local/phone.cfg")) { +printf("config err\r\n"); + return -1; + } + + if (cfg.getValue("IPADDRESS", buf, sizeof(buf))) { + chop(buf); + if (strcmp(buf, "DHCP") == 0) { + eth = new EthernetNetIf; + } else { + sscanf(buf, "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); + ipaddr = IpAddr(ip0, ip1, ip2, ip3); + if (cfg.getValue("NETMASK", buf, sizeof(buf))) { + sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); + netmask = IpAddr(ip0, ip1, ip2, ip3); + } + if (cfg.getValue("GATEWAY", buf, sizeof(buf))) { + sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); + gateway = IpAddr(ip0, ip1, ip2, ip3); + } + if (cfg.getValue("NAMESERVER", buf, sizeof(buf))) { + sscanf(chop(buf), "%d.%d.%d.%d", &ip0, &ip1, &ip2, &ip3); + nameserver = IpAddr(ip0, ip1, ip2, ip3); + } + eth = new EthernetNetIf(ipaddr, netmask, gateway, nameserver); + } + r = eth->setup(); + if (! r) { + useipline = 1; + } + } + + for (i = 0; i < PB_SIZE; i ++) { + sprintf(key, "DIAL[%d]", i); + if (cfg.getValue(key, buf, sizeof(buf))) { + for (j = 0; j < strlen(buf) && j < DIAL_SIZE; j ++) { + if (buf[j] == '0') { + phonebook[i].dial[j] = 10; + } else + if (buf[j] >= '1' && buf[j] <= '9') { + phonebook[i].dial[j] = buf[j] - '0'; + } + } + phonebook[i].dial[j] = 0; + } + sprintf(key, "TYPE[%d]", i); + if (cfg.getValue(key, buf, sizeof(buf))) { + phonebook[i].target = (enum PhoneType)atoi(buf); + } + sprintf(key, "ADDR[%d]", i); + cfg.getValue(key, phonebook[i].hostname, sizeof(phonebook[i].hostname)); + } + + return 0; +} + \ No newline at end of file