--- trunk/PIC/Demo trimmet/TFTPcDemo.c 2007/05/16 15:46:08 93 +++ trunk/PIC/Demo trimmet/TFTPcDemo.c 2007/05/22 06:41:06 96 @@ -2,7 +2,6 @@ #include "stacktsk.h" #include "dhcp.h" -#include "xlcd.h" #include "tick.h" #include "delay.h" #include "udp.h" @@ -10,9 +9,10 @@ #include "arptsk.h" #include "tcp.h" +bit bIsDhcpUp = 0; // All TFTP command statuts display will be done on first line of LCD. -#define TFTP_COMMAND_DISPLAY_LINE 0 +//#define TFTP_COMMAND_DISPLAY_LINE 0 // Result will be displayed at y = 15. #define TFTP_COMMAND_RESULT_POSITION 15 @@ -29,7 +29,7 @@ ROM char SetupMsg[] = "Board Setup..."; // 1234567890123456 -ROM char blankLCDLine[] = " "; +//ROM char blankLCDLine[] = " "; /* * This is used by other stack elements. @@ -66,23 +66,114 @@ */ static void InitAppConfig(void); static void InitializeBoard(void); -static void DisplayIPValue(IP_ADDR *IPVal, BOOL bToLCD); static void SetConfig(void); -/*void network_send_hello( unsigned char termid ) +/***************************** + Enummerations + ****************************/ +typedef enum _NetworkState +{ + off, + DhcpIsBound, + ArpIsTxReady, + ArpIsResolved, + SockOpening, + SockOpen, + TcpReadyToSend, + TcpSend, + SockClosing, + SockClosed +} NetworkState; + +/***************************** + GLOBAL INIT + ****************************/ +NODE_INFO rnode; +NetworkState state; +TCP_SOCKET tsock1; + + +/***************************** + network funktions + ****************************/ +int net_INT = 13, i; +char *net_CHAR = "1234567890123"; + + +void network_init(void) +{ + state = off; +} +char network_send_hello( unsigned char termid ) +{ +char error = 0; +char gotArp = 0; +static char isBound = 0; + +if ( DHCPIsBound() && isBound == 0 ){ + state = DhcpIsBound; + isBound = 1; +} + + switch (state) + { + case DhcpIsBound: + if ( ARPIsTxReady() && gotArp == 0 ) + state = ArpIsTxReady; + else + state = ArpIsResolved; + return 0; + + case ArpIsTxReady: + ARPResolve(&rnode.IPAddr); + gotArp = 1; + state = ArpIsResolved; + return 0; + + case ArpIsResolved: + if (ARPIsResolved(&rnode.IPAddr, &rnode.MACAddr) ){ + state = SockOpening; + return 0; + } + else{ + state = ArpIsResolved; + return 2; // no arp resolved + } + + case SockOpening: + tsock1 = TCPConnect (&rnode, 3000); + state = SockOpen; + return 0; + + case SockOpen: + if ( TCPIsConnected(tsock1) && TCPIsPutReady(tsock1) ) + state = TcpSend; + return 0; + + case TcpSend: + for (i = net_INT; i >= 0; i--) + { + TCPPut(tsock1, termid ); + } + TCPFlush(tsock1); + state = TcpReadyToSend; + return 0; + } + return 1; +} +/* +void network_send_hello( unsigned char termid ) { if (DHCPIsBound()) { - RA3 =0; + RA3 = 0; if (sock_open == 0) { if (ARPIsTxReady()) { - if (is_resolved == 0) - { - ARPResolve( &rnode.IPAddr); - is_resolved = 1; - } + ARPResolve( &rnode.IPAddr); + is_resolved = 1; + } else { if (ARPIsResolved( &rnode.IPAddr, &rnode.MACAddr)) @@ -114,23 +205,15 @@ } */ -void WriteTcpStatus(char status) -{ - XLCDGoto(0,0); - status += 'a'; - XLCDPut(status); - -} - void main(void) { // Tick to blink SYSTEM led. static TICK t = 0; TCP_SOCKET usock1; - NODE_INFO rnode; char sock_state = 0; char is_resolved = 0; char has_arp = 0; + char a; TICK tick; TICK lastTick; @@ -154,24 +237,9 @@ InitAppConfig(); StackInit(); + + network_init(); -#if defined(STACK_USE_DHCP) || defined(STACK_USE_IP_GLEANING) - if ( AppConfig.Flags.bIsDHCPEnabled ) - { - XLCDGoto(1, 0); - XLCDPutROMString(DHCPMsg); - } - else - { - /* - * Force IP address display update. - */ - myDHCPBindCount = 1; -#if defined(STACK_USE_DHCP) - DHCPDisable(); -#endif - } -#endif /* @@ -193,16 +261,7 @@ rnode.IPAddr.v[1] = 168; rnode.IPAddr.v[2] = 1; rnode.IPAddr.v[3] = 20; - /*rnode.MACAddr.v[0] = 0x00; - rnode.MACAddr.v[1] = 0x16; - rnode.MACAddr.v[2] = 0x76; - rnode.MACAddr.v[3] = 0x9F; - rnode.MACAddr.v[4] = 0xFE; - rnode.MACAddr.v[5] = 0xDA;*/ - - - while(1) { /* @@ -225,25 +284,9 @@ * For DHCP information, display how many times we have renewed the IP * configuration since last reset. */ - - if ( DHCPBindCount != myDHCPBindCount ) - { - DisplayIPValue(&AppConfig.MyIPAddr, TRUE); - myDHCPBindCount = DHCPBindCount; - if ( AppConfig.Flags.bIsDHCPEnabled ) - { - XLCDGoto(1, 14); - if ( myDHCPBindCount < 0x0a ) - XLCDPut(myDHCPBindCount + '0'); - else - XLCDPut(myDHCPBindCount + 'A'); - } - } - - WriteTcpStatus( TCB[usock1].smState ); - - if (DHCPIsBound()) + a = network_send_hello( 1 ); + /* if (DHCPIsBound()) { RA3 =0; if (has_arp == 0) @@ -273,7 +316,7 @@ usock1=TCPConnect(&rnode,3000); sock_state = 1; } - if (sock_state ==1 && TCPIsConnected(usock1) && TCPIsPutReady(usock1)) + /* if (sock_state ==1 && TCPIsConnected(usock1) && TCPIsPutReady(usock1)) { TCPPut(usock1,'D'); TCPPut(usock1,'a'); @@ -296,7 +339,7 @@ sock_state = 0; } - } + } */ } } @@ -327,51 +370,6 @@ #pragma code /* return to default code section */ #endif -static void DisplayIPValue(IP_ADDR *IPVal, BOOL bToLCD) -{ - char IPDigit[8]; - - if ( bToLCD ) - { - /* - * Erase second line. - */ - XLCDGoto(1, 0); - XLCDPutROMString(blankLCDLine); - - } - - /* - * Rewrite the second line. - */ - XLCDGoto(1, 0); - - itoa(IPVal->v[0], IPDigit); - if ( bToLCD ) - { - XLCDPutString(IPDigit); - XLCDPut('.'); - } - - itoa(IPVal->v[1], IPDigit); - if ( bToLCD ) - { - XLCDPutString(IPDigit); - XLCDPut('.'); - } - - itoa(IPVal->v[2], IPDigit); - if ( bToLCD ) - { - XLCDPutString(IPDigit); - XLCDPut('.'); - } - - itoa(IPVal->v[3], IPDigit); - if ( bToLCD ) - XLCDPutString(IPDigit); -} - /********************************************************************* * Function: void InitializeBoard(void) * @@ -399,7 +397,7 @@ /* * LCD is enabled using RA5. */ - PORTA_RA5 = 0; // Disable LCD. +// PORTA_RA5 = 0; // Disable LCD. /* * Turn off the LED's. @@ -413,10 +411,6 @@ */ INTCON2_RBPU = 0; - XLCDInit(); - XLCDGoto(0, 0); - XLCDPutROMString(StartupMsg); - T0CON = 0; INTCON_GIEH = 1; INTCON_GIEL = 1; @@ -500,21 +494,3 @@ return (byteIndex == 3); } - -void XLCDDelay15ms(void) -{ - DelayMs(15); -} -void XLCDDelay4ms(void) -{ - DelayMs(4); -} - -void XLCDDelay100us(void) -{ - INTCON_GIEH = 0; - Delay10us(1); - INTCON_GIEH = 1; -} - -