/* ****** version 1.00 ****** * Serial to ehternet ez232 module software * 10/10/2005 all feature are working file. ****** version 2.00 ******* * 10/02/2007 port can take up to 65535 * 10/02/2007 DHCP made disable by defalut. * 10/02/2007 default change 9600 ******* version 3.00 ***** * 15/02/07 option changed to A...K * 15/02/07 Port problem sloved * 15/02/07 Gate way featute has been added. ******* version 3.01 ***** * 14/02/08 Switch has been added for to force static to dhcp. * 14/02/08 While running if switch pressed it show the parameter on the hypertermial. ******* version 3.02 ***** * 30/08/08 Hardware flow control problem has been sloved.if no short (4-6 7-8 ) can be data viewed. ******* version 3.03 ***** * 10/03/09 Adding New feature client mode. ******* version 1.00 ***** * 128K Ram and 528K Flash * 19/03/09 changed ez-232 deo new version **** * 25/03/09 data and stop bits now display properly ****** version 1.02 ****************** * 28/04/09 udp broadcasting program removed. ***** version 1.03 ******************* * 26/05/09 Individual connet mode has been added ***** version 1.04 ******************* * 12/06/09 Display on hyper terminal has been changed. * 15/06/09 defualt setting has changed (according the mail) * 16/06/09 Time out of pressing digits incresed to 60 seconds. ***** Version 1.05 128k RAM and 256 Flash *********************************************************** * 24/06/2009 Code has been modified to use 256 code flash from 512 code flash * rest of the things are same as Version 1.04 */ #define MY_IP_ADDRESS "192.168.1.233" #define MY_NETMASK "255.255.255.0" //#define MY_GATEWAY "192.168.0.1" #define USE_DHCP #define SERD_RTS_PORT PDDR #define SERD_RTS_SHADOW PDDRShadow #define SERD_RTS_BIT 2 #define SERD_CTS_PORT PCDR #define SERD_CTS_BIT 1 #define SERC_RTS_PORT PDDR #define SERC_RTS_SHADOW PDDRShadow #define SERC_RTS_BIT 3 #define SERC_CTS_PORT PBDR #define SERC_CTS_BIT 0 #define MAX_TCP_SOCKET_BUFFERS 3 #define MAX_UDP_SOCKET_BUFFERS 4 #define TCP_BUF_SIZE 1000 #define VS_MAXOFFSET 2000 #define SERIAL_PORT 4 #define BAUD_RATE 19200L #define INBUFSIZE 127 //31 #define OUTBUFSIZE 127 //31 #define CINBUFSIZE INBUFSIZE #define COUTBUFSIZE OUTBUFSIZE #define UDPDL_LOADER "LIB/ADOWN/PDL-GENERIC.BIN" #ximport UDPDL_LOADER _udl_dl_loader #define DHCP_OR_BOOTP_SETTING_LOCATION 0x3bf00 //0x7BF00 #define IP_ADDRESS_OF_DEV_STRINGFORM 0x3bf06 //0x7BF06 #define IP_ADDRESS_OF_DEV_LONGFORM 0x3bf30 //0x7BF30 #define IP_PORT_DEV 0x3bf37 //0x7BF37 #define SER_BAUD_DEV 0x3bf47 //0x7BF47 #define NET_ADDRESS_OF_DEV_STRINGFORM 0x3bf50 //0x7BF50 #define NET_MASK_OF_DEV_LONGFORM 0x3bf50 //0x7BF50 #define F_DATA_BIT 0x3bfc7 //0x7BF60 #define F_FLOW_CONTROL 0x3bfc8 //0x7BF61 #define F_STOP_BIT 0x3bfc9 //0x7BF62 #define F_PARITY_BIT 0x3bfca //0x7BF63 #define GATEWAY_OF_DEV_LONGFORM 0x3bfcb //0x7BF64 /********* version 3.03 *******************************/ #define IP_ADDRESS_REMOTEIP_LONGFORM 0x3bfd0 //0x7BF68 #define IP_REMOTE_PORT_DEV 0x3bfd5 //0x7BF6C #define UNIT_SERVER_MODE 0x3bfe2 //0x7BF72 #define UNI2_SERVER_MODE 0x3bfef //0x7BF7F /*******************************************************/ #define F2_DATA_BIT 0x3bfe3 //0x7BF73 #define F2_FLOW_CONTROL 0x3bfe4 //0x7BF74 #define F2_STOP_BIT 0x3bfe5 //0x7BF75 #define F2_PARITY_BIT 0x3bfe6 //0x7BF76 #define F2_SER_BAUD_DEV 0x3bff0 //0x7BF77 #define UNI3_SERVER_MODE 0x3bff7 //PNS #define IP_REMOTE_PORT2_DEV 0x3bff9 //PNS #define MY_SERVER1 0xC0A801C8 #if (SERIAL_PORT==4) #define serXopen serDopen #define serXread serDread #define serXgetc serDgetc #define serXrdUsed serDrdUsed #define serXwrite serDwrite #define serXclose serDclose #define serXwrFlush serDwrFlush #define serXrdFlush serDrdFlush #define serXwrFree serDwrFree #define DINBUFSIZE INBUFSIZE #define DOUTBUFSIZE OUTBUFSIZE #endif #define VS_INIT 0 /* closed or never opened */ #define VS_LISTEN 1 /* waiting for a connection */ #define VS_OPENING 2 /* wait while we open a connection */ #define VS_OPEN 3 /* we have a connection */ #define VS_WAITCLOSE 4 /* wait for the connection to be torn down */ #define VS_MODEOFF 0 #define VS_MODEACTIVE 2 #define VS_MODEPASSIVE 1 typedef unsigned long int ulong; #memmap xmem #use "dcrtcp.lib" #use "udpdownl.lib" typedef struct { int state; tcp_Socket socket; int offset; long last_character; char buffer[VS_MAXOFFSET]; int open_timeout; } VsState; typedef struct { int port; // port to listen on when in VS_MODEPASSIVE int timeout; // intercharacter delay before flushing characters (ms) long baud; // serial port baud rates int mode; // VS_MODEACTIVE, VS_MODEPASSIVE, VS_MODEOFF long dest_ip; // ip address to call when in VS_MODEACTIVE int dest_port; // port to call when in VS_MODEACTIVE int binary; // TCP_MODE_BINARY or TCP_MODE_ASCII int open_timeout; // interopen delay when unsuccessful open socket (ms) } VsInfo; VsInfo vs_info; VsState vs_state,vs_statex; VsState vs_statey; const VsInfo factory_defaults = { 23, // port to listen on when in VS_MODEPASSIVE 0, // intercharacter delay before flushing characters (ms) BAUD_RATE, // serial port baud rates VS_MODEPASSIVE, // VS_MODEACTIVE, VS_MODEPASSIVE, VS_MODEOFF 0, // ip address to call when in VS_MODEACTIVE 0, // port to call when in VS_MODEACTIVE TCP_MODE_BINARY, // TCP_MODE_BINARY or TCP_MODE_ASCII 5000 // interopen delay when unsuccessful open socket (ms) }; int tempnow; int templo; float humidity; //char fail[21]; char ip_address[20],ip_port[7],baud_rate[7];//,save_prev_ip_address[20]; unsigned int my_port,my_port_client,my_port_server; long my_baud,remote_ipx,my_baud_2; int mac_addr[12]; //char copy_val_ip[22]; char usedhcp_bootp[7]; unsigned char bootp_timeout; char dhcp_enabled; int global_count; int ind ; udp_Socket sock; long sequence; long mygateway; int index_counter; int retval; char fflow_control; char sstop_bit; char datax_bit; char pparity_bit; char serverx_mode; char serverx_mode_2; char serverx_mode_3; char fflow_control_2; char sstop_bit_2; char datax_bit_2; char pparity_bit_2; tcp_Socket* socketx; void toggle_Power_led() { costate { // wfd xx = DelayMs(1000L); waitfor(DelayMs(500L) == 1); // } // if(xx) // { if(ind) { ind = 0; BitWrPortI(PBDR,&PBDRShadow,0,7); } else { ind = 1 ; BitWrPortI(PBDR,&PBDRShadow,1,7); } } } int my_serDgetc(void) { unsigned long my_time; int i; SEC_TIMER = my_time; i = 0xaa; while((SEC_TIMER - my_time) < 60L) { if(serDpeek() != -1) { i = serDgetc(); break; } } return i; } void delay(unsigned long dd) { unsigned long mm_tt; MS_TIMER = mm_tt; while((MS_TIMER - mm_tt) < dd); } void setting_PARAM_THRU_SERD(void) { unsigned long my_time,myip_addrx,mysin_mask,my_baudx,mygatexx,myip_clinet,my_baudx_2; unsigned int counter,i,x,y,dflag,yy; unsigned int my_portx,my_porxx,my_porxy; char myip_addr[20],mysin_addr[20],myx_baud[10],myip_addr_temp[20],mygateway_addr[20]; char myx_port[10],my_serverx,my_serverx2,my_serverx3; serDopen(9600); myip_addrx = my_ip_addr; mysin_mask = sin_mask; counter = 0; // xmem2root(&mygatexx,GATEWAY_OF_DEV_LONGFORM,4); // xmem2root(myx_port,IP_PORT_DEV,5); // myx_port[5] = '\0'; // my_port= atoi(myx_port); my_portx = my_port; // xmem2root(myx_baud,SER_BAUD_DEV,6); // if((myx_baud[0] == 0x31)&&(myx_baud[1] == 0x31)) // myx_baud[6] = '\0'; // else // myx_baud[5] = '\0'; // my_baud = atol(myx_baud); my_baudx = my_baud; my_baudx_2 = my_baud_2; dflag = dhcp_enabled; // xmem2root(&datax_bit,F_DATA_BIT,1); // xmem2root(&sstop_bit,F_STOP_BIT,1); // xmem2root(&pparity_bit,F_PARITY_BIT,1); // xmem2root(&fflow_control,F_FLOW_CONTROL,1); myip_clinet = remote_ipx; my_porxx = my_port_client; my_porxy = my_port_server; my_serverx = serverx_mode; my_serverx2 = serverx_mode_2; my_serverx3 = serverx_mode_3; mygatexx = mygateway; // serDputc('p'); memset(myip_addr,0xff,20); memset(mysin_addr,0xff,20); memset(myx_port,0xff,10); memset(myx_baud,0xff,10); memset(myip_addr_temp,0xff,20); while(1) { /* while(counter < 3) { i = my_serDgetc(); if(i == 0x0d) counter++; else if(i == 0xaa) break; } */ serDrdFlush(); counter = 3; if (counter == 3 ) { serDputc('\r'); serDputc('\n'); serDputc('\n'); serDputs("-------------------------------------------------"); delay(100); serDputc('\r'); serDputc('\n'); serDputs(" EZ-Duo Program Parameters Version 1.05 "); delay(100); serDputc('\r'); serDputc('\n'); serDputs("-------------------------------------------------"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("A. IP Address "); delay(100); inet_ntoa(myip_addr,myip_addrx); serDputs(myip_addr); i = strlen(myip_addr); for(;i<21;i++) serDputc(0x20); serDputs("B. SubNet mask "); delay(100); inet_ntoa(mysin_addr,mysin_mask); serDputs(mysin_addr); serDputc('\r'); serDputc('\n'); serDputs("C. Gateway "); delay(100); inet_ntoa(mygateway_addr,mygatexx); serDputs(mygateway_addr); i = strlen(mygateway_addr); for(;i<21;i++) serDputc(0x20); serDputs("D. Remote IP "); delay(100); inet_ntoa(mygateway_addr,myip_clinet); serDputs(mygateway_addr); serDputc('\r'); serDputc('\n'); serDputs("E. DHCP "); delay(100); if(dflag ==1) serDputs("Enable"); else serDputs("Disable"); delay(100); serDputc('\r'); serDputc('\n'); serDputc('\n'); serDputs(" Serial port - 1"); delay(100); serDputs(" Serial port - 2"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("--------------------------- -----------------------------"); serDputc('\r'); serDputc('\n'); serDputs("F. Baud Rate "); delay(100); ltoa(my_baudx_2,myx_baud); serDputs(myx_baud); i = strlen(myx_baud); for(;i<21;i++) serDputc(0x20); serDputs("M. Baud Rate "); delay(100); ltoa(my_baudx,myx_baud); serDputs(myx_baud); serDputc('\r'); serDputc('\n'); serDputs("G. Parity "); if(pparity_bit_2 == 1) serDputs("Even"); else if(pparity_bit_2 == 2) serDputs("Odd "); else serDputs("None"); serDputs(" N. Parity "); if(pparity_bit == 1) serDputs("Even"); else if(pparity_bit == 2) serDputs("Odd "); else serDputs("None"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("H. Data bits "); if(datax_bit_2 == 1) serDputs("8"); else serDputs("7"); delay(100); serDputs(" O. Data bits "); if(datax_bit == 1) serDputs("8"); else serDputs("7"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("I. Stop bits "); if(sstop_bit_2 == 1) serDputs("1"); else serDputs("2"); delay(100); serDputs(" P. Stop bits "); if(sstop_bit == 1) serDputs("1"); else serDputs("2"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("J. Flow control "); if(fflow_control_2 == 1) serDputs("Hardware"); else serDputs("None "); delay(100); serDputs(" Q. Flow control "); if(fflow_control == 1) serDputs("Hardware"); else serDputs("None "); delay(100); serDputc('\r'); serDputc('\n'); serDputs("K. Connection mode "); delay(100); if(my_serverx2 ==1) serDputs("Server"); else serDputs("Client"); delay(100); serDputs(" R. Connection mode "); delay(100); if(my_serverx ==1) serDputs("Server"); else serDputs("Client"); delay(100); serDputc('\r'); serDputc('\n'); serDputs("L. Port "); delay(100); utoa(my_porxx,myx_port); serDputs(myx_port); i = strlen(myx_port); for(;i<21;i++) serDputc(0x20); serDputs("S. Port "); delay(100); utoa(my_portx,myx_port); serDputs(myx_port); serDputc('\r'); serDputc('\n'); serDputc('\n'); serDputs("T. Port "); delay(100); utoa(my_porxy,myx_port); serDputs(myx_port); serDputc('\r'); serDputc('\n'); serDputc('\n'); serDputs("U. Connection mode "); delay(100); if(my_serverx ==1) serDputs("Server"); else serDputs("Client"); delay(100); serDputc('\r'); serDputc('\n'); i = strlen(myx_port); for(;i<21;i++) serDputc(0x20); serDputs("Press 'Z' to Save & Exit. Any other key to abort."); delay(100); serDputc('\r'); serDputc('\n'); serDputc('\n'); // serDputc('\n'); // serDputc('\n'); serDputs("Select option :"); delay(100); serDrdFlush(); i = my_serDgetc(); i = toupper(i); if( i== 0x5a) goto savexx; if((i < 0x40)||( i > 0x55)) { serDputc('\r'); serDputc('\n'); serDputc('\n'); serDputs("Time out. Unit not Updated ....."); delay(300); return; } else { savexx: serDputc(i); serDputc('\r'); serDputc('\n'); serDputc('\n'); i-= 0x40; } switch(i) { case 1: case 2: case 3: case 4: if(i== 1) serDputs("Enter IP Address : "); else if(i==2) serDputs("Enter NETMASK Address : "); else if(i==3) serDputs("Enter Gateway Address : "); else serDputs("Enter Remote IP : "); yy = i; counter = 0; x = 0; y =0; while(counter < 15) { i = my_serDgetc(); if(((i > 0x2f)&&(i<0x3a))||( i == 0x2e)||(i == 13)) { if(i != 13) myip_addr_temp[x++] = i; serDputc(i); counter++; y++; if(( i == 13)||(counter == 15)) { if((counter > 0)&&(yy == 1)) { myip_addr_temp[x] = '\0'; myip_addrx= inet_addr(myip_addr_temp); memcpy(myip_addr,myip_addr_temp,15); break; } if((counter > 0)&&(yy==2)) { myip_addr_temp[x] = '\0'; mysin_mask = inet_addr(myip_addr_temp); memcpy(mysin_addr,myip_addr_temp,15); break; } if((counter > 0)&&(yy==3)) { myip_addr_temp[x] = '\0'; mygatexx = inet_addr(myip_addr_temp); memcpy(mygateway_addr,myip_addr_temp,15); break; } if((counter > 0)&&(yy==4)) { myip_addr_temp[x] = '\0'; myip_clinet = inet_addr(myip_addr_temp); break; } } } else if((i== 0xaa)||(i== 27)) { break; } } break; case 0x0c: case 0x13: case 0x14: serDputs("Local/Remote Port 00000-65535 : "); yy = i; counter = 0; while(counter < 5) { i = my_serDgetc(); if(((i > 0x2f)&&(i<0x3a))||( i== 13)) { serDputc(i); if( i != 13) myx_port[counter++] = i; if((i == 13)||(counter == 5)) { if((counter > 0)&&(yy == 0x13)) { myx_port[counter]= '\0'; i = atoi(myx_port); if(i <= 0xffff) my_portx = i; //atoi(myx_port); break; } if((counter > 0)&&(yy == 0x0c)) { myx_port[counter] = '\0'; i = atoi(myx_port); if(i <= 0xffff) my_porxx = i; //atoi(myx_port); break; } if((counter > 0)&&(yy == 0x14)) //Pavan { myx_port[counter]= '\0'; i = atoi(myx_port); if(i <= 0xffff) my_porxy = i; //atoi(myx_port); //Pavan break; } if(( i == 13)&&(counter == 0)) { break; } } } else if((i== 0xaa)||(i== 27)) { break; } } break; case 5: serDputs("Press 1. Enable 2.Disable : "); i = my_serDgetc(); if((i > 0x2f)&&(i<0x33)) { serDputc(i); dflag = i - 0x30; } break; case 0x0d: serDputs("Press 0.300 1.600 2.1200 3.2400 4.4800 5.9600 "); // serDputc('\r'); // serDputc('\n'); serDputs("6.19200 7.38400 8.57600 9.115200 : "); i = my_serDgetc(); if((i > 0x2f)&&(i<0x3a)) { serDputc(i); switch(i) { case 0x30: my_baudx = 300; break; case 0x31: my_baudx = 600; break; case 0x32: my_baudx = 1200; break; case 0x33: my_baudx = 2400; break; case 0x34: my_baudx = 4800; break; case 0x35: my_baudx = 9600; break; case 0x36: my_baudx = 19200; break; case 0x37: my_baudx = 38400; break; case 0x38: my_baudx = 57600; break; case 0x39: my_baudx = 115200; break; } } break; case 0x6: serDputs("Press 0.300 1.600 2.1200 3.2400 4.4800 5.9600 "); // serDputc('\r'); // serDputc('\n'); serDputs("6.19200 7.38400 8.57600 9.115200 : "); i = my_serDgetc(); if((i > 0x2f)&&(i<0x3a)) { serDputc(i); switch(i) { case 0x30: my_baudx_2 = 300; break; case 0x31: my_baudx_2 = 600; break; case 0x32: my_baudx_2 = 1200; break; case 0x33: my_baudx_2 = 2400; break; case 0x34: my_baudx_2 = 4800; break; case 0x35: my_baudx_2 = 9600; break; case 0x36: my_baudx_2 = 19200; break; case 0x37: my_baudx_2 = 38400; break; case 0x38: my_baudx_2 = 57600; break; case 0x39: my_baudx_2 = 115200; break; } } break; case 0x8: case 0xf: serDputs("Press 1. 8-bits 2. 7-bits : "); x = my_serDgetc(); if((x> 0x30)&&(x < 0x33)) { serDputc(x); if(i == 0xf) datax_bit = (x-0x30); else datax_bit_2 = (x-0x30); } break; case 0x9: case 0x10: serDputs("Press 1. 1 Stop bit 2. 2 Stop bit : "); x = my_serDgetc(); if(( x > 0x30 )&&(x< 0x33)) { serDputc(x); if(i == 0x10) sstop_bit = x - 0x30; else sstop_bit_2 = x - 0x30; } break; case 0x7: case 0xe: serDputs("Press 1. EVEN 2.ODD 3.NO PARITY : "); x = my_serDgetc(); if((x > 0x30)&&(x<0x34)) { serDputc(x); if( i == 0xe) pparity_bit = x-0x30; else pparity_bit_2 = x-0x30; } break; case 0xa: case 0x11: serDputs("Press 1. Flow Control ON 2. OFF : "); x = my_serDgetc(); if((x > 0x30)&&(x < 0x33)) { serDputc(x); if( i == 0x11) fflow_control = x-0x30; else fflow_control_2 = x-0x30; } break; //*** case 0xe: case 0x1a: if((myip_addr[0] != 0xff)&&(myip_addr[1] != 0xff)) WriteFlash(IP_ADDRESS_OF_DEV_STRINGFORM,myip_addr,15); if((mysin_addr[0] != 0xFF)&&(myip_addr[1] != 0xFF)) WriteFlash(NET_ADDRESS_OF_DEV_STRINGFORM,mysin_addr,15); if(my_portx != my_port) { utoa(my_portx,myx_port); WriteFlash(IP_PORT_DEV,myx_port,5); } if(my_porxx != my_port_client) { utoa(my_porxx,myx_port); WriteFlash(IP_REMOTE_PORT_DEV,myx_port,5); } /*Pavan*/ if(my_porxy != my_port_server) { utoa(my_porxy,myx_port); WriteFlash(IP_REMOTE_PORT2_DEV,myx_port,5); } /*Pavan*/ WriteFlash(F_STOP_BIT,&sstop_bit,1); WriteFlash(F_PARITY_BIT,&pparity_bit,1); WriteFlash(F_DATA_BIT,&datax_bit,1); WriteFlash(F_FLOW_CONTROL,&fflow_control,1); WriteFlash(F2_STOP_BIT,&sstop_bit_2,1); WriteFlash(F2_PARITY_BIT,&pparity_bit_2,1); WriteFlash(F2_DATA_BIT,&datax_bit_2,1); WriteFlash(F2_FLOW_CONTROL,&fflow_control_2,1); if(my_baudx != my_baud) { ltoa(my_baudx,myx_baud); if(my_baudx == 115200) WriteFlash(SER_BAUD_DEV,myx_baud,6); else WriteFlash(SER_BAUD_DEV,myx_baud,5); } if(my_baudx_2 != my_baud_2) { ltoa(my_baudx_2,myx_baud); if(my_baudx_2 == 115200) WriteFlash(F2_SER_BAUD_DEV,myx_baud,6); else WriteFlash(F2_SER_BAUD_DEV,myx_baud,5); } // if(dflag == 1) WriteFlash(DHCP_OR_BOOTP_SETTING_LOCATION,&dflag,1); // else // { WriteFlash(DHCP_OR_BOOTP_SETTING_LOCATION,&dflag,1); WriteFlash(IP_ADDRESS_OF_DEV_LONGFORM,&myip_addrx,4); WriteFlash(NET_MASK_OF_DEV_LONGFORM,&mysin_mask,4); WriteFlash(GATEWAY_OF_DEV_LONGFORM,&mygatexx,4); // } if(myip_clinet != remote_ipx) WriteFlash(IP_ADDRESS_REMOTEIP_LONGFORM,&myip_clinet,4); if(my_serverx != serverx_mode) WriteFlash(UNIT_SERVER_MODE,&my_serverx,1); if(my_serverx2 != serverx_mode_2) WriteFlash(UNI2_SERVER_MODE,&my_serverx2,1); /* if(my_serverx3 != serverx_mode_3) WriteFlash(UNI3_SERVER_MODE,&my_serverx3,1);*/ // Pavan /**** version 3.03***/ if((dflag == 1)&&(_dhcpstate == DHCP_ST_PERMANENT)) { _dhcpstate = DHCP_ST_INIT ; _dhcplife = 0UL; tcp_tick(NULL); } if(dflag != 1) { my_ip_addr = myip_addrx; sin_mask = mysin_mask; _dhcplife = ~0UL; } /*****/ delay(100); serDputs("Unit updated with new parameters ........."); delay(100); return; case 0x0b: case 0x12: case 0X15: serDputs("Press 1. Server Mode 2. Client Mode : "); x = my_serDgetc(); if((x > 0x30)&&(x < 0x33)) { serDputc(x); if(i== 0xb) my_serverx2 = x-0x30; else if(i==0x12) my_serverx = x - 0x30; else my_serverx3 = x-0x30; } break; default : break; } counter = 3; } else { break; } } } void vs_init(VsState* vs_state) { vs_state->state=VS_INIT; vs_state->offset=0; vs_state->last_character=MS_TIMER; vs_state->open_timeout=vs_info.open_timeout; memcpy(&vs_info,&factory_defaults,sizeof(vs_info)); } void vs_initx(VsState* vs_state) { vs_state->state=VS_INIT; vs_state->offset=0; vs_state->last_character=MS_TIMER; vs_state->open_timeout=vs_info.open_timeout; memcpy(&vs_info,&factory_defaults,sizeof(vs_info)); } void vs_inity(VsState* vs_state) { vs_state->state=VS_INIT; vs_state->offset=0; vs_state->last_character=MS_TIMER; vs_state->open_timeout=vs_info.open_timeout; memcpy(&vs_info,&factory_defaults,sizeof(vs_info)); } void vs_handler_d(VsState* state, VsState* statex) { auto tcp_Socket* socket; // auto tcp_Socket* socketx; auto int ch, bytes_written; auto int bytes_to_write,i; auto unsigned long mytime; if(vs_info.mode==VS_MODEOFF) return; socket=&state->socket; if(state->state!=VS_INIT && tcp_tick(socket)==0) { #ifdef VERBOSE printf("Connection closed\n"); #endif state->state=VS_INIT; state->open_timeout=vs_info.open_timeout; } socket=&state->socket; if(state->state!=VS_INIT && tcp_tick(socket)==0) { #ifdef VERBOSE printf("Connection closed\n"); #endif state->state=VS_INIT; state->open_timeout=vs_info.open_timeout; } /**********************Pavan************************************************/ socketx=&statex->socket; if(statex->state!=VS_INIT && tcp_tick(socketx)==0) { #ifdef VERBOSE printf("Connection closed\n"); #endif statex->state=VS_INIT; statex->open_timeout=vs_info.open_timeout; } /**********************Pavan*************************************************/ switch(state->state) { case VS_INIT: // serXopen(my_baud); if(serverx_mode == VS_MODEPASSIVE) { if (tcp_listen(socket,my_port,0,0,NULL,0) != 0) { state->state=VS_LISTEN; #ifdef VERBOSE printf("\nListening on socket\n"); #endif } else { printf("\nError listening on socket!\n"); } } else /* if(serverx_mode == VS_MODEACTIVE)*/ { if (tcp_open(socket,0,remote_ipx,my_port,NULL) != 0) { /*my_port_client*/ state->state=VS_OPENING; #ifdef VERBOSE printf("\nOpening socket\n"); #endif } else { printf("\nError opening socket!\n"); } } if(serverx_mode_3 == VS_MODEPASSIVE) { if (tcp_listen(socketx,my_port_server,0,0,NULL,0) != 0) { statex->state=VS_LISTEN; #ifdef VERBOSE printf("\nListening on socket\n"); #endif } else { printf("\nError listening on socket!\n"); } // } else /* if(serverx_mode == VS_MODEACTIVE)*/ { // if (tcp_open(socket,0,remote_ipx,my_port,NULL) != 0) { /*my_port_client*/ // state->state=VS_OPENING; //#ifdef VERBOSE // printf("\nOpening socket\n"); //#endif // } // else { // printf("\nError opening socket!\n"); // } } break; case VS_LISTEN: case VS_OPENING: if(sock_established(socket) || sock_bytesready(socket) >= 0) { state->state=VS_OPEN; sock_mode(socket,vs_info.binary); #ifdef VERBOSE printf("New Connection\n"); #endif //*** version 3.30 serDrdFlush(); } break; case VS_OPEN: if(vs_info.timeout!=0 && state->offset && (state->last_character+vs_info.timeout)buffer,state->offset); if (bytes_written < 0) { state->state = VS_WAITCLOSE; sock_close(socket); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=state->offset) { memcpy(state->buffer,state->buffer+bytes_written,state->offset-bytes_written); state->offset = bytes_written; break; } else state->offset = 0; } bytes_to_write=sock_bytesready(socket); if(bytes_to_write>serDwrFree()) bytes_to_write=serDwrFree(); if(bytes_to_write>(int)sizeof(state->buffer)) bytes_to_write=sizeof(state->buffer); if(bytes_to_write>0) { sock_read(socket,state->buffer,bytes_to_write); serDwrite(state->buffer,bytes_to_write); sock_write(socketx,statex->buffer,bytes_to_write); } /* if(vs_info.timeout==0) { bytes_to_write=serDrdUsed(); if(bytes_to_write>sock_tbleft(socket)) bytes_to_write=sock_tbleft(socket); if(bytes_to_write>(int)sizeof(state->buffer)) bytes_to_write=sizeof(state->buffer); if(bytes_to_write>0) { serDread(state->buffer,bytes_to_write,0); sock_write(socket,state->buffer,bytes_to_write); } } else{ while((state->offsetbuffer[state->offset++]=ch; state->last_character=MS_TIMER; } } */ if((state->offset<=VS_MAXOFFSET)&&(state->offset > 0)) { bytes_written=sock_fastwrite(socket,state->buffer,state->offset); if (bytes_written < 0) { state->state = VS_WAITCLOSE; sock_close(socket); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=state->offset) { memcpy(state->buffer,state->buffer+bytes_written,state->offset-bytes_written); state->offset = bytes_written; } else state->offset = 0; } break; case VS_WAITCLOSE: break; default: state->state=VS_INIT; break; } switch(state->state) { case VS_INIT: // serXopen(my_baud); if(serverx_mode_3 == VS_MODEPASSIVE) { if (tcp_listen(socketx,my_port_server,0,0,NULL,0) != 0) { state->state=VS_LISTEN; #ifdef VERBOSE printf("\nListening on socket\n"); #endif } else { printf("\nError listening on socket!\n"); } } else /* if(serverx_mode == VS_MODEACTIVE)*/ { if (tcp_open(socketx,0,remote_ipx,my_port_server,NULL) != 0) { /*my_port_client*/ state->state=VS_OPENING; #ifdef VERBOSE printf("\nOpening socket\n"); #endif } else { printf("\nError opening socket!\n"); } } if(serverx_mode == VS_MODEPASSIVE) { if (tcp_listen(socket,my_port,0,0,NULL,0) != 0) { state->state=VS_LISTEN; #ifdef VERBOSE printf("\nListening on socket\n"); #endif } else { printf("\nError listening on socket!\n"); } } else /* if(serverx_mode == VS_MODEACTIVE)*/ { if (tcp_open(socket,0,remote_ipx,my_port,NULL) != 0) { /*my_port_client*/ state->state=VS_OPENING; #ifdef VERBOSE printf("\nOpening socket\n"); #endif } else { printf("\nError opening socket!\n"); } } break; case VS_LISTEN: case VS_OPENING: if(sock_established(socketx) || sock_bytesready(socketx) >= 0) { statex->state=VS_OPEN; sock_mode(socketx,vs_info.binary); #ifdef VERBOSE printf("New Connection\n"); #endif //*** version 3.30 serDrdFlush(); } break; case VS_OPEN: if(vs_info.timeout!=0 && statex->offset && (statex->last_character+vs_info.timeout)buffer,statex->offset); if (bytes_written < 0) { statex->state = VS_WAITCLOSE; sock_close(socketx); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=statex->offset) { memcpy(statex->buffer,statex->buffer+bytes_written,statex->offset-bytes_written); statex->offset = bytes_written; break; } else statex->offset = 0; } bytes_to_write=sock_bytesready(socketx); if(bytes_to_write>serDwrFree()) bytes_to_write=serDwrFree(); if(bytes_to_write>(int)sizeof(statex->buffer)) bytes_to_write=sizeof(statex->buffer); if(bytes_to_write>0) { sock_read(socketx,statex->buffer,bytes_to_write); // serDwrite(statex->buffer,bytes_to_write); sock_write(socket,state->buffer,bytes_to_write); } /* if(vs_info.timeout==0) { bytes_to_write=serDrdUsed(); if(bytes_to_write>sock_tbleft(socket)) bytes_to_write=sock_tbleft(socket); if(bytes_to_write>(int)sizeof(state->buffer)) bytes_to_write=sizeof(state->buffer); if(bytes_to_write>0) { serDread(state->buffer,bytes_to_write,0); sock_write(socket,state->buffer,bytes_to_write); } } else{ while((state->offsetbuffer[state->offset++]=ch; state->last_character=MS_TIMER; } } */ if((statex->offset<=VS_MAXOFFSET)&&(statex->offset > 0)) { bytes_written=sock_fastwrite(socketx,statex->buffer,statex->offset); if (bytes_written < 0) { statex->state = VS_WAITCLOSE; sock_close(socketx); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=statex->offset) { memcpy(statex->buffer,statex->buffer+bytes_written,statex->offset-bytes_written); statex->offset = bytes_written; } else statex->offset = 0; } break; case VS_WAITCLOSE: break; default: statex->state=VS_INIT; break; } } void vs_handler_c(VsState* state) { auto tcp_Socket* socket; auto int ch, bytes_written; auto int bytes_to_write,i; auto unsigned long mytime; if(vs_info.mode==VS_MODEOFF) return; socket=&state->socket; if(state->state!=VS_INIT && tcp_tick(socket)==0) { #ifdef VERBOSE printf("Connection closed\n"); #endif state->state=VS_INIT; state->open_timeout=vs_info.open_timeout; } switch(state->state) { case VS_INIT: if(serverx_mode_2 == VS_MODEPASSIVE ) { // if (tcp_listen(socket,vs_info.port,0,0,NULL,0) != 0) { if (tcp_listen(socket,my_port_client,0,0,NULL,0) != 0) { /*(my_port+1)*/ state->state=VS_LISTEN; #ifdef VERBOSE printf("\nListening on socket\n"); #endif } else { printf("\nError listening on socket!\n"); } } else /*if(serverx_mode_2 == VS_MODEACTIVE)*/ { if (tcp_open(socket,0,remote_ipx,my_port_client,NULL) != 0) {/*(my_port_client+1)*/ state->state=VS_OPENING; #ifdef VERBOSE printf("\nOpening socket\n"); #endif } else { printf("\nError opening socket!\n"); } } break; case VS_LISTEN: case VS_OPENING: if(sock_established(socket) || sock_bytesready(socket) >= 0) { state->state=VS_OPEN; sock_mode(socket,vs_info.binary); #ifdef VERBOSE printf("New Connection\n"); #endif //*** version 3.30 serCrdFlush(); } break; case VS_OPEN: if(vs_info.timeout!=0 && state->offset && (state->last_character+vs_info.timeout)buffer,state->offset); if (bytes_written < 0) { state->state = VS_WAITCLOSE; sock_close(socket); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=state->offset) { memcpy(state->buffer,state->buffer+bytes_written,state->offset-bytes_written); state->offset = bytes_written; break; } else state->offset = 0; } bytes_to_write=sock_bytesready(socket); if(bytes_to_write>serCwrFree()) bytes_to_write=serCwrFree(); if(bytes_to_write>(int)sizeof(state->buffer)) bytes_to_write=sizeof(state->buffer); if(bytes_to_write>0) { sock_read(socket,state->buffer,bytes_to_write); serCwrite(state->buffer,bytes_to_write); } if(vs_info.timeout==0) { bytes_to_write=serCrdUsed(); if(bytes_to_write>sock_tbleft(socket)) bytes_to_write=sock_tbleft(socket); if(bytes_to_write>(int)sizeof(state->buffer)) bytes_to_write=sizeof(state->buffer); if(bytes_to_write>0) { serCread(state->buffer,bytes_to_write,0); sock_write(socket,state->buffer,bytes_to_write); } } else{ while((state->offsetbuffer[state->offset++]=ch; state->last_character=MS_TIMER; } } if((state->offset<=VS_MAXOFFSET)&&(state->offset > 0)) { bytes_written=sock_fastwrite(socket,state->buffer,state->offset); if (bytes_written < 0) { state->state = VS_WAITCLOSE; sock_close(socket); #ifdef VERBOSE printf("Connection closed\n"); #endif break; } if(bytes_written!=state->offset) { memcpy(state->buffer,state->buffer+bytes_written,state->offset-bytes_written); state->offset = bytes_written; } else state->offset = 0; } break; case VS_WAITCLOSE: break; default: state->state=VS_INIT; break; } } void main() { unsigned long mytime; unsigned char i,myxx_port[10],myxx_baud[10],mygateway_addr[20]; i = 0; xmem2root(&i,SER_BAUD_DEV,1); xmem2root(myxx_port,0x3bfcb,1); //xmem2root(myxx_ports_to_write>0) BitWrPortI(PDDDR,&PDDDRShadow,1,2); if((i == 0xff)||(myxx_port[0] == 0xff)) { i = 2; i = WriteFlash(DHCP_OR_BOOTP_SETTING_LOCATION,&i,1); WriteFlash(IP_ADDRESS_OF_DEV_STRINGFORM,"192.168.001.005",15); mytime = 0xc0a80105; WriteFlash(IP_ADDRESS_OF_DEV_LONGFORM,&mytime,4); mytime = 0xffffff00; WriteFlash(NET_MASK_OF_DEV_LONGFORM,&mytime,4); mytime = 0xc0a80102; WriteFlash(GATEWAY_OF_DEV_LONGFORM,&mytime,4); mytime = 0xc0a80102; WriteFlash(IP_ADDRESS_REMOTEIP_LONGFORM,&mytime,4); WriteFlash(IP_REMOTE_PORT_DEV,"61320",5); WriteFlash(IP_REMOTE_PORT2_DEV,"61321",5); WriteFlash(F2_SER_BAUD_DEV,"9600",4); i = 1; WriteFlash(F2_STOP_BIT,&i,1); i = 3; WriteFlash(F2_PARITY_BIT,&i,1); i = 1; WriteFlash(F2_DATA_BIT,&i,1); i = 2; WriteFlash(F2_FLOW_CONTROL,&i,1); WriteFlash(IP_PORT_DEV,"06830",5); WriteFlash(SER_BAUD_DEV,"1200",4); i = 1; WriteFlash(F_STOP_BIT,&i,1); i = 1; WriteFlash(F_PARITY_BIT,&i,1); i = 0; WriteFlash(F_DATA_BIT,&i,1); i = 2; WriteFlash(F_FLOW_CONTROL,&i,1); i = 1; WriteFlash(UNIT_SERVER_MODE,&i,1); i = 2; WriteFlash(UNI2_SERVER_MODE,&i,1); i = 1; WriteFlash(UNI3_SERVER_MODE,&i,1); //Pavan } xmem2root(&dhcp_enabled,DHCP_OR_BOOTP_SETTING_LOCATION,1); if((dhcp_enabled != 1)&&(BitRdPortI(PBDR,5))) { _dhcpstate = DHCP_ST_PERMANENT; xmem2root(&my_ip_addr,IP_ADDRESS_OF_DEV_LONGFORM,4); xmem2root(&sin_mask,NET_MASK_OF_DEV_LONGFORM,4); } else if(!BitRdPortI(PBDR,5)) { i = 1; WriteFlash(DHCP_OR_BOOTP_SETTING_LOCATION,&i,1); } sock_init(); vs_init(&vs_state); vs_initx(&vs_statex); vs_inity(&vs_statey); UDPDL_Init("Synectix"); /* for(i=0;i<9;) { if((MS_TIMER - mytime) > 500L) { if(i ==8) { ind = 0xffff; } toggle_Power_led(); mytime = MS_TIMER; if(ind) ind = 0xffff; else ind = 0; i++; } } */ /* setting_PARAM_THRU_SERD(); serDclose(); */ xmem2root(&mygateway,GATEWAY_OF_DEV_LONGFORM,4); xmem2root(myxx_port,IP_PORT_DEV,6); myxx_port[5] = '\0'; my_port= atoi(myxx_port); xmem2root(myxx_baud,SER_BAUD_DEV,6); if((myxx_baud[0] == 0x31)&&(myxx_baud[1] == 0x31)) myxx_baud[6] = '\0'; else myxx_baud[5] = '\0'; my_baud = atol(myxx_baud); xmem2root(myxx_baud,F2_SER_BAUD_DEV,6); if((myxx_baud[0] == 0x31)&&(myxx_baud[1] == 0x31)) myxx_baud[6] = '\0'; else myxx_baud[5] = '\0'; my_baud_2 = atol(myxx_baud); if(my_baud_2 == 0) my_baud_2 = 56700; xmem2root(&datax_bit,F_DATA_BIT,1); xmem2root(&sstop_bit,F_STOP_BIT,1); xmem2root(&pparity_bit,F_PARITY_BIT,1); xmem2root(&fflow_control,F_FLOW_CONTROL,1); xmem2root(&datax_bit_2,F2_DATA_BIT,1); xmem2root(&sstop_bit_2,F2_STOP_BIT,1); xmem2root(&pparity_bit_2,F2_PARITY_BIT,1); xmem2root(&fflow_control_2,F2_FLOW_CONTROL,1); /*********** version 3.03 *****************************/ xmem2root(&remote_ipx,IP_ADDRESS_REMOTEIP_LONGFORM,4); xmem2root(myxx_port,IP_REMOTE_PORT_DEV,6); myxx_port[5] = '\0'; my_port_client = atoi(myxx_port); xmem2root(&serverx_mode,UNIT_SERVER_MODE,1); xmem2root(&serverx_mode_2,UNI2_SERVER_MODE,1); /**************************************************************/ /**********************Pavan****************************************/ xmem2root(myxx_port,IP_REMOTE_PORT2_DEV,6); myxx_port[5] = '\0'; my_port_server = atoi(myxx_port); xmem2root(&serverx_mode_3,UNI3_SERVER_MODE,1); /**********************Pavan****************************************/ serDopen(my_baud); serCopen(my_baud_2); if(pparity_bit == 1) serDparity(1); else if(pparity_bit == 2) serDparity(2); else serDparity(0); if(sstop_bit == 2) serDparity(3); if(datax_bit == 1) serDdatabits(0); else serDdatabits(1); if(fflow_control != 1) serDflowcontrolOff(); else serDflowcontrolOn(); if(pparity_bit_2 == 1) serCparity(1); else if(pparity_bit_2 == 2) serCparity(2); else serCparity(0); if(sstop_bit_2 == 2) serCparity(3); if(datax_bit_2 == 1) serCdatabits(0); else serCdatabits(1); if(fflow_control_2 != 1) serCflowcontrolOff(); else serCflowcontrolOn(); xmem2root(&dhcp_enabled,DHCP_OR_BOOTP_SETTING_LOCATION,1); if(dhcp_enabled != 1) tcp_config("MY_GATEWAY",inet_ntoa(mygateway_addr,mygateway)); /*** for(i=0;i<10;i++) { if(i == 9) ind = 0xffff; toggle_Power_led(); delay(500); } ***/ while (1) { tcp_tick(NULL); vs_handler_d(&vs_state, &vs_statey); vs_handler_c(&vs_statex); toggle_Power_led(); UDPDL_Tick(); if(!BitRdPortI(PBDR,5)) { serDclose(); BitWrPortI(PBDR,&PBDRShadow,0,7); setting_PARAM_THRU_SERD(); //*** version 3.30 sock_close(NULL); serDclose(); i = 29; mygateway_addr[i] = 0; } } }