This is an example code for using our TFTP server library, written as part of the LaOS (Laser Open Source) project.
Dependencies: ChaNFSSD EthernetNetIf mbed ChaNFS TFTPServer
main.cpp
- Committer:
- tuxic
- Date:
- 2011-12-27
- Revision:
- 0:5c9e0971532d
File content as of revision 0:5c9e0971532d:
/* * example program for TFTPServer class * * How to use: * -> change the IP to something that works for you * -> connect to the mbed with a TFTP client in binary(octet) mode * -> use (s)uspend and (r)esume keys to turn TFTP server on/off * -> upload any file, but .bin files are always put on the internal * memory, as are config.txt files * * Copyright (c) 2011 Jaap Vermaas * * This file is part of the LaOS project (see: http://wiki.laoslaser.org * * LaOS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * LaOS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LaOS. If not, see <http://www.gnu.org/licenses/>. */ #include "mbed.h" #include "SDFileSystem.h" #include "TFTPServer.h" #include "EthernetNetIf.h" LocalFileSystem local("local"); // defining this makes MBED internal mem accessible TFTPServer *srv; // define the TFTP Server Timer t; // used in main() to send debug output every 2 seconds Serial *serial; // serial just for debugging SDFileSystem sd(p11, p12, p13, p14, "sd"); // only needed if you save to SD card EthernetNetIf *eth; // network device int main() { // configure serial terminal serial = new Serial(USBTX, USBRX); serial->baud(115200); // set up networking eth = new EthernetNetIf( IpAddr(192,168,1,111), //IP Address IpAddr(255,255,255,0), //Network Mask IpAddr(192,168,1,1), //Gateway IpAddr(192,168,1,1) //DNS ); eth->setup(); // test SD card (TFTP server can work without it) printf("TEST SD...\n\r"); FILE *fp = fopen("/sd/test.txt", "wb"); if ( fp == NULL ) printf("SD: NOT READY\n\r"); else { printf("SD: READY...\n\r"); fclose(fp); } remove("/sd/test.txt"); // start tftp server with the work dir as a comment // use "/local/" for the internal mbed device srv = new TFTPServer("/sd/"); t.start(); int filecounter = 0; // incoming files char filename[256]; // to display filenames while (1) { Net::poll(); if (serial->readable()) { int c = serial->getc(); switch (c) { case 's': srv->suspend(); break; case 'r': srv->resume(); break; } } if (srv->fileCnt() > filecounter) { filecounter = srv->fileCnt(); srv->getFilename(filename); printf("new file: %s\n\r", filename); } if (t.read() > 2) { t.reset(); TFTPServerState state = srv->State(); switch(state) { case listen: printf("MAIN: TFTP listen\n\r"); break; case reading: srv->getFilename(filename); printf("MAIN: TFTP reading file: %s\n\r", filename); break; case writing: srv->getFilename(filename); printf("MAIN: TFTP writing file: %s\n\r", filename); break; case error: printf("MAIN: TFTP error\n\r"); break; case suspended: printf("MAIN: TFTP suspended\n\r"); break; default: printf("MAIN: Unknown TFTP status\n\r"); break; } } } }