?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 32

?prevdifflink? - Blame - ?getfile?

/*********************************************************************
 *
 *      UDP Performance Test
 *  Module for Microchip TCP/IP Stack
 *       -Sends out dummy packets from ROM memory
 *       -Reference: None.  This is for testing only.
 *
 *********************************************************************
 * FileName:        UDPPerformanceTest.c
 * Dependencies:    UDP, Ethernet (ENC28J60.c or ETH97J60.c)
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F, PIC32
 * Compiler:        Microchip C32 v1.05 or higher
 *                                      Microchip C30 v3.12 or higher
 *                                      Microchip C18 v3.30 or higher
 *                                      HI-TECH PICC-18 PRO 9.63PL2 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * Copyright (C) 2002-2009 Microchip Technology Inc.  All rights
 * reserved.
 *
 * Microchip licenses to you the right to use, modify, copy, and
 * distribute:
 * (i)  the Software when embedded on a Microchip microcontroller or
 *      digital signal controller product ("Device") which is
 *      integrated into Licensee's product; or
 * (ii) ONLY the Software driver source files ENC28J60.c, ENC28J60.h,
 *              ENCX24J600.c and ENCX24J600.h ported to a non-Microchip device
 *              used in conjunction with a Microchip ethernet controller for
 *              the sole purpose of interfacing with the ethernet controller.
 *
 * You should refer to the license agreement accompanying this
 * Software for additional information regarding your rights and
 * obligations.
 *
 * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT
 * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
 * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL
 * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF
 * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
 * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE
 * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER
 * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT
 * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE.
 *
 *
 * Author               Date            Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Howard Schlunder     01/29/07        Original
 ********************************************************************/
#define __UDPPERFORMANCETEST_C

#include "TCPIPConfig.h"

#if defined(STACK_USE_UDP_PERFORMANCE_TEST)

#include "TCPIP Stack/TCPIP.h"


// Which UDP port to broadcast from for the UDP tests
#define PERFORMANCE_PORT        9


/*****************************************************************************
  Function:
        void UDPPerformanceTask(void)

  Summary:
        Tests the transmit performance of the UDP module.

  Description:
        This function tests the transmit performance of the UDP module.  At boot,
        this module will transmit 1024 large UDP broadcast packets of 1024 bytes
        each.  Using a packet sniffer, one can determine how long this process 
        takes and calculate the transmit rate of the stack.  This function tests 
        true UDP performance in that it will open a socket, transmit one packet, 
        and close the socket for each loop.  After this initial transmission, the
        module can be re-enabled by holding button 3.
        
        This function is particularly useful after development to determine the
        impact of your application code on the stack's performance.  A before and
        after comparison will indicate if your application is unacceptably
        blocking the processor or taking too long to execute.

  Precondition:
        UDP is initialized.

  Parameters:
        None

  Returns:
        None
  ***************************************************************************/
void UDPPerformanceTask(void)
{
        UDP_SOCKET      MySocket;
        NODE_INFO       Remote;
        WORD            wTemp;
        static DWORD dwCounter = 1;

        if((BUTTON3_IO) && (dwCounter > 1024u))
                return;

        // Suppress transmissions if we don't have an Ethernet link so our counter starts correctly at 0x00000001
        if(!MACIsLinked())
                return;
        
        #if defined(STACK_USE_DHCP_CLIENT) && defined(DELAY_UDP_PERFORMANCE_TEST)
        {
                static DWORD dwTimer = 0;
                
                // Wait until DHCP module is finished
                if(!DHCPIsBound(0))
                {
                        dwTimer = TickGet();
                        return;
                }

                // Wait an additional half second after DHCP is finished to let the announce module and any other stack state machines to reach normal operation
                if(TickGet() - dwTimer < TICK_SECOND/2)
                        return;
        }
        #endif

        // Set the socket's destination to be a broadcast over our IP 
        // subnet
        // Set the MAC destination to be a broadcast
        memset(&Remote, 0xFF, sizeof(Remote));
        
        // Open a UDP socket for outbound transmission
        MySocket = UDPOpen(0, &Remote, PERFORMANCE_PORT);
        
        // Abort operation if no UDP sockets are available
        // If this ever happens, incrementing MAX_UDP_SOCKETS in 
        // StackTsk.h may help (at the expense of more global memory 
        // resources).
        if(MySocket == INVALID_UDP_SOCKET)
                return;
        
        // Make certain the socket can be written to
        if(!UDPIsPutReady(MySocket))
        {
                UDPClose(MySocket);
                return;
        }
        
        // Put counter value into first 4 bytes of the packet
        UDPPutArray((BYTE*)&dwCounter, sizeof(dwCounter));
        dwCounter++;
        
        wTemp = UDPPutROMArray((ROM BYTE*)
                        "The quick brown fox tried to jump over the yellow dog.  Unfortunately, the yellow dog stood up while the fox was in mid-jump.  As a result, the two collided.  Then, the dog, being the omnivore that it is, ate the quick brown fox.  This line is 256 bytes.\r\n"
                        "The quick brown fox tried to jump over the yellow dog.  Unfortunately, the yellow dog stood up while the fox was in mid-jump.  As a result, the two collided.  Then, the dog, being the omnivore that it is, ate the quick brown fox.  This line is 256 bytes.\r\n"
                        "The quick brown fox tried to jump over the yellow dog.  Unfortunately, the yellow dog stood up while the fox was in mid-jump.  As a result, the two collided.  Then, the dog, being the omnivore that it is, ate the quick brown fox.  This line is 256 bytes.\r\n"
                        "The quick brown fox tried to jump over the yellow dog.  Unfortunately, the yellow dog stood up while the fox was in mid-jump.  As a result, the two collided.  Then, the dog, being the omnivore that it is, ate the quick brown fox.  This line is 252b. \r\n", 1020);

        // Send the packet
        UDPFlush();
        
        // Close the socket so it can be used by other modules
        UDPClose(MySocket);
}

#endif //#if defined(STACK_USE_UDP_PERFORMANCE_TEST)
{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3