📄 socket.lst
字号:
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 + -