Unit uWzTINA; {$WG-} {$PCU} {$W- Warnings} ||| Wiznet W5100 IP-Stack Core Driver with OIS ||| 4 independend Socket Version ||| Version : 1.00.0 Beta ||| Date : 01.10.2010 ||| Copyright : (C)2003-2010 E-LAB Computers Germany ||| Udo Purwin / Thorsten Rohlfing {* SPI Speed 8-Bit 2-Bit on Mega128 16MHz UDP Loop-Back 30kB/s 270kB/s TCP Loop-Back UDP * 42kB/s on xMega 32MHz , 8MHz SPI *} interface // global part {$IDATA} {--------------------------------------------------------------} { Const Declarations } Const wzTINAVer : Byte = 100; //StructConst // xUDPAkn : Word = $A55A; {--------------------------------------------------------------} { Type Declarations } type TwzStatus = (wzsNoErrors, wzsInvalidHandle, wzsInitFailed, wzsNotInitialized, wzsSockClosed, wzsBufferParam, wzsSendFailed, wzsTimeOutErr, wzsListenFailed, wzsSockConnected, wzsSockListen, wzsSockCloseWait, wzsSockClosing, wzsSockUDP, wzsSockRaw, wzsSockMAC, wzSockInit); TwzPacketReceive = Record PeerIP : tIPaddr; PeerPort : Word; // Big Endian !! BufferPtr : Pointer; BufferLen : Word; end; // TwzSocketSWS = (NoSillyWindow, SillyWindow); // not use TwzSocketNDAck = (NoDelayedAck, DelayedAck); // TwzNDTimeOut = (NoDynamicTimeOut, DynamicTimeOut); TwzBroadcast = (NoBroadcast, Broadcast); TwzSocketProtocol = (CLOSED, protTCP, protUDP, protxUDP, protIPRAW, protMACRAW); TwzxUDPAKNPort = (xAKNLocalPort, xAKNRemotePort); TwzSocket = Record Protocol : TwzSocketProtocol; DelayAck : TwzSocketNDAck; // DynTimeOut :TwzNDTimeOut; // not use Broadcast : TwzBroadcast; LocalPort : Word; RemoteHost : tIPaddr; RemotePort : Word; TimeOut : LongWord; RetryCount : Byte; AKNPort : TwzxUDPAKNPort; IPProtocol : Byte; TypeOfService : Byte; // 1460 MaxSegSize : Word; Multicasting : Boolean; // New PeerTryToDisconnect: Boolean; SocketClosed : Boolean; PacketRecInfo : TwzPacketReceive; ErrorState : TwzStatus; SocketState : Byte; end; tSocketHandle = Pointer to TwzSocket; TTinaPriority = (TinaPrioMedium, TinaPrioLow, TinaPrioHigh, TinaPrioVeryHigh, TinaPrioVeryLow, TinaPrioAuto, TinaPrioSuspend, TinaPrioResume); TwzMainInit = Record Gateway : tIPaddr; SubnetMask : tIPaddr; HWAddress : TMacAddr; IPAddress : tIPaddr; TimeOut : Word; RetryCount : Byte; ResponsePing : Boolean; Prio : TTinaPriority; end; {--------------------------------------------------------------} { Var Declarations } {$IDATA} Var // TINA_SPIInUse : Boolean; wzTimer : SysTimer; wzInitOk : Boolean; wzChipmainInit : TwzMainInit; {--------------------------------------------------------------} { functions } // Init des W5100 Function wzTINA_Init : Boolean; Procedure wzTINA_Start; Procedure wzTINA_Stop; Procedure wzTINASetPriority(prio : TTinaPriority); Procedure wzSetIPAddr(IPAddr, Mask : tIPaddr); procedure wzSetHWAddr(MacAddr : TMacAddr); Procedure wzSetGatewayAddr(IPAddr : tIPaddr); Procedure wzSetRetryCount(Retry : Byte); Procedure wzSetTimeOut(RetryTimeout : Word); Procedure wzReset; //Schnittstelle zum Hauptprogramm / Sockets Function wzCreateSocket : tSocketHandle; Procedure wzFreeSocket(SocketPtr : tSocketHandle); Function wzConnect(SocketPtr : tSocketHandle) : Boolean; Function wzDisConnect(SocketPtr : tSocketHandle) : boolean; Function wzListen(SocketPtr : tSocketHandle) : Boolean; Function wzInitSocket(SocketPtr : tSocketHandle) : Boolean; //Procedure InitSocket(Sock : TTinaSocketNum; CompleteInit : Boolean); Function wzReInitSocket(SocketPtr : tSocketHandle) : Boolean; Function wzSendBuffer(SocketPtr : tSocketHandle; Buffer : Pointer; Len : Word) : Boolean; Function wzReceiveBuffer(SocketPtr : tSocketHandle) : Word; Function wzClientConnected(SocketPtr : tSocketHandle) : Boolean; Function wzAcceptConnection(SocketPtr : tSocketHandle; YesNo : Boolean) : Boolean; Function wzResumeReceive(SocketPtr : tSocketHandle) : Boolean; Function wzPacketReceived(SocketPtr : tSocketHandle) : Boolean; Function wzGetLastError(SocketPtr : tSocketHandle) : TwzStatus; Function wzGetSocketState(SocketPtr : tSocketHandle) : TwzStatus; // zum testen - später loeschen Procedure wzGetIPAddress( IP : Pointer to TIpAddr); Procedure wzGetGWAddress( IP : Pointer to TIpAddr); Procedure wzGetMACAddress( MAC : Pointer to TMACAddr); Procedure wzJobHandler; implementation