Machine Vision Status TCP Server
Dependencies: C12832 EthernetInterface mbed-rtos mbed ConfigFile
main.cpp@9:60ce5e733ea6, 2015-06-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |