From c3e4c9a25c2910d2d66d52215b3406b13d5b23d5 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Sun, 29 Jun 2014 12:34:32 +0300 Subject: Add more board models --- boards/dk-tm4c129x/enet_io/io_fs.c | 316 +++++++++++++++++++++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 boards/dk-tm4c129x/enet_io/io_fs.c (limited to 'boards/dk-tm4c129x/enet_io/io_fs.c') diff --git a/boards/dk-tm4c129x/enet_io/io_fs.c b/boards/dk-tm4c129x/enet_io/io_fs.c new file mode 100644 index 0000000..7472793 --- /dev/null +++ b/boards/dk-tm4c129x/enet_io/io_fs.c @@ -0,0 +1,316 @@ +//***************************************************************************** +// +// io_fs.c - File System Processing for enet_io application. +// +// Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package. +// +//***************************************************************************** +#include +#include +#include +#include "inc/hw_types.h" +#include "inc/hw_memmap.h" +#include "driverlib/rom.h" +#include "driverlib/ssi.h" +#include "utils/lwiplib.h" +#include "utils/ustdlib.h" +#include "httpserver_raw/httpd.h" +#include "httpserver_raw/fs.h" +#include "httpserver_raw/fsdata.h" +#include "io.h" + +//***************************************************************************** +// +// Include the web file system data for this application. This file is +// generated by the makefsfile utility, using the following command: +// +// ../../../../tools/bin/makefsfile -i fs -o io_fsdata.h -r -h -q +// +// If any changes are made to the static content of the web pages served by the +// application, this script must be used to regenerate io_fsdata.h in order +// for those changes to be picked up by the web server. +// +//***************************************************************************** +#include "io_fsdata.h" + +//***************************************************************************** +// +// Open a file and return a handle to the file, if found. Otherwise, +// return NULL. This function also looks for special file names used to +// provide specific status information or to control various subsystems. +// These file names are used by the JavaScript on the "IO Control Demo 1" +// example web page. +// +//***************************************************************************** +struct fs_file * +fs_open(const char *pcName) +{ + const struct fsdata_file *psTree; + struct fs_file *psFile = NULL; + + // + // Allocate memory for the file system structure. + // + psFile = mem_malloc(sizeof(struct fs_file)); + if(psFile == NULL) + { + return(NULL); + } + + // + // Process request to toggle STATUS LED + // + if(ustrncmp(pcName, "/cgi-bin/toggle_led", 19) == 0) + { + static char pcBuf[4]; + + // + // Toggle the STATUS LED + // + io_set_led(!io_is_led_on()); + + // + // Get the new state of the LED + // + io_get_ledstate(pcBuf, 4); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + + // + // Return the psFile system pointer. + // + return(psFile); + } + + // + // Request for LED State? + // + else if(ustrncmp(pcName, "/ledstate", 9) == 0) + { + static char pcBuf[4]; + + // + // Get the state of the LED + // + io_get_ledstate(pcBuf, 4); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // Request for the animation speed? + // + else if(ustrncmp(pcName, "/get_speed", 10) == 0) + { + static char pcBuf[6]; + + // + // Get the current animation speed as a string. + // + io_get_animation_speed_string(pcBuf, 6); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // Set the animation speed? + // + else if(ustrncmp(pcName, "/cgi-bin/set_speed?percent=", 12) == 0) + { + static char pcBuf[6]; + + // + // Extract the parameter and set the actual speed requested. + // + io_set_animation_speed_string((char*)pcName + 27); + + // + // Get the current speed setting as a string to send back. + // + io_get_animation_speed_string(pcBuf, 6); + + psFile->data = pcBuf; + psFile->len = strlen(pcBuf); + psFile->index = psFile->len; + psFile->pextension = NULL; + return(psFile); + } + // + // If I can't find it there, look in the rest of the main psFile system + // + else + { + // + // Initialize the psFile system tree pointer to the root of the linked list. + // + psTree = FS_ROOT; + + // + // Begin processing the linked list, looking for the requested file name. + // + while(NULL != psTree) + { + // + // Compare the requested file "pcName" to the file name in the + // current node. + // + if(ustrncmp(pcName, (char *)psTree->name, psTree->len) == 0) + { + // + // Fill in the data pointer and length values from the + // linked list node. + // + psFile->data = (char *)psTree->data; + psFile->len = psTree->len; + + // + // For now, we setup the read index to the end of the file, + // indicating that all data has been read. + // + psFile->index = psTree->len; + + // + // We are not using any file system extensions in this + // application, so set the pointer to NULL. + // + psFile->pextension = NULL; + + // + // Exit the loop and return the file system pointer. + // + break; + } + + // + // If we get here, we did not find the file at this node of the linked + // list. Get the next element in the list. + // + psTree = psTree->next; + } + } + + // + // If we didn't find the file, ptTee will be NULL. Make sure we + // return a NULL pointer if this happens. + // + if(NULL == psTree) + { + mem_free(psFile); + psFile = NULL; + } + + // + // Return the file system pointer. + // + return(psFile); +} + +//***************************************************************************** +// +// Close an opened file designated by the handle. +// +//***************************************************************************** +void +fs_close(struct fs_file *psFile) +{ + // + // Free the main psFile system object. + // + mem_free(psFile); +} + +//***************************************************************************** +// +// Read the next chunk of data from the file. Return the iCount of data +// that was read. Return 0 if no data is currently available. Return +// a -1 if at the end of file. +// +//***************************************************************************** +int +fs_read(struct fs_file *psFile, char *pcBuffer, int iCount) +{ + int iAvailable; + + // + // Check to see if a command (pextension = 1). + // + if(psFile->pextension == (void *)1) + { + // + // Nothing to do for this file type. + // + psFile->pextension = NULL; + return(-1); + } + + // + // Check to see if more data is available. + // + if(psFile->len == psFile->index) + { + // + // There is no remaining data. Return a -1 for EOF indication. + // + return(-1); + } + + // + // Determine how much data we can copy. The minimum of the 'iCount' + // parameter or the available data in the file system buffer. + // + iAvailable = psFile->len - psFile->index; + if(iAvailable > iCount) + { + iAvailable = iCount; + } + + // + // Copy the data. + // + memcpy(pcBuffer, psFile->data + iAvailable, iAvailable); + psFile->index += iAvailable; + + // + // Return the count of data that we copied. + // + return(iAvailable); +} + +//***************************************************************************** +// +// Determine the number of bytes left to read from the file. +// +//***************************************************************************** +int +fs_bytes_left(struct fs_file *psFile) +{ + // + // Return the number of bytes left to be read from this file. + // + return(psFile->len - psFile->index); +} -- cgit v1.3.1