⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.lst

📁 W3100A网络调试程序,可进行数据传输
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      read_data(s, recv_ptr, buf, data_len); // read data
              #ifndef _LITTLE_ENDIAN_
                      IINCHIP_WRITE(RX_RD_PTR(s),(unsigned char)((rd_ptr & 0xff00) >> 8));
                      IINCHIP_WRITE((RX_RD_PTR(s) + 1),(unsigned char)(rd_ptr & 0x00ff));
              #else
                      IINCHIP_WRITE((RX_RD_PTR(s)+1),(unsigned char)((rd_ptr & 0xff00) >> 8));
                      IINCHIP_WRITE(RX_RD_PTR(s),(unsigned char)(rd_ptr & 0x00ff));
              #endif
                      IINCHIP_WRITE(COMMAND(s),CRECV);
                      return data_len;
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 10  

              }
              #endif  // __UDP__
 546          
 547          unsigned int read_data(unsigned char s, unsigned char * src, unsigned char * dst, unsigned int len)
 548          {
 549   1              unsigned int size;
 550   1              unsigned int src_mask;
 551   1              unsigned char xdata * src_ptr;
 552   1      
 553   1              if (len == 0) return (0);
 554   1      
 555   1              src_mask = (unsigned int)src & RMASK[s];
 556   1              src_ptr = (RBUFBASEADDRESS[s] + src_mask);
 557   1              
 558   1              if( (src_mask + len) > RSIZE[s] ) 
 559   1              {
 560   2                      size = RSIZE[s] - src_mask;
 561   2                      memcpy(dst, src_ptr, size);
 562   2                      dst += size;
 563   2                      size = len - size;
 564   2                      src_ptr = (unsigned char *)(RBUFBASEADDRESS[s]);
 565   2                      memcpy(dst, src_ptr, size);
 566   2              } else
 567   1              {
 568   2                      memcpy(dst, src_ptr, len);
 569   2              }
 570   1      
 571   1              return (len);
 572   1      }
 573          
 574          unsigned int send_in(unsigned char s, const unsigned char *buf, unsigned int len, unsigned char kind)
 575          {
 576   1              unsigned int ret;
 577   1              unsigned int freesize;
 578   1              unsigned int wr_ptr;
 579   1      
 580   1      S_START:
 581   1      
 582   1      #ifndef _LITTLE_ENDIAN_
 583   1              freesize = IINCHIP_READ(TX_FREE_SIZE_PTR(s));
 584   1              freesize = ((freesize & 0x00ff) << 8) + IINCHIP_READ(TX_FREE_SIZE_PTR(s)+1);
 585   1      #else
                      freesize = IINCHIP_READ(TX_FREE_SIZE_PTR(s) + 1);
                      freesize = ((freesize & 0x00ff) << 8) + IINCHIP_READ(TX_FREE_SIZE_PTR(s));
              #endif
 589   1      
 590   1              if ((freesize > SSIZE[s]) || (freesize == 0))
 591   1              {
 592   2                      if ((IINCHIP_READ(SOCK_STATUS(s)) != SOCK_ESTABLISHED) || (IINCHIP_READ(SOCK_STATUS(s)) != SOCK_CLOSE_WA
             -IT)) return 0;
 593   2                      goto S_START;
 594   2              }
 595   1              else
 596   1              {
 597   2                      if (freesize < len) ret = freesize;
 598   2                      else ret = len;
 599   2      
 600   2      #ifndef _LITTLE_ENDIAN_
 601   2                      wr_ptr = IINCHIP_READ(TX_WR_PTR(s));
 602   2                      wr_ptr = ((wr_ptr & 0x00ff) << 8) + IINCHIP_READ(TX_WR_PTR(s) + 1);
 603   2      #else
                              wr_ptr = IINCHIP_READ(TX_WR_PTR(s)+1);
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 11  

                              wr_ptr = ((wr_ptr & 0x00ff) << 8) + IINCHIP_READ(TX_WR_PTR(s));
              #endif
 607   2                      
 608   2      #ifdef _DEBUG
                              printf("prev wr_ptr : %.4x ",wr_ptr);
              #endif
 611   2                      write_data(s, (unsigned char *)buf, (unsigned char *)wr_ptr, ret);              // copy data
 612   2                      wr_ptr += ret;          //  update tx_wr_ptr
 613   2      #ifdef _DEBUG
                              printf("post wr_ptr : %.4x ",wr_ptr);
              #endif
 616   2      
 617   2      #ifndef _LITTLE_ENDIAN_
 618   2                      IINCHIP_WRITE(TX_WR_PTR(s),(unsigned char)((wr_ptr & 0xff00) >> 8));
 619   2                      IINCHIP_WRITE((TX_WR_PTR(s) + 1),(unsigned char)(wr_ptr & 0x00ff));
 620   2      #else
                              IINCHIP_WRITE((TX_WR_PTR(s) + 1),(unsigned char)((wr_ptr & 0xff00) >> 8));
                              IINCHIP_WRITE(TX_WR_PTR(s),(unsigned char)(wr_ptr & 0x00ff));
              #endif
 624   2      
 625   2                      if (kind == 0x01) IINCHIP_WRITE(COMMAND(s),CSENDMAC);
 626   2                      else  IINCHIP_WRITE(COMMAND(s),CSEND);
 627   2                      
 628   2                      while (IINCHIP_READ(COMMAND(s)))
 629   2                      {
 630   3                              if ((IINCHIP_READ(INT_STATUS(s)) & ISR_TIMEOUT ) || (IINCHIP_READ(SOCK_STATUS(s)) == SOCK_CLOSED))
 631   3                              {
 632   4                                      printf("Socket %bd closed in sending function.\r\n", s);
 633   4                                      return 0;
 634   4                              }
 635   3                      }
 636   2              }
 637   1              return ret;
 638   1      }
 639          
 640          unsigned int write_data(unsigned char s, unsigned char * src, unsigned char * dst, unsigned int len)
 641          {
 642   1              unsigned int size;
 643   1              unsigned int dst_mask;
 644   1              unsigned char xdata * dst_ptr;
 645   1      
 646   1              if (len == 0) return (0);
 647   1      
 648   1              dst_mask = (unsigned int)dst & SMASK[s];
 649   1              dst_ptr = (SBUFBASEADDRESS[s] + dst_mask);
 650   1              
 651   1              if (dst_mask + len > SSIZE[s]) 
 652   1              {
 653   2                      size = SSIZE[s] - dst_mask;
 654   2                      memcpy(dst_ptr, src, size);
 655   2      
 656   2                      src += size;
 657   2                      size = len - size;
 658   2                      dst_ptr = (SBUFBASEADDRESS[s]);
 659   2                      memcpy(dst_ptr, src, size);
 660   2              } else
 661   1              {
 662   2                      //for (i = 0; i< len; i++) PutHTOA(src[i]);
 663   2                      //PutLTOA(len);
 664   2                      memcpy(dst_ptr, src, len);
 665   2              }
 666   1              return (len);
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 12  

 667   1      }
 668          
 669          #ifdef _DEF_IINCHIP_PPP
 670          /*
 671          * make PPPoE connection
 672          */
 673          unsigned char pppinit(unsigned char * id, unsigned char idlen, unsigned char * passwd, unsigned char passw
             -dlen)
 674          {
 675   1              unsigned int ii;
 676   1              unsigned char isr = 0;
 677   1              unsigned int wr_ptr;
 678   1              unsigned char * send_ptr;
 679   1              unsigned char xdata buf[1];
 680   1      
 681   1              // enable pppoe mode
 682   1              IINCHIP_WRITE(TMODE,IINCHIP_READ(TMODE) | TMODE_PPPOE);
 683   1      
 684   1              // open socket in pppoe mode
 685   1              isr = IINCHIP_READ(INT_STATUS(0));
 686   1              IINCHIP_WRITE(OPT_PROTOCOL(0),SOCK_PPPOEM);
 687   1              IINCHIP_WRITE(COMMAND(0),CSOCKINIT);
 688   1              wait_1us(1);
 689   1      
 690   1              // start to connect pppoe connection
 691   1              printf("1. Get PPPoE server information ");
 692   1              IINCHIP_WRITE(COMMAND(0),CCONNECT);
 693   1              
 694   1              ii = 0;
 695   1              // wait an authentication stage.
 696   1              while (1)
 697   1              {
 698   2                      isr = IINCHIP_READ(INT_STATUS(0));
 699   2                      // Ready to PPP Auth
 700   2                      if (isr & ISR_RECV) break;
 701   2                      ii++;printf(".");
 702   2                      wait_10ms(50);
 703   2                      if (ii==10)
 704   2                      {
 705   3                              printf("timeout\r\n");
 706   3                              return 3;
 707   3                      }
 708   2              }
 709   1              printf("\r\n");
 710   1              printf("2. Enter PPPoE Authentication mode : ");
 711   1      //      PutByte(id[0]);PutHTOA(idlen);PutByte(passwd[0]);PutHTOA(passwdlen);
 712   1      
 713   1              // pap mode
 714   1              if (IINCHIP_READ(PPPAUTH) == 0xc0 && IINCHIP_READ(PPPAUTH+1) == 0x23)
 715   1              {
 716   2                      printf("PAP");
 717   2      #ifndef _LITTLE_ENDIAN_
 718   2                      wr_ptr = IINCHIP_READ(TX_WR_PTR(0));
 719   2                      wr_ptr = ((wr_ptr & 0x00ff) << 8) + IINCHIP_READ(TX_WR_PTR(0) + 1);
 720   2      #else
                              wr_ptr = IINCHIP_READ(TX_WR_PTR(0)+1);
                              wr_ptr = ((wr_ptr & 0x00ff) << 8) + IINCHIP_READ(TX_WR_PTR(0));
              #endif
 724   2                      // copy (idlen + id + passwdlen + passwd)
 725   2                      send_ptr = (unsigned char *)(wr_ptr);
 726   2                      buf[0] = idlen;
 727   2                      write_data(0, buf, send_ptr, 0x01);
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 13  

 728   2                      send_ptr++;
 729   2                      write_data(0, id, send_ptr, idlen);
 730   2                      send_ptr += idlen;
 731   2                      buf[0] = passwdlen;
 732   2                      write_data(0, buf, send_ptr, 0x01);
 733   2                      send_ptr++;
 734   2                      write_data(0, passwd, send_ptr, passwdlen);
 735   2                      
 736   2                      wr_ptr = wr_ptr + idlen + passwdlen + 2;
 737   2      #ifndef _LITTLE_ENDIAN_
 738   2                      IINCHIP_WRITE(TX_WR_PTR(0),(unsigned char)((wr_ptr & 0xff00) >> 8));
 739   2                      IINCHIP_WRITE((TX_WR_PTR(0) + 1),(unsigned char)(wr_ptr & 0x00ff));
 740   2      #else
                              IINCHIP_WRITE((TX_WR_PTR(0)+1),(unsigned char)((wr_ptr & 0xff00) >> 8));
                              IINCHIP_WRITE(TX_WR_PTR(0),(unsigned char)(wr_ptr & 0x00ff));
              #endif
 744   2              }
 745   1              else
 746   1              {
 747   2                      printf("Not support\r\n");
 748   2      #ifdef _DEF_DRIVER_DBG
              //              printf("Not support PPP Auth type: %.2x%.2x\r\n",IINCHIP_READ(PPPAUTH), IINCHIP_READ(PPPAUTH+1));
              #endif
 751   2                      return 4;
 752   2              }
 753   1      
 754   1              printf("\r\n");
 755   1              printf("3. Wait PPPoE server's admission ");
 756   1              // send authentication data
 757   1              IINCHIP_WRITE(COMMAND(0),CSEND);
 758   1      
 759   1              ii = 0;
 760   1              // wait a connection stage
 761   1              while (1)
 762   1              {
 763   2                      isr = IINCHIP_READ(INT_STATUS(0));
 764   2                      // success to connect
 765   2                      if (isr & ISR_CON)
 766   2                      {
 767   3                              printf("ok");
 768   3                              break;
 769   3                      }
 770   2                      if (isr & ISR_TIMEOUT)
 771   2                      {
 772   3                              printf("failed\r\nReinput id, password..\r\n");
 773   3                              return 2;
 774   3                      }
 775   2                      ii++;printf(".");
 776   2                      wait_10ms(50);
 777   2                      if (ii==10) 
 778   2                      {
 779   3      #ifdef _DEF_DRIVER_DBG
                                      //printf("PPP timeout after LCP: %.2x\r\n",IINCHIP_READ(SOCK_STATUS(0)));
              #endif
 782   3                              printf("timeout\r\n");
 783   3                              return 3;
 784   3                      }
 785   2              }
 786   1      
 787   1              printf("\r\n");
 788   1              // close socket
 789   1              IINCHIP_WRITE(COMMAND(0),CCLOSE);
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 14  

 790   1              return 1;
 791   1              // after this function, User must save the pppoe server's mac address and pppoe session id in current con
             -nection
 792   1      }
 793          
 794          /*
 795          * terminate PPPoE connection
 796          */
 797          unsigned char pppterm(unsigned char * mac, unsigned int sessionid)
 798          {
 799   1              unsigned int i;
 800   1              unsigned char isr;
 801   1      #ifdef _DEF_DRIVER_DBG
                      printf("pppterm()\r\n");
              #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -