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

Committer:
tuxic
Date:
Tue Dec 27 10:41:28 2011 +0000
Revision:
0:5c9e0971532d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tuxic 0:5c9e0971532d 1 /*
tuxic 0:5c9e0971532d 2 * example program for TFTPServer class
tuxic 0:5c9e0971532d 3 *
tuxic 0:5c9e0971532d 4 * How to use:
tuxic 0:5c9e0971532d 5 * -> change the IP to something that works for you
tuxic 0:5c9e0971532d 6 * -> connect to the mbed with a TFTP client in binary(octet) mode
tuxic 0:5c9e0971532d 7 * -> use (s)uspend and (r)esume keys to turn TFTP server on/off
tuxic 0:5c9e0971532d 8 * -> upload any file, but .bin files are always put on the internal
tuxic 0:5c9e0971532d 9 * memory, as are config.txt files
tuxic 0:5c9e0971532d 10 *
tuxic 0:5c9e0971532d 11 * Copyright (c) 2011 Jaap Vermaas
tuxic 0:5c9e0971532d 12 *
tuxic 0:5c9e0971532d 13 * This file is part of the LaOS project (see: http://wiki.laoslaser.org
tuxic 0:5c9e0971532d 14 *
tuxic 0:5c9e0971532d 15 * LaOS is free software: you can redistribute it and/or modify
tuxic 0:5c9e0971532d 16 * it under the terms of the GNU General Public License as published by
tuxic 0:5c9e0971532d 17 * the Free Software Foundation, either version 3 of the License, or
tuxic 0:5c9e0971532d 18 * (at your option) any later version.
tuxic 0:5c9e0971532d 19 *
tuxic 0:5c9e0971532d 20 * LaOS is distributed in the hope that it will be useful,
tuxic 0:5c9e0971532d 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
tuxic 0:5c9e0971532d 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
tuxic 0:5c9e0971532d 23 * GNU General Public License for more details.
tuxic 0:5c9e0971532d 24 *
tuxic 0:5c9e0971532d 25 * You should have received a copy of the GNU General Public License
tuxic 0:5c9e0971532d 26 * along with LaOS. If not, see <http://www.gnu.org/licenses/>.
tuxic 0:5c9e0971532d 27 */
tuxic 0:5c9e0971532d 28 #include "mbed.h"
tuxic 0:5c9e0971532d 29 #include "SDFileSystem.h"
tuxic 0:5c9e0971532d 30 #include "TFTPServer.h"
tuxic 0:5c9e0971532d 31 #include "EthernetNetIf.h"
tuxic 0:5c9e0971532d 32 LocalFileSystem local("local"); // defining this makes MBED internal mem accessible
tuxic 0:5c9e0971532d 33
tuxic 0:5c9e0971532d 34 TFTPServer *srv; // define the TFTP Server
tuxic 0:5c9e0971532d 35 Timer t; // used in main() to send debug output every 2 seconds
tuxic 0:5c9e0971532d 36 Serial *serial; // serial just for debugging
tuxic 0:5c9e0971532d 37 SDFileSystem sd(p11, p12, p13, p14, "sd"); // only needed if you save to SD card
tuxic 0:5c9e0971532d 38 EthernetNetIf *eth; // network device
tuxic 0:5c9e0971532d 39
tuxic 0:5c9e0971532d 40 int main() {
tuxic 0:5c9e0971532d 41
tuxic 0:5c9e0971532d 42 // configure serial terminal
tuxic 0:5c9e0971532d 43 serial = new Serial(USBTX, USBRX);
tuxic 0:5c9e0971532d 44 serial->baud(115200);
tuxic 0:5c9e0971532d 45
tuxic 0:5c9e0971532d 46 // set up networking
tuxic 0:5c9e0971532d 47 eth = new EthernetNetIf(
tuxic 0:5c9e0971532d 48 IpAddr(192,168,1,111), //IP Address
tuxic 0:5c9e0971532d 49 IpAddr(255,255,255,0), //Network Mask
tuxic 0:5c9e0971532d 50 IpAddr(192,168,1,1), //Gateway
tuxic 0:5c9e0971532d 51 IpAddr(192,168,1,1) //DNS
tuxic 0:5c9e0971532d 52 );
tuxic 0:5c9e0971532d 53 eth->setup();
tuxic 0:5c9e0971532d 54
tuxic 0:5c9e0971532d 55 // test SD card (TFTP server can work without it)
tuxic 0:5c9e0971532d 56 printf("TEST SD...\n\r");
tuxic 0:5c9e0971532d 57 FILE *fp = fopen("/sd/test.txt", "wb");
tuxic 0:5c9e0971532d 58 if ( fp == NULL )
tuxic 0:5c9e0971532d 59 printf("SD: NOT READY\n\r");
tuxic 0:5c9e0971532d 60 else {
tuxic 0:5c9e0971532d 61 printf("SD: READY...\n\r");
tuxic 0:5c9e0971532d 62 fclose(fp);
tuxic 0:5c9e0971532d 63 }
tuxic 0:5c9e0971532d 64 remove("/sd/test.txt");
tuxic 0:5c9e0971532d 65
tuxic 0:5c9e0971532d 66 // start tftp server with the work dir as a comment
tuxic 0:5c9e0971532d 67 // use "/local/" for the internal mbed device
tuxic 0:5c9e0971532d 68 srv = new TFTPServer("/sd/");
tuxic 0:5c9e0971532d 69
tuxic 0:5c9e0971532d 70 t.start();
tuxic 0:5c9e0971532d 71 int filecounter = 0; // incoming files
tuxic 0:5c9e0971532d 72 char filename[256]; // to display filenames
tuxic 0:5c9e0971532d 73 while (1) {
tuxic 0:5c9e0971532d 74 Net::poll();
tuxic 0:5c9e0971532d 75 if (serial->readable()) {
tuxic 0:5c9e0971532d 76 int c = serial->getc();
tuxic 0:5c9e0971532d 77 switch (c) {
tuxic 0:5c9e0971532d 78 case 's':
tuxic 0:5c9e0971532d 79 srv->suspend();
tuxic 0:5c9e0971532d 80 break;
tuxic 0:5c9e0971532d 81 case 'r':
tuxic 0:5c9e0971532d 82 srv->resume();
tuxic 0:5c9e0971532d 83 break;
tuxic 0:5c9e0971532d 84 }
tuxic 0:5c9e0971532d 85 }
tuxic 0:5c9e0971532d 86
tuxic 0:5c9e0971532d 87 if (srv->fileCnt() > filecounter) {
tuxic 0:5c9e0971532d 88 filecounter = srv->fileCnt();
tuxic 0:5c9e0971532d 89 srv->getFilename(filename);
tuxic 0:5c9e0971532d 90 printf("new file: %s\n\r", filename);
tuxic 0:5c9e0971532d 91 }
tuxic 0:5c9e0971532d 92 if (t.read() > 2) {
tuxic 0:5c9e0971532d 93 t.reset();
tuxic 0:5c9e0971532d 94 TFTPServerState state = srv->State();
tuxic 0:5c9e0971532d 95 switch(state) {
tuxic 0:5c9e0971532d 96 case listen:
tuxic 0:5c9e0971532d 97 printf("MAIN: TFTP listen\n\r");
tuxic 0:5c9e0971532d 98 break;
tuxic 0:5c9e0971532d 99 case reading:
tuxic 0:5c9e0971532d 100 srv->getFilename(filename);
tuxic 0:5c9e0971532d 101 printf("MAIN: TFTP reading file: %s\n\r", filename);
tuxic 0:5c9e0971532d 102 break;
tuxic 0:5c9e0971532d 103 case writing:
tuxic 0:5c9e0971532d 104 srv->getFilename(filename);
tuxic 0:5c9e0971532d 105 printf("MAIN: TFTP writing file: %s\n\r", filename);
tuxic 0:5c9e0971532d 106 break;
tuxic 0:5c9e0971532d 107 case error:
tuxic 0:5c9e0971532d 108 printf("MAIN: TFTP error\n\r");
tuxic 0:5c9e0971532d 109 break;
tuxic 0:5c9e0971532d 110 case suspended:
tuxic 0:5c9e0971532d 111 printf("MAIN: TFTP suspended\n\r");
tuxic 0:5c9e0971532d 112 break;
tuxic 0:5c9e0971532d 113 default:
tuxic 0:5c9e0971532d 114 printf("MAIN: Unknown TFTP status\n\r");
tuxic 0:5c9e0971532d 115 break;
tuxic 0:5c9e0971532d 116 }
tuxic 0:5c9e0971532d 117 }
tuxic 0:5c9e0971532d 118 }
tuxic 0:5c9e0971532d 119 }
tuxic 0:5c9e0971532d 120