These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!
EMAC/Easy_Web/easyweb.c
- Committer:
- frank26080115
- Date:
- 2011-03-20
- Revision:
- 0:bf7b9fba3924
File content as of revision 0:bf7b9fba3924:
/****************************************************************** ***** ***** ***** Name: easyweb.c ***** ***** Ver.: 1.0 ***** ***** Date: 07/05/2001 ***** ***** Auth: Andreas Dannenberg ***** ***** HTWK Leipzig ***** ***** university of applied sciences ***** ***** Germany ***** ***** Func: implements a dynamic HTTP-server by using ***** ***** the easyWEB-API ***** ***** ***** ******************************************************************/ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "adc.h" #include "lpc17xx_libcfg.h" #include "EMAC.h" // Keil: *.c -> *.h // ethernet packet driver #define extern // Keil: Line added for modular project management #include "easyweb.h" #include "tcpip.h" // Keil: *.c -> *.h // easyWEB TCP/IP stack #include "webpage.h" // webside for our HTTP server (HTML) /* Example group ----------------------------------------------------------- */ /** @defgroup EMAC_Easy_Web Easy_Web * @ingroup EMAC_Examples * @{ */ // NXP: Include some header files that differs from the origin int main(void) { TCPLowLevelInit(); HTTPStatus = 0; // clear HTTP-server's flag register TCPLocalPort = TCP_PORT_HTTP; // set port we want to listen to while (1) // repeat forever { if (!(SocketStatus & SOCK_ACTIVE)) TCPPassiveOpen(); // listen for incoming TCP-connection DoNetworkStuff(); // handle network and easyWEB-stack // events HTTPServer(); } } // This function implements a very simple dynamic HTTP-server. // It waits until connected, then sends a HTTP-header and the // HTML-code stored in memory. Before sending, it replaces // some special strings with dynamic values. // NOTE: For strings crossing page boundaries, replacing will // not work. In this case, simply add some extra lines // (e.g. CR and LFs) to the HTML-code. void HTTPServer(void) { if (SocketStatus & SOCK_CONNECTED) // check if somebody has connected to our TCP { if (SocketStatus & SOCK_DATA_AVAILABLE) // check if remote TCP sent data TCPReleaseRxBuffer(); // and throw it away if (SocketStatus & SOCK_TX_BUF_RELEASED) // check if buffer is free for TX { if (!(HTTPStatus & HTTP_SEND_PAGE)) // init byte-counter and pointer to webside { // if called the 1st time HTTPBytesToSend = sizeof(WebSide) - 1; // get HTML length, ignore trailing zero PWebSide = (unsigned char *)WebSide; // pointer to HTML-code } if (HTTPBytesToSend > MAX_TCP_TX_DATA_SIZE) // transmit a segment of MAX_SIZE { if (!(HTTPStatus & HTTP_SEND_PAGE)) // 1st time, include HTTP-header { memcpy(TCP_TX_BUF, GetResponse, sizeof(GetResponse) - 1); memcpy(TCP_TX_BUF + sizeof(GetResponse) - 1, PWebSide, MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1); HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1; PWebSide += MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1; } else { memcpy(TCP_TX_BUF, PWebSide, MAX_TCP_TX_DATA_SIZE); HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE; PWebSide += MAX_TCP_TX_DATA_SIZE; } TCPTxDataCount = MAX_TCP_TX_DATA_SIZE; // bytes to xfer InsertDynamicValues(); // exchange some strings... TCPTransmitTxBuffer(); // xfer buffer } else if (HTTPBytesToSend) // transmit leftover bytes { memcpy(TCP_TX_BUF, PWebSide, HTTPBytesToSend); TCPTxDataCount = HTTPBytesToSend; // bytes to xfer InsertDynamicValues(); // exchange some strings... TCPTransmitTxBuffer(); // send last segment TCPClose(); // and close connection HTTPBytesToSend = 0; // all data sent } HTTPStatus |= HTTP_SEND_PAGE; // ok, 1st loop executed } } else HTTPStatus &= ~HTTP_SEND_PAGE; // reset help-flag if not connected } // samples and returns the AD-converter value of channel 2 (MCB1700 board) or channel 5 (IAR board) unsigned int GetAD7Val(void) { unsigned int val; ADC_startCnv(); val = ADC_getCnv(); ADC_stopCnv(); return (val/40); } // samples and returns AD-converter value of channel 1 unsigned int GetTempVal(void) { // Always return (0) return (0); } // searches the TX-buffer for special strings and replaces them // with dynamic values (AD-converter results) void InsertDynamicValues(void) { unsigned char *Key; char NewKey[5]; unsigned int i; if (TCPTxDataCount < 4) return; // there can't be any special string Key = TCP_TX_BUF; for (i = 0; i < (TCPTxDataCount - 3); i++) { if (*Key == 'A') if (*(Key + 1) == 'D') if (*(Key + 3) == '%') switch (*(Key + 2)) { case '7' : // "AD7%"? { sprintf(NewKey, "%3u", GetAD7Val()); // insert AD converter value memcpy(Key, NewKey, 3); // channel 7 (P6.7) break; } case 'A' : // "ADA%"? { sprintf(NewKey, "%3u", GetTempVal()); // insert AD converter value memcpy(Key, NewKey, 3); // channel 10 (temp.-diode) break; } } Key++; } } #ifdef DEBUG /******************************************************************************* * @brief Reports the name of the source file and the source line number * where the CHECK_PARAM error has occurred. * @param[in] file Pointer to the source file name * @param[in] line assert_param error line source number * @return None *******************************************************************************/ void check_failed(uint8_t *file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while(1); } #endif /* * @} */