uint8 BCSPImplementation::startIO()
{
    uint8 retval = 0 ;
    int  err ;
    if ((!mXMITBusy) && (mXMITBytesAvailable))
    {
        mXMITBusy = true ;
        mLastXmitTime = ms_clock() ;
        if ( mFile->write(mXMITBuffer,mXMITBytesAvailable,&mXMITbytesWritten) )
        {
            //function succeeded immediately
            mXMITBusy = false ;
            retval =1 ;
        }
        else if ( ( err = mFile->LastError() ) )
        {
            mXMITBusy = false ;
            BTRACE1(WINERR,"WriteFile error %d\n",err) ;
            BTRACE1(WINERR,"bytesavail = %d",mXMITBytesAvailable);
            BTRACE1(WINERR,"byteswritten = %d",mXMITbytesWritten);
        }
    }

    if ((!mRCVBusy)  && (!mRCVBytesAvailable))
    {        
        //Now try to read some chars from the uart.
        uint16 bytesToGet = numFreeSlotsInReceiveBuffer(mStack) ;
        mRCVBusy = true ;
        if ( mFile->read( mRCVBuffer , bytesToGet , &mRCVBytesAvailable ) )
        {
            mRCVBusy = false ;
            retval =1 ;
        }
        else if ( (err = mFile->LastError()) )
        {
            mRCVBusy = false ;
            BTRACE1(WINERR,"ReadFile error %d\n",err) ;
        }
    }

    return retval ; //indicate that we need to wait for some io to complete or not
}
Пример #2
0
//##ModelId=43586653005E
int CChennel::OpenChennel()
{
	    /* Get a TCP socket */
  struct sockaddr_in	stLclAddr;      /* Sockets Address Structure */

#ifdef SOCKET_TRACE
	mprintf("Open Connection [%s:%d]",mPorts[index].sIp,mPorts[index].iHPort);
#endif
	if (mHandle !=INVALID_SOCKET ){
		shutdown(mHandle,2);
		closesocket (mHandle);
		mHandle=INVALID_SOCKET;
	}

    memset(&stLclAddr,0,sizeof(stLclAddr));
     /* Get IP Address from a hostname (or IP address string in dot-notation) */

  mHandle = socket (AF_INET, SOCK_STREAM, 0);
  if (mHandle ==INVALID_SOCKET)  {
	mprintf("Open Socket Failure\n");
	return -1;
  }
   /* Initialize the Sockets Internet Address (sockaddr_in) structure */
   stLclAddr.sin_addr.s_addr =inet_addr(mAddr);
   stLclAddr.sin_family      = AF_INET;      /* Internet Address Family */
   stLclAddr.sin_port        = htons(mPort);  /* TCP Echo Port */

   if (connect(mHandle,(struct sockaddr*)&stLclAddr,sizeof(stLclAddr)) < 0) {
       mprintf("fail Connect to %s:%u\n",mAddr,mPort );
	   closesocket (mHandle);
	   mHandle=INVALID_SOCKET;
	   return -1;
   }
   u_long ch = 1;
   if( ioctlsocket ( mHandle,FIONBIO,&ch)<0){
      mprintf("Set Socket to nonblocking failure\n");
      CloseChennel();
      return -1;
   }

#ifdef SOCKET_TRACE
   BTRACE1("Connect OK socket is %d!!",mPorts[index].wTcpSock);
#endif   
	RESET_TIME_INTERVAL(mTP);
   return 1;

}