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
Parent:
8:845dfadaa70d
Add config file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dwini 0:bef69e35f486 1 #include "mbed.h"
dwini 0:bef69e35f486 2 #include "C12832.h"
dwini 1:8efef658d90b 3 #include "Log.h"
dwini 1:8efef658d90b 4 #include "TcpDaemon.h"
dwini 3:254a2671a8e3 5 #include "StatusIndicator.h"
dwini 9:60ce5e733ea6 6 #include "Configuration.h"
dwini 0:bef69e35f486 7
dwini 0:bef69e35f486 8 #define LCD_LINE_HEIGHT 12
dwini 9:60ce5e733ea6 9 #define CONFIG_FILE "/local/brails.cfg"
dwini 0:bef69e35f486 10
dwini 0:bef69e35f486 11 Serial pc(USBTX,USBRX);
dwini 1:8efef658d90b 12 DigitalOut error_led(LED1);
dwini 0:bef69e35f486 13 C12832 lcd(p5, p7, p6, p8, p11);
dwini 0:bef69e35f486 14
dwini 1:8efef658d90b 15 using namespace MachineVision;
dwini 1:8efef658d90b 16
dwini 0:bef69e35f486 17 void setLcdServerInfo(char * ip) {
dwini 9:60ce5e733ea6 18 // lcd.cls();
dwini 9:60ce5e733ea6 19 // lcd.locate(0,0);
dwini 9:60ce5e733ea6 20 // lcd.printf("IP: %s", ip);
dwini 9:60ce5e733ea6 21 // lcd.locate(0,14);
dwini 9:60ce5e733ea6 22 // lcd.printf("Port: %d", TCP_SERVER_PORT);
dwini 0:bef69e35f486 23 }
dwini 0:bef69e35f486 24
dwini 0:bef69e35f486 25 int main (void) {
dwini 0:bef69e35f486 26 pc.baud(115200);
dwini 3:254a2671a8e3 27
dwini 6:6cbb21cc3884 28 lcd.cls();
dwini 6:6cbb21cc3884 29 lcd.locate(0,0);
dwini 6:6cbb21cc3884 30 lcd.printf("Starting ...");
dwini 9:60ce5e733ea6 31
dwini 9:60ce5e733ea6 32 // Read config from local filesystem
dwini 9:60ce5e733ea6 33 LocalFileSystem local("local");
dwini 9:60ce5e733ea6 34 Configuration config;
dwini 9:60ce5e733ea6 35
dwini 9:60ce5e733ea6 36 if (config.readFromFile(&local, CONFIG_FILE)) {
dwini 9:60ce5e733ea6 37 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());
dwini 9:60ce5e733ea6 38 } else {
dwini 9:60ce5e733ea6 39 // Create default config
dwini 9:60ce5e733ea6 40 Log::w("Creating default config file\r\n");
dwini 9:60ce5e733ea6 41 if (config.writeConfiguration(&local, CONFIG_FILE)) {
dwini 9:60ce5e733ea6 42 Log::w("Created default config file\r\n");
dwini 9:60ce5e733ea6 43
dwini 9:60ce5e733ea6 44 // Try a read now
dwini 9:60ce5e733ea6 45 if (config.readFromFile(&local, CONFIG_FILE)) {
dwini 9:60ce5e733ea6 46 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());
dwini 9:60ce5e733ea6 47 } else {
dwini 9:60ce5e733ea6 48 Log::w("Still could not read config. Giving up. Check filesystem as it may be corrupt.\r\n");
dwini 9:60ce5e733ea6 49 error("Still could not read config. Giving up. Check filesystem as it may be corrupt.\r\n");
dwini 9:60ce5e733ea6 50 }
dwini 9:60ce5e733ea6 51 } else {
dwini 9:60ce5e733ea6 52 Log::w("Creating default config file failed. Check filesystem as it may be corrupt.\r\n");
dwini 9:60ce5e733ea6 53 }
dwini 9:60ce5e733ea6 54 }
dwini 6:6cbb21cc3884 55
dwini 6:6cbb21cc3884 56 while (true) {
dwini 6:6cbb21cc3884 57 // Setup ethernet interface
dwini 6:6cbb21cc3884 58 EthernetInterface eth;
dwini 6:6cbb21cc3884 59 Log::v("Bringing ethernet interface online\r\n");
dwini 6:6cbb21cc3884 60
dwini 9:60ce5e733ea6 61 int success = 0;
dwini 9:60ce5e733ea6 62 if (config.useDhcp()){
dwini 9:60ce5e733ea6 63 success = eth.init();
dwini 9:60ce5e733ea6 64 } else {
dwini 9:60ce5e733ea6 65 success = eth.init(config.getIpAddress().c_str(), config.getNetmask().c_str(), config.getGateway().c_str());
dwini 9:60ce5e733ea6 66 }
dwini 0:bef69e35f486 67
dwini 6:6cbb21cc3884 68 if (success < 0 || eth.connect() < 0) { // Default timeout of 15 seconds
dwini 6:6cbb21cc3884 69 Log::w("Could not bring ethernet interface online\r\n");
dwini 6:6cbb21cc3884 70 setLcdServerInfo("No ip address");
dwini 6:6cbb21cc3884 71 } else {
dwini 6:6cbb21cc3884 72 Log::v("IP Address is %s\r\n", eth.getIPAddress());
dwini 6:6cbb21cc3884 73
dwini 6:6cbb21cc3884 74 // Set ip on LCD
dwini 6:6cbb21cc3884 75 setLcdServerInfo(eth.getIPAddress());
dwini 6:6cbb21cc3884 76
dwini 6:6cbb21cc3884 77 // Start the daemon
dwini 8:845dfadaa70d 78 PlcStatusIndicator status_indicator(p21);
dwini 9:60ce5e733ea6 79 TcpDaemon daemon(config.getTcpPort(), LED2, LED3, &status_indicator);
dwini 9:60ce5e733ea6 80 Log::v("TCP daemon listening @ TCP_SERVER_PORT = %d\r\n", config.getTcpPort());
dwini 6:6cbb21cc3884 81 daemon.startListening();
dwini 6:6cbb21cc3884 82 }
dwini 6:6cbb21cc3884 83
dwini 9:60ce5e733ea6 84 wait(5);
dwini 0:bef69e35f486 85 }
dwini 0:bef69e35f486 86 }