This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

TCP "tcp_check_send" Problem

Hi
I use TCP library and my project work fine but when i receive a command from my client on PC and process data in my Embedded System it not work fine and tcp_check_send() return false!!!!
This condition repeat in both Server and Client mode. I feel when i receive an command i must send any act before response it???


void send_data (U8 socket,U8 protocol, U8 p2val, U8 command) {
  U8 *sendbuf;

  /* UDP */
  if (protocol == UDP) {
    /* Start Connection */
    sendbuf = udp_get_buf (SENDLEN);
                sendbuf[0] = DIVICE_ADDREES_H;
                sendbuf[1] = DIVICE_ADDREES_L;
                sendbuf[2] = command;
    sendbuf[3] = p2val;
    udp_send (socket, rem_add.IP, 1001, sendbuf, SENDLEN);
  }

  /* TCP */
  else if (protocol == TCP) {
    /* Start Connection */
    switch (tcp_get_state(socket)) {
      case TCP_STATE_FREE:
      case TCP_STATE_CLOSED:
        tcp_connect (socket, rem_add.IP, rem_add.PORT, 0);
        break;
      case TCP_STATE_CONNECT:
        if (tcp_check_send (socket) != __FALSE) {
          sendbuf = tcp_get_buf(SENDLEN);
          sendbuf[0] = DIVICE_ADDREES_H;
                                        sendbuf[1] = DIVICE_ADDREES_L;
                                        sendbuf[2] = command;
          sendbuf[3] = p2val;
          tcp_send (socket, sendbuf, SENDLEN);
        }
        break;
    }
  }
}

Parents
  • 
    U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
      /* This function is called by the TCP module on TCP event */
      /* Check the Net_Config.h for possible events.            */
    
      /* Make a reference to suppress compiler warnings. */
      soc = soc;
      par = par;
      evt = evt;
      ptr = ptr;
    
            if (soc != socket_tcp_client && soc != socket_tcp_server) {
        return (0);
      }
    
      switch (evt) {
        case TCP_EVT_DATA:
          /* TCP data frame has arrived, data is located at *par1, */
          /* data length is par2. Allocate buffer to send reply.   */
          procrec(soc,ptr);
          break;
    
        case TCP_EVT_CONREQ:
          /* Remote peer requested connect, accept it */
          return (1);
    
        case TCP_EVT_CONNECT:
          /* The TCP socket is connected */
          return (1);
      }
    
      return (0);
    }
    
    
    void procrec (U8 socket, U8 *buf) {
      U8 val=0;
    
      if(buf[0]!=DIVICE_ADDREES_H && buf[1]!=DIVICE_ADDREES_L){
        return;
      }
    
     switch (buf[2]) {
        case SET_OUT_AND:
          setOutVal (buf[3],1);
          break;
                    case SET_OUT_OR:
          setOutVal (buf[3],0);
          break;
                    case CLR_OUT:
          clrOutVal (buf[3]);
          break;
                    case QUERY_OUT:
                            val=getOutVal();
          send_data(socket,protocol,80,QUERY_OUT);
          break;
                    case QUERY_IN:
                            val=getInVal();
          send_data(socket,protocol,80,QUERY_IN);
          break;
      }
    }
    
    

Reply
  • 
    U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
      /* This function is called by the TCP module on TCP event */
      /* Check the Net_Config.h for possible events.            */
    
      /* Make a reference to suppress compiler warnings. */
      soc = soc;
      par = par;
      evt = evt;
      ptr = ptr;
    
            if (soc != socket_tcp_client && soc != socket_tcp_server) {
        return (0);
      }
    
      switch (evt) {
        case TCP_EVT_DATA:
          /* TCP data frame has arrived, data is located at *par1, */
          /* data length is par2. Allocate buffer to send reply.   */
          procrec(soc,ptr);
          break;
    
        case TCP_EVT_CONREQ:
          /* Remote peer requested connect, accept it */
          return (1);
    
        case TCP_EVT_CONNECT:
          /* The TCP socket is connected */
          return (1);
      }
    
      return (0);
    }
    
    
    void procrec (U8 socket, U8 *buf) {
      U8 val=0;
    
      if(buf[0]!=DIVICE_ADDREES_H && buf[1]!=DIVICE_ADDREES_L){
        return;
      }
    
     switch (buf[2]) {
        case SET_OUT_AND:
          setOutVal (buf[3],1);
          break;
                    case SET_OUT_OR:
          setOutVal (buf[3],0);
          break;
                    case CLR_OUT:
          clrOutVal (buf[3]);
          break;
                    case QUERY_OUT:
                            val=getOutVal();
          send_data(socket,protocol,80,QUERY_OUT);
          break;
                    case QUERY_IN:
                            val=getInVal();
          send_data(socket,protocol,80,QUERY_IN);
          break;
      }
    }
    
    

Children