Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 EthernetInterface mbed-rtos mbed ConfigFile
Revision 9:60ce5e733ea6, committed 2015-06-15
- Comitter:
- dwini
- Date:
- Mon Jun 15 14:41:41 2015 +0000
- Parent:
- 8:845dfadaa70d
- Commit message:
- Add config file
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ConfigFile.lib Mon Jun 15 14:41:41 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/shintamainjp/code/ConfigFile/#f6ceafabe9f8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Configuration.cpp Mon Jun 15 14:41:41 2015 +0000
@@ -0,0 +1,148 @@
+#include "Configuration.h"
+#include "Log.h"
+
+#define CFG_BUFF_SIZE 128
+
+namespace MachineVision{
+
+ Configuration::Configuration(void) {
+ // Defaults
+ this->use_dhcp = true;
+ this->ip = "10.0.0.100";
+ this->netmask = "255.255.255.0";
+ this->gateway = "10.0.0.254";
+ this->tcp_port = 6666;
+ }
+
+ bool Configuration::writeConfiguration(LocalFileSystem * fs, char * configfile) {
+ // Create config
+ ConfigFile cfg;
+ char buffer[CFG_BUFF_SIZE];
+
+ sprintf(buffer, "%d", this->useDhcp());
+ if (!cfg.setValue("DHCP", buffer)) {
+ Log::e("Failed to set value for DHCP.\n");
+ return false;
+ }
+
+ if (!cfg.setValue("IP_ADDRESS", (char *)this->getIpAddress().c_str())) {
+ Log::e("Failed to set value for IP_ADDRESS.\n");
+ return false;
+ }
+
+ if (!cfg.setValue("NETMASK", (char *)this->getNetmask().c_str())) {
+ Log::e("Failed to set value for NETMASK.\n");
+ return false;
+ }
+
+ if (!cfg.setValue("GATEWAY", (char *)this->getGateway().c_str())) {
+ Log::e("Failed to set value for GATEWAY.\n");
+ return false;
+ }
+
+ sprintf(buffer, "%d", this->getTcpPort());
+ if (!cfg.setValue("TCP_PORT", buffer)) {
+ Log::e("Failed to set value for TCP_PORT.\n");
+ return false;
+ }
+
+ // Write config to local filesystem
+ if (!cfg.write(configfile)) {
+ Log::e("Failed to write configuration file\r\n");
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Read config from filesystem.
+ *
+ * @param configfile The path to the config file
+ */
+ bool Configuration::readFromFile(LocalFileSystem * fs, char * configfile) {
+ // Read config from local filesystem
+ ConfigFile cfg;
+ if (!cfg.read(configfile)) {
+ Log::e("Failure to read configuration file\r\n");
+ return false;
+ }
+
+ // Parse config params
+ char buffer[CFG_BUFF_SIZE];
+ if (readConfigParameter(&cfg, "DHCP", buffer, CFG_BUFF_SIZE)){
+ if (buffer[0] == '0'){ // No DHCP
+ this->use_dhcp = false;
+ } else {
+ this->use_dhcp = true;
+ }
+ } else {
+ Log::e("DHCP config could not be read\r\n");
+ return false;
+ }
+
+ if (!this->use_dhcp) { // Static IP
+ if (readConfigParameter(&cfg, "IP_ADDRESS", buffer, CFG_BUFF_SIZE)){
+ this->ip = std::string(buffer);
+ } else {
+ Log::e("IP_ADDRESS config could not be read\r\n");
+ return false;
+ }
+
+ if (readConfigParameter(&cfg, "NETMASK", buffer, CFG_BUFF_SIZE)){
+ this->netmask = std::string(buffer);
+ } else {
+ Log::e("NETMASK config could not be read\r\n");
+ return false;
+ }
+
+ if (readConfigParameter(&cfg, "GATEWAY", buffer, CFG_BUFF_SIZE)){
+ this->gateway = std::string(buffer);
+ } else {
+ Log::e("GATEWAY config could not be read\r\n");
+ return false;
+ }
+ }
+
+ if (readConfigParameter(&cfg, "TCP_PORT", buffer, CFG_BUFF_SIZE)){
+ this->tcp_port = atoi(buffer);
+ } else {
+ Log::e("TCP_PORT config could not be read\r\n");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool Configuration::readConfigParameter(ConfigFile * cfg, char * key, char * value, int buffer_size) {
+ if (cfg->getValue(key, &value[0], buffer_size)) {
+ Log::v("Read config: '%s'='%s'\r\n", key, value);
+ return true;
+ } else {
+ Log::e("Could not find config key: '%s'\r\n", key);
+ return false;
+ }
+ }
+
+ bool Configuration::useDhcp(void) {
+ return this->use_dhcp;
+ }
+
+ std::string Configuration::getIpAddress(void) {
+ return this->ip;
+ }
+
+ std::string Configuration::getNetmask(void) {
+ return this->netmask;
+ }
+
+ std::string Configuration::getGateway(void) {
+ return this->gateway;
+ }
+
+ int Configuration::getTcpPort(void) {
+ return this->tcp_port;
+ }
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Configuration.h Mon Jun 15 14:41:41 2015 +0000
@@ -0,0 +1,35 @@
+#ifndef CONFIGURATION_HEADER
+#define CONFIGURATION_HEADER
+
+#include <string>
+#include "ConfigFile.h"
+
+namespace MachineVision{
+
+ class Configuration{
+
+ public:
+ bool use_dhcp;
+ std::string ip;
+ std::string netmask;
+ std::string gateway;
+ int tcp_port;
+
+ public:
+ bool useDhcp(void);
+ std::string getIpAddress(void);
+ std::string getNetmask(void);
+ std::string getGateway(void);
+ int getTcpPort(void);
+
+ public:
+ Configuration(void);
+ bool readFromFile(LocalFileSystem * fs, char * configfile);
+ bool writeConfiguration(LocalFileSystem * fs, char * configfile);
+
+ private:
+ bool readConfigParameter(ConfigFile * cfg, char * key, char * value, int buffer_size);
+ };
+}
+
+#endif
--- a/main.cpp Mon Jun 15 12:07:05 2015 +0000
+++ b/main.cpp Mon Jun 15 14:41:41 2015 +0000
@@ -3,12 +3,10 @@
#include "Log.h"
#include "TcpDaemon.h"
#include "StatusIndicator.h"
+#include "Configuration.h"
-#define TCP_SERVER_PORT 6666
#define LCD_LINE_HEIGHT 12
-#define IP_ADDRESS "10.0.0.100"
-#define NETMASK "255.255.255.0"
-#define GATEWAY "10.0.0.254"
+#define CONFIG_FILE "/local/brails.cfg"
Serial pc(USBTX,USBRX);
DigitalOut error_led(LED1);
@@ -17,11 +15,11 @@
using namespace MachineVision;
void setLcdServerInfo(char * ip) {
- lcd.cls();
- lcd.locate(0,0);
- lcd.printf("IP: %s", ip);
- lcd.locate(0,14);
- lcd.printf("Port: %d", TCP_SERVER_PORT);
+// lcd.cls();
+// lcd.locate(0,0);
+// lcd.printf("IP: %s", ip);
+// lcd.locate(0,14);
+// lcd.printf("Port: %d", TCP_SERVER_PORT);
}
int main (void) {
@@ -30,15 +28,42 @@
lcd.cls();
lcd.locate(0,0);
lcd.printf("Starting ...");
+
+ // Read config from local filesystem
+ LocalFileSystem local("local");
+ Configuration config;
+
+ if (config.readFromFile(&local, CONFIG_FILE)) {
+ Log::v("Using config:\r\n\tDHCP: %d\r\n\tIP: %s\r\n\tNETMASK: %s\r\n\tGATEWAY: %s\r\n\tTCP_PORT: %d\r\n", config.useDhcp(), config.getIpAddress(), config.getNetmask(), config.getGateway(), config.getTcpPort());
+ } else {
+ // Create default config
+ Log::w("Creating default config file\r\n");
+ if (config.writeConfiguration(&local, CONFIG_FILE)) {
+ Log::w("Created default config file\r\n");
+
+ // Try a read now
+ if (config.readFromFile(&local, CONFIG_FILE)) {
+ Log::v("Using config:\r\n\tDHCP: %d\r\n\tIP: %s\r\n\tNETMASK: %s\r\n\tGATEWAY: %s\r\n\tTCP_PORT: %d\r\n", config.useDhcp(), config.getIpAddress(), config.getNetmask(), config.getGateway(), config.getTcpPort());
+ } else {
+ Log::w("Still could not read config. Giving up. Check filesystem as it may be corrupt.\r\n");
+ error("Still could not read config. Giving up. Check filesystem as it may be corrupt.\r\n");
+ }
+ } else {
+ Log::w("Creating default config file failed. Check filesystem as it may be corrupt.\r\n");
+ }
+ }
while (true) {
// Setup ethernet interface
EthernetInterface eth;
Log::v("Bringing ethernet interface online\r\n");
-
- //int success = eth.init(); //Use DHCP
- int success = eth.init(IP_ADDRESS, NETMASK, GATEWAY);
+ int success = 0;
+ if (config.useDhcp()){
+ success = eth.init();
+ } else {
+ success = eth.init(config.getIpAddress().c_str(), config.getNetmask().c_str(), config.getGateway().c_str());
+ }
if (success < 0 || eth.connect() < 0) { // Default timeout of 15 seconds
Log::w("Could not bring ethernet interface online\r\n");
@@ -51,12 +76,11 @@
// Start the daemon
PlcStatusIndicator status_indicator(p21);
- //PlcStatusIndicator status_indicator(LED4);
- TcpDaemon daemon(TCP_SERVER_PORT, LED2, LED3, &status_indicator);
- Log::v("TCP daemon listening @ TCP_SERVER_PORT = %d\r\n", TCP_SERVER_PORT);
+ TcpDaemon daemon(config.getTcpPort(), LED2, LED3, &status_indicator);
+ Log::v("TCP daemon listening @ TCP_SERVER_PORT = %d\r\n", config.getTcpPort());
daemon.startListening();
}
- pc.printf("Fail");
+ wait(5);
}
}