OpenCores
URL https://opencores.org/ocsvn/mlite/mlite/trunk

Subversion Repositories mlite

[/] [mlite/] [trunk/] [kernel/] [tcpip.c] - Diff between revs 160 and 165

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 160 Rev 165
Line 47... Line 47...
#define UartPacketConfig(A,B,C)
#define UartPacketConfig(A,B,C)
#define UartPacketSend(A,B)
#define UartPacketSend(A,B)
#define UartPrintf printf
#define UartPrintf printf
#define UartPrintfCritical printf
#define UartPrintfCritical printf
#define Led(A)
#define Led(A)
 
#else 
 
#undef printf
 
#define printf UartPrintfPoll
 
//#define printf UartPrintfNull
#endif
#endif
 
 
//ETHER FIELD                 OFFSET   LENGTH   VALUE
//ETHER FIELD                 OFFSET   LENGTH   VALUE
#define ETHERNET_DEST         0        //6
#define ETHERNET_DEST         0        //6
#define ETHERNET_SOURCE       6        //6
#define ETHERNET_SOURCE       6        //6
Line 487... Line 491...
   packet[TCP_ACK+2] = (uint8)(socket->ack >> 8);
   packet[TCP_ACK+2] = (uint8)(socket->ack >> 8);
   packet[TCP_ACK+3] = (uint8)socket->ack;
   packet[TCP_ACK+3] = (uint8)socket->ack;
   count = FrameFreeCount - FRAME_COUNT_WINDOW;
   count = FrameFreeCount - FRAME_COUNT_WINDOW;
   if(count < 1)
   if(count < 1)
      count = 1;
      count = 1;
 
   if(count > 4)
 
      count = 4;
   count *= 512;
   count *= 512;
   packet[TCP_WINDOW_SIZE] = (uint8)(count >> 8);
   packet[TCP_WINDOW_SIZE] = (uint8)(count >> 8);
   packet[TCP_WINDOW_SIZE+1] = (uint8)count;
   packet[TCP_WINDOW_SIZE+1] = (uint8)count;
   packet[TCP_URGENT_POINTER] = 0;
   packet[TCP_URGENT_POINTER] = 0;
   packet[TCP_URGENT_POINTER+1] = 0;
   packet[TCP_URGENT_POINTER+1] = 0;
Line 820... Line 826...
         {
         {
            frameOut->packet[TCP_FLAGS] = TCP_FLAGS_ACK;
            frameOut->packet[TCP_FLAGS] = TCP_FLAGS_ACK;
            TCPSendPacket(socket, frameOut, TCP_DATA);
            TCPSendPacket(socket, frameOut, TCP_DATA);
         }
         }
 
 
 
         //Determine window
 
         socket->seqWindow = (packet[TCP_WINDOW_SIZE] << 8) | packet[TCP_WINDOW_SIZE+1];
 
         if(socket->seqWindow < 8)
 
            socket->seqWindow = 8;
 
 
         //Notify application
         //Notify application
         if(socket->funcPtr)
         if(socket->funcPtr)
            socket->funcPtr(socket);
            socket->funcPtr(socket);
         //Using frame
         //Using frame
         return 1;
         return 1;
Line 1205... Line 1216...
 
 
uint32 IPWrite(IPSocket *Socket, const uint8 *Buf, uint32 Length)
uint32 IPWrite(IPSocket *Socket, const uint8 *Buf, uint32 Length)
{
{
   IPFrame *frameOut;
   IPFrame *frameOut;
   uint8 *packetOut;
   uint8 *packetOut;
   uint32 bytes, count=0;
   uint32 bytes, count=0, tries;
   int offset;
   int offset;
 
   OS_Thread_t *self;
 
 
   //printf("IPWrite(0x%x, %d)", Socket, Length);
   //printf("IPWrite(0x%x, %d)", Socket, Length);
 
   self = OS_ThreadSelf();
   while(Length)
   while(Length)
   {
   {
      if(Socket->frameSend == NULL)
      tries = 0;
 
      while(Socket->frameSend == NULL)
      {
      {
         Socket->frameSend = IPFrameGet(FRAME_COUNT_SEND);
         Socket->frameSend = IPFrameGet(FRAME_COUNT_SEND);
         Socket->sendOffset = 0;
         Socket->sendOffset = 0;
 
         if(Socket->frameSend == NULL)
 
         {
 
            if(self == IPThread || ++tries > 200)
 
               break;
 
            else
 
               OS_ThreadSleep(1);
 
         }
      }
      }
      frameOut = Socket->frameSend;
      frameOut = Socket->frameSend;
      offset = Socket->sendOffset;
      offset = Socket->sendOffset;
      if(frameOut == NULL)
      if(frameOut == NULL)
         break;
         break;
Line 1231... Line 1252...
      if(Socket->state != IP_UDP)
      if(Socket->state != IP_UDP)
      {
      {
         memcpy(packetOut+TCP_DATA+offset, Buf, bytes);
         memcpy(packetOut+TCP_DATA+offset, Buf, bytes);
         if(Socket->sendOffset >= 512)
         if(Socket->sendOffset >= 512)
            IPWriteFlush(Socket);
            IPWriteFlush(Socket);
 
         //if(Socket->seq - Socket->seqReceived > Socket->seqWindow)
 
         //{
 
         //   printf("W");
 
         //   OS_ThreadSleep(10);
 
         //}
      }
      }
      else  //UDP
      else  //UDP
      {
      {
         memcpy(packetOut+UDP_DATA+offset, Buf, bytes);
         memcpy(packetOut+UDP_DATA+offset, Buf, bytes);
         memcpy(packetOut, Socket->headerSend, UDP_LENGTH);
         memcpy(packetOut, Socket->headerSend, UDP_LENGTH);
Line 1247... Line 1273...
   }
   }
   return count;
   return count;
}
}
 
 
 
 
void IPWritePend(IPSocket *Socket, uint8 *Buf, uint32 Length)
 
{
 
   int bytes;
 
   OS_Thread_t *self;
 
 
 
   self = OS_ThreadSelf();
 
   assert(self != IPThread);
 
   while(Length)
 
   {
 
      bytes = IPWrite(Socket, Buf, Length);
 
      Buf += bytes;
 
      Length -= bytes;
 
      if(Length)
 
         OS_ThreadSleep(1);
 
   }
 
}
 
 
 
 
 
uint32 IPRead(IPSocket *Socket, uint8 *Buf, uint32 Length)
uint32 IPRead(IPSocket *Socket, uint8 *Buf, uint32 Length)
{
{
   IPFrame *frame, *frame2;
   IPFrame *frame, *frame2;
   int count=0, bytes, offset;
   int count=0, bytes, offset;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.