ioLibrary for Cortex M series
loopback.c
Go to the documentation of this file.
1 
12 //#define FILE_LOG_SILENCE
14 
15 #define TX_RX_MAX_BUF_SIZE 1024
16 
17 
19 
20 
21 void loopback_tcps(uint8_t sock, uint16_t port)
22 {
23  int32_t ret;
24  int32_t SendLen, ReSendLen;
25 
26  ret = TCPRecv(sock, data_buf, TX_RX_MAX_BUF_SIZE);
27 
28  if(ret > 0){ // Received
29  SendLen = TCPSend(sock, data_buf, ret);
30 
31  if(SendLen < ret){
32  while(SendLen != ret){
33  ReSendLen = TCPReSend(sock);
34 
35  if(ReSendLen > 0){
36  SendLen += ReSendLen;
37 
38  } else if(ReSendLen == SOCKERR_WINDOW_FULL){
39  LOG("Window Full");
40  TCPClose(sock);
41  DBG("TCP Socket Close");
42  while(1);
43 
44  } else{
45  break;
46  }
47  }
48  }
49 
50  } else if(ret == SOCKERR_NOT_TCP){ // Not TCP Socket, It's UDP Socket
51  DBG("UDP Socket Close");
52  UDPClose(sock);
53  } else if(ret == SOCKERR_CLOSED){ // Socket Closed
54  LOGA("TCPS Loop-Back Started - sock(%d):port(%d)",(uint16_t)sock,port);
55  TCPServerOpen(sock, port);
56  }
57 
58  if(GetTCPSocketStatus(sock) == SOCKSTAT_CLOSE_WAIT){ // Close waiting
59  TCPClose(sock);
60  }
61 }
62 void loopback_tcpc(uint8_t sock, uint16_t port)
63 {
64  int32_t ret;
65  int32_t SendLen, ReSendLen;
66  uint8_t dip0[4] = {192, 168, 1, 200};
67  uint16_t dport0 = 5002;
68 
69  ret = TCPRecv(sock, data_buf, TX_RX_MAX_BUF_SIZE);
70  if(ret > 0){ // Received
71  SendLen = TCPSend(sock, data_buf, ret);
72 
73  if(SendLen < ret){
74  while(SendLen != ret){
75  ReSendLen = TCPReSend(sock);
76 
77  if(ReSendLen > 0){
78  SendLen += ReSendLen;
79 
80  } else if(ReSendLen == SOCKERR_WINDOW_FULL){
81  LOG("Window Full");
82  TCPClose(sock);
83  DBG("TCP Socket Close");
84  while(1);
85 
86  } else{
87  break;
88  }
89  }
90  }
91 
92  } else if(ret == SOCKERR_NOT_TCP){ // Not TCP Socket, It's UDP Socket
93  DBG("UDP Socket Close");
94  UDPClose(sock);
95  } else if(ret == SOCKERR_CLOSED){ // Socket Closed
96  LOGA("TCPC Loop-Back Started - sock(%d):port(%d)",(uint16_t)sock,port);
97  TCPClientOpen(sock, port,(uint8_t*)dip0,dport0);
98  }
99 
100  if(GetTCPSocketStatus(sock) == SOCKSTAT_CLOSE_WAIT){ // Close waiting
101  TCPClose(sock);
102  }
103 }
110 void loopback_udp(uint8_t sock, uint16_t port)
111 {
112  int32_t ret;
113  uint32_t destip = 0;
114  uint16_t destport;
115 
116  ret = UDPRecv(sock, data_buf, TX_RX_MAX_BUF_SIZE, (uint8_t*)&destip, &destport);
117 
118  if(ret > 0){ // Received
119  ret = UDPSend(sock, data_buf, ret, (uint8_t*)&destip ,destport);
120 
121  if(ret == SOCKERR_TIME_OUT){
122  ERR("Timeout");
123  UDPClose(sock);
124  DBG("UDP Socket Close");
125  }
126 
127  } else if(ret == SOCKERR_NOT_UDP){ // Not UDP Socket, It's TCP Socket
128  DBG("TCP Socket Close");
129  TCPClose(sock);
130  } else if(ret == SOCKERR_CLOSED){ // Socket Closed
131  LOGA("UDP Loop-Back Started - sock(%d):port(%d)",(uint16_t)sock, port);
132  UDPOpen(sock, port);
133  }
134 }
135 
136 
137