Machine Vision Status TCP Server

Dependencies:   C12832 EthernetInterface mbed-rtos mbed ConfigFile

Committer:
dwini
Date:
Mon Jun 15 14:41:41 2015 +0000
Revision:
9:60ce5e733ea6
Add config file

Who changed what in which revision?

UserRevisionLine numberNew 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