--- trunk/PIC/Demo trimmet/TFTPcDemo.c 2007/05/25 16:00:14 102 +++ trunk/PIC/Demo trimmet/TFTPcDemo.c 2007/05/27 16:32:30 105 @@ -9,6 +9,8 @@ #include "arptsk.h" #include "tcp.h" +#include + bit bIsDhcpUp = 0; char netlevel = 0; @@ -83,7 +85,15 @@ TcpReadyToSend, TcpSend, HelloDone, - StregkodeDone, + StregkodeSendDone, + ReadyToRecieve, + StregkodeRecieveDone, + TotalRequested, + TotalRequestedDone, + ChangeRequested, + ChangeRequestedDone, + Acknowledged, + CancelDone, SockClosing, SockClosed } NetworkState; @@ -99,8 +109,9 @@ /***************************** network funktions ****************************/ -int net_INT = 13, i; -char *net_CHAR = "1234567890123"; +unsigned long global_network_amount; +unsigned char global_network_char[16]; +unsigned char global_network_charlen; void network_init(void) @@ -115,32 +126,64 @@ StackTask(); } +void network_parse_amount(unsigned char buf[]) +{ + global_network_amount = buf[0]<<24 + buf[1]<<16 + buf[2]<<8 + buf[3]; +} + +void network_read_amount(void) +{ + unsigned char buf[4]; + TCPGetArray(tsock1, buf,4); + network_parse_amount(buf); +} + void network_wait(unsigned char n) { int i; for (i=0; i>24); + TCPPut(tsock1, amount>>16); + TCPPut(tsock1, amount>>8); + TCPPut(tsock1, amount); + TCPFlush(tsock1); + state = ChangeRequested; + break; + } + network_worker(); + } + + while (state != ChangeRequestedDone) + { + if (TCPIsGetReady(tsock1)) + { + TCPGet(tsock1, &ack); + if (ack == 0) + { + TCPFlush(tsock1); + state = TcpReadyToSend; + return 4; + } + network_read_amount(); + TCPFlush(tsock1); + state = ChangeRequestedDone; + + } + network_worker(); + } + state = TcpReadyToSend; + return 0; +} + +//request 4+5 +char network_send_cancel_generic(char id) +{ + while(state != CancelDone) + { + switch (state) + { + case TcpReadyToSend: + if ( TCPIsConnected(tsock1) && TCPIsPutReady(tsock1) ) + state = TcpSend; + break; + case TcpSend: + TCPPut(tsock1, id); + TCPFlush(tsock1); + state = CancelDone; + + } + network_worker(); + } + return network_read_ack(); +} + +//Request ID 4 +char network_send_cancel_last(void) +{ + return network_send_cancel_generic(0x04); +} + +//Request ID 5 +char network_send_cancel_all(void) +{ + return network_send_cancel_generic(0x05); +} + +//Request ID 6 char network_send_goodbye(void) { + char ack; while( state != SockClosed) { switch (state) { - case TcpReadyToSend: + case TcpReadyToSend: if ( TCPIsConnected(tsock1) && TCPIsPutReady(tsock1) ) - state = TcpSend; + state = TcpSend; break; case TcpSend: @@ -229,16 +436,17 @@ break; case SockClosing: + ack = network_read_ack(); TCPDisconnect( tsock1 ); state = SockClosed; break; } network_worker(); } - if( TCPIsConnected(tsock1) ) + if( TCPIsConnected(tsock1)) return 3; // Didn't close the socket properly; else - return 0; + return ack; } void network_wait_for_dhcp() @@ -255,7 +463,6 @@ char sock_state = 0; char is_resolved = 0; char has_arp = 0; - char a = 1; TICK tick; @@ -330,9 +537,24 @@ * configuration since last reset. */ - a = network_send_hello( 0x01 ); - a = network_send_scan_frame( stregkode, antal ); - a = network_send_goodbye(); + + network_send_hello( 0x01 ); + + strncpy(global_network_char, "12345678", 8); + network_send_scan_frame( 1, 8 ); //1x vare, stregkodelængde=8 + + strncpy(global_network_char, "87654444", 8); + network_send_scan_frame( 1, 8 ); //1x vare, stregkodelængde=8 + + network_send_calc_total(); + + network_send_cash_payed(50000); + + network_send_cancel_last(); + + network_send_cancel_all(); + + network_send_goodbye(); } }