mbed Phone Platform
Dependencies: ulaw mbed ConfigFile
config.cpp@6:bd62b12de751, 2011-01-21 (annotated)
- Committer:
- okini3939
- Date:
- Fri Jan 21 16:06:15 2011 +0000
- Revision:
- 6:bd62b12de751
Who changed what in which revision?
User | Revision | Line number | New 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 |