Subversion Repositories zxusbnet

Rev

Rev 151 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <intrz80.h>
  5. #include "w5300.h"
  6. #include "zxevo_io.h"
  7. #include "mylib\mylib.h"
  8. #include "usb\hal.h"    
  9. #include "usb\sl811.h"    
  10. #include "usb\tpbulk.h"  
  11.  
  12. extern char LSTMHZ[3][4];  
  13. unsigned char RX_BUF[2*1024];  
  14. unsigned char mhz=2;
  15. unsigned char editbuf[16];
  16.  
  17. const unsigned char mac[]={0x02,0x02,0x6A,0x6A,0x3B,0x3B};
  18. const unsigned char wb[]={60,4,0,0,0,0,0,0};
  19. unsigned int iinchip_source_port=25;
  20. const unsigned char strip[]="%u.%u.%u.%u";
  21. unsigned char wait_con;
  22. unsigned int len;
  23. extern unsigned char xdata DBUF[BUFFER_LENGTH];
  24. extern FLAGS bdata bFlags;
  25.  
  26. void main11(void);
  27. void myint(void);
  28.  
  29. unsigned char rndini(unsigned char start){
  30.         static unsigned char h,l;
  31.         if(start) h=l=0;
  32.         else {
  33.                 h=h+0x77;
  34.                 l=h+(l>>1);
  35.         }
  36.         return l;
  37. }
  38.  
  39. unsigned char rnd(unsigned char start){
  40.         static unsigned char tab[256];
  41.         static unsigned char l;
  42.         if(start){
  43.                 unsigned int i;
  44.                 l=0;
  45.                 rndini(1);
  46.         for (i = 0; i < 256; i++)
  47.             tab[i] = rndini(0);
  48.         return 0;
  49.         }
  50.         else {
  51.         unsigned char b,a;
  52.         l++;
  53.         b=tab[l];
  54.         a = l + 31;
  55.         b+=tab[a];
  56.         a+=24;
  57.         tab[a]=b;
  58.         return b;
  59.         }
  60. }
  61.  
  62. void broadcast(void){  
  63.         static unsigned char tmp[5];
  64.         iinchip_source_port++;  
  65.         printf("Open socket in UDP mode");
  66.     do{
  67.         putchar('.');
  68.         *S_CR(0) =Sn_CR_CLOSE;
  69.         while(*S_CR(0));
  70.                 *S_MR(0) = Sn_MR_UDP; /* sets TCP mode */
  71.                 *S_PORTR(0) = iinchip_source_port; /* sets source port number */
  72.                 *S_CR(0) = Sn_CR_OPEN; /* sets OPEN command */
  73.                 while(*S_CR(0));
  74.         }while(*S_SSR(0) != SOCK_UDP);
  75.         puts(" OK");
  76.        
  77.         tmp[0]=GAR[0]|(~SUBR[0]);  /* set TCP SERVER IP address*/
  78.         tmp[1]=GAR[1]|(~SUBR[1]);  /* set TCP SERVER IP address*/
  79.         tmp[2]=GAR[2]|(~SUBR[2]);  /* set TCP SERVER IP address*/
  80.         tmp[3]=GAR[3]|(~SUBR[3]);  /* set TCP SERVER IP address*/
  81.         S_DIPR(0)[0]=tmp[0];  /* set TCP SERVER IP address*/
  82.         S_DIPR(0)[1]=tmp[1];  /* set TCP SERVER IP address*/
  83.         S_DIPR(0)[2]=tmp[2];  /* set TCP SERVER IP address*/
  84.         S_DIPR(0)[3]=tmp[3];  /* set TCP SERVER IP address*/
  85.         *S_DPORTR(0) = 4000;  /* set TCP SERVER listen port number*/
  86.        
  87.     printf("Send to ");
  88.     printf(strip,tmp[1],tmp[0],tmp[3],tmp[2]);
  89.         *S_TX1(0) = 0;
  90.         *S_TX(0) = 0;
  91.         *S_TX_WRSR(0) = 2;
  92.         *S_CR(0) = Sn_CR_SEND;
  93.         while(*S_CR(0));
  94.         puts(" OK");
  95.     printf("Close socket ");
  96.         *S_CR(0) = Sn_CR_CLOSE;
  97.         while(*S_CR(0));
  98.         puts(" OK\rPress any key");
  99. }
  100.  
  101. void update_main_menu(void){
  102.         unsigned char * ptr=RX_BUF;
  103.         ptr+=sprintf(ptr,"   ZXUSBNet test    \r\r[0]z80 %sMHz\r[1]GATEWAY:%u.%u.%u.%u\r",
  104.                 LSTMHZ[mhz],GAR[1],GAR[0],GAR[3],GAR[2]);
  105.         ptr+=sprintf(ptr,"[2]MASK:%u.%u.%u.%u\r",SUBR[1],SUBR[0],SUBR[3],SUBR[2]);
  106.         ptr+=sprintf(ptr,"[3]IP:%u.%u.%u.%u\r",SIPR[1],SIPR[0],SIPR[3],SIPR[2]);
  107.         sprintf(ptr,"[4]Send broadcast\r\
  108. [5]Receive packet\r\
  109. [6]Визнет мемтест\r\
  110. [7]sl811 тест\r\
  111. [8]Miniterminal(no return)\r\
  112. [9]О программе");
  113. }
  114.  
  115. void reconnect(void){
  116.         printf("Open socket in TCP mode");
  117.         iinchip_source_port++;
  118.     WIZ_SOCKET(0, Sn_MR_TCP, 23);
  119.         puts(" OK");   
  120.         printf("Set listening mode ");
  121.         *S_CR(0) = Sn_CR_LISTEN;
  122.         while(*S_CR(0));
  123.         puts(" OK");       
  124.     puts("Please connect to port 23");
  125. }
  126.  
  127. unsigned int receive(void){
  128.         unsigned int len;
  129.         unsigned char * ptr=RX_BUF;
  130.         if(!(*S_RX_RSR(0))) return 0;
  131.         while(*S_RX_RSR(0)!=*S_RX_RSR(0));
  132.         PACK_SIZE(0,len);
  133.     disable_interrupt();
  134.         output(0x82ab,input(0x82ab)&(0xff^0x08));      
  135.         {
  136.                 unsigned char i=(len+1)>>9;
  137.                 while(i){
  138.                         memcpy(ptr,S_RX_FAKE(0),512);
  139.                         i--;
  140.                         ptr+=512;
  141.                 }
  142.         }
  143.         {
  144.                 unsigned int j=(len+1)&0x01fe;
  145.                 memcpy(ptr,S_RX_FAKE(0),j);
  146.         }
  147.         output(0x82ab,input(0x82ab)|0x08);
  148.         *S_CR(0) = Sn_CR_RECV; 
  149.         while(*S_CR(0));       
  150.     enable_interrupt();
  151.         return len;
  152. }
  153.  
  154. void recv_p(void){
  155.         unsigned int ps = 0;
  156.         wait_con=1;
  157.         reconnect();
  158.         rnd(1);
  159.         while(1){
  160.        
  161.                 unsigned char stat;
  162.                 stat=*S_SSR(0);
  163.                 if((stat==SOCK_CLOSE_WAIT)||(stat==SOCK_CLOSED)) {
  164.                 if(len=receive()){
  165.                         unsigned char * ptr=RX_BUF;
  166.                         //unsigned char i=*RX_BUF;
  167.                         //printf("Length %u. check:\r",len);
  168.                         while(len){
  169.                                 unsigned char i=rnd(0);
  170.                                 if(*ptr!=i)
  171.                                         printf("bad 0x%04x: 0x%04x 0x%04x\r",ptr-RX_BUF,i,*ptr);
  172.                                 ptr++;
  173.                                 len--;
  174.                         }
  175.                         continue;
  176.                 }
  177.                         break;
  178.                 }
  179.                 else if(stat!=SOCK_ESTABLISHED) {
  180.                         continue;
  181.                 }
  182.                 if(wait_con){
  183.                         wait_con=0;
  184.                         printf("Connected :");
  185.                 printf(strip,S_DIPR(0)[1],S_DIPR(0)[0],S_DIPR(0)[3],S_DIPR(0)[2]);
  186.                 puts("\r Please send packets");
  187.                 continue;
  188.                 }
  189.                 if(len=receive()){
  190.                         //unsigned char * ptr=RX_BUF;
  191.                         //unsigned char b=0;
  192.                         ps++;
  193.                         //output8(0xfe,((unsigned char)ps)&0x07);
  194.                         /*
  195.                         while(len){
  196.                                 unsigned char i=rnd(0);
  197.                                 if(*ptr!=i){
  198.                                         printf("bad pack %lu 0x%04x: 0x%02x 0x%02x\r",ps,ptr-RX_BUF,i,*ptr);
  199.                                         b++;
  200.                                         if(b==10)getchar();
  201.                                 }
  202.                                 ptr++;
  203.                                 len--;
  204.                         }*/
  205.                         printf("\r%x",ps);
  206.                         continue;
  207.                 }
  208.         }
  209.         puts("press any key"); 
  210. }
  211.  
  212. void miniterm(void){   
  213.         wait_con=1;  
  214.         reconnect();
  215.         while(1){
  216.                 unsigned char stat;
  217.                 stat=*S_SSR(0);
  218.                 if((stat==SOCK_CLOSE_WAIT)||(stat==SOCK_CLOSED)) {
  219.                         puts("Socked closed");
  220.                         wait_con=1;
  221.                         reconnect();
  222.                         continue;
  223.                 }
  224.                 else if(stat!=SOCK_ESTABLISHED) {
  225.                         continue;
  226.                 }
  227.                 else if(wait_con){
  228.                         wait_con=0;
  229.                         printf("Connected :");
  230.                 printf(strip,S_DIPR(0)[1],S_DIPR(0)[0],S_DIPR(0)[3],S_DIPR(0)[2]);
  231.                 puts("\r Please type the text");
  232.                 continue;
  233.                 }
  234.                 else if(len=receive()){
  235.                         *(RX_BUF+len)=0;
  236.                         printf(RX_BUF);
  237.                         continue;
  238.                 }
  239. /*              if(fls&FLS_STR) {
  240.                         //kbd_pars();
  241.                         msg_send(kbd_buf.buf);
  242.                         fls=fls&(FLS_STR^0xff)|FLS_KBD;
  243.                         continue;
  244.                 }
  245.                 if(fls&FLS_CURS) flash_cursor();
  246.                 if(fls&FLS_KBD) kbd_read();
  247. */
  248.         }  
  249. }
  250.  
  251. unsigned int blok;
  252.  
  253. void memtest(unsigned char wp){
  254.         unsigned char hmr=0;
  255.         rnd(1);
  256.         blok=0;
  257.         output(0x83ab,0);
  258.         DelayMs(100);
  259.         output(0x83ab,0x10);
  260.         DelayMs(500);
  261.        
  262.         //output(0x82ab,0x0c);
  263.        
  264.         if(wp)
  265.         {
  266.                 output(0x82ab,0x50);
  267.                 output(0x01ab,0x80);
  268.         }
  269.         else   
  270.         {
  271.                 output(0x82ab,0x4c);
  272.                 *WMR=0x80;
  273.         }
  274.        
  275.         DelayMs(500);
  276.         //printf("Введите старший байт MR, в формате FF: ");
  277.     //scanf("%.2X",hmr);
  278.         if(wp){
  279.                 output(0x00ab,hmr);
  280.                 output(0x01ab,0x20);
  281.         }
  282.         else{
  283.                 *(WMR+1)=hmr;
  284.                 *WMR=0x20;
  285.         }
  286.         if(wp){
  287.                 output(0x81ab,0x08);   
  288.                 output(0x01ab,Sn_MR_TCP);
  289.                 output(0x03ab,Sn_CR_OPEN);
  290.                 while(input(0x09ab) != SOCK_INIT);
  291.         }
  292.         else
  293.         {
  294.                 *S_MR(0)=Sn_MR_TCP;
  295.                 *S_CR(0)=Sn_CR_OPEN;
  296.                 while(*S_SSR(0) != SOCK_INIT);
  297.         }
  298.         while(1){
  299.                 unsigned int i=8192;
  300.                 printf("\nБлок(8KB): %u    ",blok);
  301.                 rnd(1);
  302.                 while(i)
  303.                 {
  304.                         i--;
  305.                         i--;
  306.                         if(wp)
  307.                         {
  308.                                 //output(0x82ab,0x90); 
  309.                                 output(0x30ab,rnd(0));
  310.                                 //output(0x82ab,0x90);
  311.                                 output(0x31ab,rnd(0));
  312.                         }
  313.                         else
  314.                         {
  315.                                 *S_TX1(0) = rnd(0);
  316.                                 *S_TX(0)  = rnd(0);
  317.                         }
  318.                 }
  319.                 i=8192;
  320.                 rnd(1);
  321.                 while(i)
  322.                 {
  323.                         unsigned char trueb=rnd(0);
  324.                         unsigned char readb1;
  325.                         unsigned char readb0;
  326.                         if(wp)
  327.                         {
  328.                                 //output(0x82ab,0x90); 
  329.                                 readb1=input(0x30ab);
  330.                                 //output(0x82ab,0x90);
  331.                                 readb0=input(0x31ab);
  332.                         }
  333.                         else
  334.                         {
  335.                                 readb1=*S_TX1(0);
  336.                                 readb0=*S_TX(0);
  337.                         }
  338.                         i--;
  339.                         if(trueb != readb1){
  340.                                 printf("bad 0x%04x: 0x%02x 0x%02x\r",8192-i,trueb,readb1);
  341.                                 if(getkey())while(!getkey());
  342.                         }
  343.                         trueb=rnd(0);
  344.                         i--;
  345.                         if(trueb != readb0){
  346.                                 printf("bad 0x%04x: 0x%02x 0x%02x\r",8192-i,trueb,readb0);
  347.                                 if(getkey())while(!getkey());                          
  348.                         }
  349.                 }
  350.                 blok++;
  351.         }
  352. }
  353.  
  354. void usb_test(void){
  355.         static unsigned char temp;
  356.     SL811_RESET();
  357.     USBReset();
  358.         temp=SL811Read(cDATASet)>>4;
  359.         switch(temp)
  360.         {       case 0:puts("SL811H");break;
  361.                 case 1:puts("SL811HS rev 1.2");break;
  362.                 case 2:puts("SL811HS rev 1.5");break;
  363.                 default:puts("Unknown rev");
  364.         }
  365.     sl811_init_my();
  366.  
  367.         printf("SL811 init Ok \n");
  368.         //DirStartCluster=0;  
  369.         for(temp=0;temp<64;temp++)  
  370.                 DBUF[temp]=0;
  371.                
  372.                 if(bFlags.bits.SLAVE_FOUND)
  373.                 {
  374.                         bFlags.bits.SLAVE_FOUND=FALSE;
  375.                         DelayMs(25);
  376.                         if(EnumUsbDev(1))                               // enumerate USB device, assign USB address = #1
  377.                         {
  378.                                 bFlags.bits.SLAVE_ENUMERATED = TRUE;    // Set slave USB device enumerated flag
  379.                                 puts("\rSlave enumerated Ok");
  380.                         }
  381.                 }
  382.                 if(bFlags.bits.SLAVE_REMOVED)
  383.                 {
  384.                         bFlags.bits.SLAVE_REMOVED=FALSE;
  385.                         bFlags.bits.SLAVE_ENUMERATED = FALSE;
  386.                         bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
  387.                         puts("\rSlave removed");
  388.                 }
  389.                 if(bFlags.bits.bMassDevice)
  390.                 {
  391.                         bFlags.bits.bMassDevice=FALSE;
  392.                         temp=EnumMassDev();
  393.                         if(temp==TRUE)
  394.                         {
  395.                                 bFlags.bits.SLAVE_IS_ATTACHED = TRUE;
  396.                                 puts("\rSlave is attached");
  397.                         }
  398.                         else
  399.                         {
  400.                                 printf("\rMass device, ERROR = 0x%x \n",temp);
  401.                                 bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
  402.                                 temp=SL811Read(IntStatus);
  403.                                 if(!(temp & 0x40)) bFlags.bits.SLAVE_FOUND=TRUE;
  404.                                 printf("\rSlave is NOT attached, ERROR = 0x%x \n",temp);
  405.             }
  406.                 }
  407.         if(bFlags.bits.SLAVE_IS_ATTACHED){
  408.                 unsigned char b=0;
  409.                 blok=1;
  410.                 puts("Press any key, for read USB test");
  411.                 while(!getkey());
  412.                
  413.                 puts("Write 128KB");
  414.                 rnd(1);
  415.                 while(blok<0x100){
  416.                         unsigned char * ptr=RX_BUF;
  417.                         len=2048;
  418.                         while(len){
  419.                                 *ptr=rnd(0);
  420.                                 ptr++;
  421.                                 len--;
  422.                         }
  423.                         RBC_Write(blok,4,RX_BUF);
  424.                         blok+=4;
  425.                         printf("\nSectors: %u",blok);
  426.                 }
  427.                 blok=1;
  428.                
  429.                 puts("\rRead test:");
  430.                 rnd(1);
  431.                 while(1){
  432.                         unsigned char * ptr=RX_BUF;
  433.                         printf("\nSectors: %u    ",blok);
  434.                         RBC_Read(blok&0xff,4,RX_BUF);
  435.                         //RBC_Write(blok|0x4000,1,RX_BUF);
  436.                         len=2048;
  437.                         while(len){
  438.                                 unsigned char i=rnd(0);
  439.                                 if(*ptr!=i){
  440.                                         printf("\rbad 0x%04x: 0x%02x 0x%02x",ptr-RX_BUF,i,*ptr);
  441.                                         b++;
  442.                                         if(getkey())while(!getkey());
  443.                                 }
  444.                                 ptr++;
  445.                                 len--;
  446.                         }
  447.                         blok+=4;
  448.                         if((blok&0xff)==1){
  449.                                 rnd(1);
  450.                         }
  451.                 }
  452.                 printf("\nBads: %u",b);
  453.         }      
  454. }
  455.  
  456. void main(void){
  457.     wiz_reset();
  458.     WIZ_SYS_INIT(wb,wb);
  459.     memcpy(SHAR,mac,6);
  460.         my_im2_init(myint);
  461.         enable_interrupt();
  462.         main11();
  463.        
  464.         while(1);
  465. }
  466.  
  467.