Machine Vision Status TCP Server
Dependencies: C12832 EthernetInterface mbed-rtos mbed ConfigFile
Configuration.cpp@9:60ce5e733ea6, 2015-06-15 (annotated)
- Committer:
- dwini
- Date:
- Mon Jun 15 14:41:41 2015 +0000
- Revision:
- 9:60ce5e733ea6
Add config file
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dwini | 9:60ce5e733ea6 | 1 | #include "Configuration.h" |
dwini | 9:60ce5e733ea6 | 2 | #include "Log.h" |
dwini | 9:60ce5e733ea6 | 3 | |
dwini | 9:60ce5e733ea6 | 4 | #define CFG_BUFF_SIZE 128 |
dwini | 9:60ce5e733ea6 | 5 | |
dwini | 9:60ce5e733ea6 | 6 | namespace MachineVision{ |
dwini | 9:60ce5e733ea6 | 7 | |
dwini | 9:60ce5e733ea6 | 8 | Configuration::Configuration(void) { |
dwini | 9:60ce5e733ea6 | 9 | // Defaults |
dwini | 9:60ce5e733ea6 | 10 | this->use_dhcp = true; |
dwini | 9:60ce5e733ea6 | 11 | this->ip = "10.0.0.100"; |
dwini | 9:60ce5e733ea6 | 12 | this->netmask = "255.255.255.0"; |
dwini | 9:60ce5e733ea6 | 13 | this->gateway = "10.0.0.254"; |
dwini | 9:60ce5e733ea6 | 14 | this->tcp_port = 6666; |
dwini | 9:60ce5e733ea6 | 15 | } |
dwini | 9:60ce5e733ea6 | 16 | |
dwini | 9:60ce5e733ea6 | 17 | bool Configuration::writeConfiguration(LocalFileSystem * fs, char * configfile) { |
dwini | 9:60ce5e733ea6 | 18 | // Create config |
dwini | 9:60ce5e733ea6 | 19 | ConfigFile cfg; |
dwini | 9:60ce5e733ea6 | 20 | char buffer[CFG_BUFF_SIZE]; |
dwini | 9:60ce5e733ea6 | 21 | |
dwini | 9:60ce5e733ea6 | 22 | sprintf(buffer, "%d", this->useDhcp()); |
dwini | 9:60ce5e733ea6 | 23 | if (!cfg.setValue("DHCP", buffer)) { |
dwini | 9:60ce5e733ea6 | 24 | Log::e("Failed to set value for DHCP.\n"); |
dwini | 9:60ce5e733ea6 | 25 | return false; |
dwini | 9:60ce5e733ea6 | 26 | } |
dwini | 9:60ce5e733ea6 | 27 | |
dwini | 9:60ce5e733ea6 | 28 | if (!cfg.setValue("IP_ADDRESS", (char *)this->getIpAddress().c_str())) { |
dwini | 9:60ce5e733ea6 | 29 | Log::e("Failed to set value for IP_ADDRESS.\n"); |
dwini | 9:60ce5e733ea6 | 30 | return false; |
dwini | 9:60ce5e733ea6 | 31 | } |
dwini | 9:60ce5e733ea6 | 32 | |
dwini | 9:60ce5e733ea6 | 33 | if (!cfg.setValue("NETMASK", (char *)this->getNetmask().c_str())) { |
dwini | 9:60ce5e733ea6 | 34 | Log::e("Failed to set value for NETMASK.\n"); |
dwini | 9:60ce5e733ea6 | 35 | return false; |
dwini | 9:60ce5e733ea6 | 36 | } |
dwini | 9:60ce5e733ea6 | 37 | |
dwini | 9:60ce5e733ea6 | 38 | if (!cfg.setValue("GATEWAY", (char *)this->getGateway().c_str())) { |
dwini | 9:60ce5e733ea6 | 39 | Log::e("Failed to set value for GATEWAY.\n"); |
dwini | 9:60ce5e733ea6 | 40 | return false; |
dwini | 9:60ce5e733ea6 | 41 | } |
dwini | 9:60ce5e733ea6 | 42 | |
dwini | 9:60ce5e733ea6 | 43 | sprintf(buffer, "%d", this->getTcpPort()); |
dwini | 9:60ce5e733ea6 | 44 | if (!cfg.setValue("TCP_PORT", buffer)) { |
dwini | 9:60ce5e733ea6 | 45 | Log::e("Failed to set value for TCP_PORT.\n"); |
dwini | 9:60ce5e733ea6 | 46 | return false; |
dwini | 9:60ce5e733ea6 | 47 | } |
dwini | 9:60ce5e733ea6 | 48 | |
dwini | 9:60ce5e733ea6 | 49 | // Write config to local filesystem |
dwini | 9:60ce5e733ea6 | 50 | if (!cfg.write(configfile)) { |
dwini | 9:60ce5e733ea6 | 51 | Log::e("Failed to write configuration file\r\n"); |
dwini | 9:60ce5e733ea6 | 52 | return false; |
dwini | 9:60ce5e733ea6 | 53 | } |
dwini | 9:60ce5e733ea6 | 54 | |
dwini | 9:60ce5e733ea6 | 55 | return true; |
dwini | 9:60ce5e733ea6 | 56 | } |
dwini | 9:60ce5e733ea6 | 57 | |
dwini | 9:60ce5e733ea6 | 58 | /** |
dwini | 9:60ce5e733ea6 | 59 | * Read config from filesystem. |
dwini | 9:60ce5e733ea6 | 60 | * |
dwini | 9:60ce5e733ea6 | 61 | * @param configfile The path to the config file |
dwini | 9:60ce5e733ea6 | 62 | */ |
dwini | 9:60ce5e733ea6 | 63 | bool Configuration::readFromFile(LocalFileSystem * fs, char * configfile) { |
dwini | 9:60ce5e733ea6 | 64 | // Read config from local filesystem |
dwini | 9:60ce5e733ea6 | 65 | ConfigFile cfg; |
dwini | 9:60ce5e733ea6 | 66 | if (!cfg.read(configfile)) { |
dwini | 9:60ce5e733ea6 | 67 | Log::e("Failure to read configuration file\r\n"); |
dwini | 9:60ce5e733ea6 | 68 | return false; |
dwini | 9:60ce5e733ea6 | 69 | } |
dwini | 9:60ce5e733ea6 | 70 | |
dwini | 9:60ce5e733ea6 | 71 | // Parse config params |
dwini | 9:60ce5e733ea6 | 72 | char buffer[CFG_BUFF_SIZE]; |
dwini | 9:60ce5e733ea6 | 73 | if (readConfigParameter(&cfg, "DHCP", buffer, CFG_BUFF_SIZE)){ |
dwini | 9:60ce5e733ea6 | 74 | if (buffer[0] == '0'){ // No DHCP |
dwini | 9:60ce5e733ea6 | 75 | this->use_dhcp = false; |
dwini | 9:60ce5e733ea6 | 76 | } else { |
dwini | 9:60ce5e733ea6 | 77 | this->use_dhcp = true; |
dwini | 9:60ce5e733ea6 | 78 | } |
dwini | 9:60ce5e733ea6 | 79 | } else { |
dwini | 9:60ce5e733ea6 | 80 | Log::e("DHCP config could not be read\r\n"); |
dwini | 9:60ce5e733ea6 | 81 | return false; |
dwini | 9:60ce5e733ea6 | 82 | } |
dwini | 9:60ce5e733ea6 | 83 | |
dwini | 9:60ce5e733ea6 | 84 | if (!this->use_dhcp) { // Static IP |
dwini | 9:60ce5e733ea6 | 85 | if (readConfigParameter(&cfg, "IP_ADDRESS", buffer, CFG_BUFF_SIZE)){ |
dwini | 9:60ce5e733ea6 | 86 | this->ip = std::string(buffer); |
dwini | 9:60ce5e733ea6 | 87 | } else { |
dwini | 9:60ce5e733ea6 | 88 | Log::e("IP_ADDRESS config could not be read\r\n"); |
dwini | 9:60ce5e733ea6 | 89 | return false; |
dwini | 9:60ce5e733ea6 | 90 | } |
dwini | 9:60ce5e733ea6 | 91 | |
dwini | 9:60ce5e733ea6 | 92 | if (readConfigParameter(&cfg, "NETMASK", buffer, CFG_BUFF_SIZE)){ |
dwini | 9:60ce5e733ea6 | 93 | this->netmask = std::string(buffer); |
dwini | 9:60ce5e733ea6 | 94 | } else { |
dwini | 9:60ce5e733ea6 | 95 | Log::e("NETMASK config could not be read\r\n"); |
dwini | 9:60ce5e733ea6 | 96 | return false; |
dwini | 9:60ce5e733ea6 | 97 | } |
dwini | 9:60ce5e733ea6 | 98 | |
dwini | 9:60ce5e733ea6 | 99 | if (readConfigParameter(&cfg, "GATEWAY", buffer, CFG_BUFF_SIZE)){ |
dwini | 9:60ce5e733ea6 | 100 | this->gateway = std::string(buffer); |
dwini | 9:60ce5e733ea6 | 101 | } else { |
dwini | 9:60ce5e733ea6 | 102 | Log::e("GATEWAY config could not be read\r\n"); |
dwini | 9:60ce5e733ea6 | 103 | return false; |
dwini | 9:60ce5e733ea6 | 104 | } |
dwini | 9:60ce5e733ea6 | 105 | } |
dwini | 9:60ce5e733ea6 | 106 | |
dwini | 9:60ce5e733ea6 | 107 | if (readConfigParameter(&cfg, "TCP_PORT", buffer, CFG_BUFF_SIZE)){ |
dwini | 9:60ce5e733ea6 | 108 | this->tcp_port = atoi(buffer); |
dwini | 9:60ce5e733ea6 | 109 | } else { |
dwini | 9:60ce5e733ea6 | 110 | Log::e("TCP_PORT config could not be read\r\n"); |
dwini | 9:60ce5e733ea6 | 111 | return false; |
dwini | 9:60ce5e733ea6 | 112 | } |
dwini | 9:60ce5e733ea6 | 113 | |
dwini | 9:60ce5e733ea6 | 114 | return true; |
dwini | 9:60ce5e733ea6 | 115 | } |
dwini | 9:60ce5e733ea6 | 116 | |
dwini | 9:60ce5e733ea6 | 117 | bool Configuration::readConfigParameter(ConfigFile * cfg, char * key, char * value, int buffer_size) { |
dwini | 9:60ce5e733ea6 | 118 | if (cfg->getValue(key, &value[0], buffer_size)) { |
dwini | 9:60ce5e733ea6 | 119 | Log::v("Read config: '%s'='%s'\r\n", key, value); |
dwini | 9:60ce5e733ea6 | 120 | return true; |
dwini | 9:60ce5e733ea6 | 121 | } else { |
dwini | 9:60ce5e733ea6 | 122 | Log::e("Could not find config key: '%s'\r\n", key); |
dwini | 9:60ce5e733ea6 | 123 | return false; |
dwini | 9:60ce5e733ea6 | 124 | } |
dwini | 9:60ce5e733ea6 | 125 | } |
dwini | 9:60ce5e733ea6 | 126 | |
dwini | 9:60ce5e733ea6 | 127 | bool Configuration::useDhcp(void) { |
dwini | 9:60ce5e733ea6 | 128 | return this->use_dhcp; |
dwini | 9:60ce5e733ea6 | 129 | } |
dwini | 9:60ce5e733ea6 | 130 | |
dwini | 9:60ce5e733ea6 | 131 | std::string Configuration::getIpAddress(void) { |
dwini | 9:60ce5e733ea6 | 132 | return this->ip; |
dwini | 9:60ce5e733ea6 | 133 | } |
dwini | 9:60ce5e733ea6 | 134 | |
dwini | 9:60ce5e733ea6 | 135 | std::string Configuration::getNetmask(void) { |
dwini | 9:60ce5e733ea6 | 136 | return this->netmask; |
dwini | 9:60ce5e733ea6 | 137 | } |
dwini | 9:60ce5e733ea6 | 138 | |
dwini | 9:60ce5e733ea6 | 139 | std::string Configuration::getGateway(void) { |
dwini | 9:60ce5e733ea6 | 140 | return this->gateway; |
dwini | 9:60ce5e733ea6 | 141 | } |
dwini | 9:60ce5e733ea6 | 142 | |
dwini | 9:60ce5e733ea6 | 143 | int Configuration::getTcpPort(void) { |
dwini | 9:60ce5e733ea6 | 144 | return this->tcp_port; |
dwini | 9:60ce5e733ea6 | 145 | } |
dwini | 9:60ce5e733ea6 | 146 | } |
dwini | 9:60ce5e733ea6 | 147 | |
dwini | 9:60ce5e733ea6 | 148 |