Multithreaded-software/external/soem/oshw/linux/nicdrv.c
int ecx_srconfirm(ecx_portt *port, int idx, int timeout)
{
   int wkc = EC_NOFRAME;
   osal_timert timer1, timer2;

   osal_timer_start (&timer1, timeout);
   do
   {
      /* tx frame on primary and if in redundant mode a dummy on secondary */
      ecx_outframe_red(port, idx);
      if (timeout < EC_TIMEOUTRET)
      {
         osal_timer_start (&timer2, timeout);
      }
      else
      {
         /* normally use partial timout for rx */
         osal_timer_start (&timer2, EC_TIMEOUTRET);
      }
      /* get frame from primary or if in redundant mode possibly from secondary */
      wkc = ecx_waitinframe_red(port, idx, &timer2);
   /* wait for answer with WKC>=0 or otherwise retry until timeout */
   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
   /* if nothing received, clear buffer index status so it can be used again */
   if (wkc <= EC_NOFRAME)
   {
      ecx_setbufstat(port, idx, EC_BUF_EMPTY);
   }

   return wkc;
}
/** Blocking send and recieve frame function. Used for non processdata frames.
 * A datagram is build into a frame and transmitted via this function. It waits
 * for an answer and returns the workcounter. The function retries if time is
 * left and the result is WKC=0 or no frame received.
 *
 * The function calls ec_outframe_red() and ec_waitinframe_red().
 *
 * @param[in] port        = port context struct
 * @param[in] idx      = index of frame
 * @param[in] timeout  = timeout in us
 * @return Workcounter or EC_NOFRAME
 */
Blocking send and recieve frame function. Used for non processdata frames.
A datagram is build into a frame and transmitted via this function. It waits
for an answer and returns the workcounter. The function retries if time is
left and the result is WKC=0 or no frame received.



@param[in] port        = port context struct
@param[in] idx      = index of frame
@param[in] timeout  = timeout in us
@return Workcounter or EC_NOFRAME
Blocking send and recieve frame function . Used for non processdata frames . A datagram is build into a frame and transmitted via this function . It waits for an answer and returns the workcounter . The function retries if time is left and the result is WKC = 0 or no frame received . @param [ in ] port = port context struct @param [ in ] idx = index of frame @param [ in ] timeout = timeout in us @return Workcounter or EC_NOFRAME
int ecx_srconfirm(ecx_portt *port, int idx, int timeout)
{
   int wkc = EC_NOFRAME;
   osal_timert timer1, timer2;
   osal_timer_start (&timer1, timeout);
   do
   {
      ecx_outframe_red(port, idx);
      if (timeout < EC_TIMEOUTRET)
      {
         osal_timer_start (&timer2, timeout);
      }
      else
      {
         osal_timer_start (&timer2, EC_TIMEOUTRET);
      }
      wkc = ecx_waitinframe_red(port, idx, &timer2);
   } while ((wkc <= EC_NOFRAME) && !osal_timer_is_expired (&timer1));
   if (wkc <= EC_NOFRAME)
   {
      ecx_setbufstat(port, idx, EC_BUF_EMPTY);
   }
   return wkc;
}
int ecx_srconfirm ( ecx_portt * port , int idx , int timeout ) { int wkc = EC_NOFRAME ; osal_timert timer1 , timer2 ; osal_timer_start ( & timer1 , timeout ) ; do { ecx_outframe_red ( port , idx ) ; if ( timeout < EC_TIMEOUTRET ) { osal_timer_start ( & timer2 , timeout ) ; } else { osal_timer_start ( & timer2 , EC_TIMEOUTRET ) ; } wkc = ecx_waitinframe_red ( port , idx , & timer2 ) ; } while ( ( wkc <= EC_NOFRAME ) && ! osal_timer_is_expired ( & timer1 ) ) ; if ( wkc <= EC_NOFRAME ) { ecx_setbufstat ( port , idx , EC_BUF_EMPTY ) ; } return wkc ; }
Blocking send and recieve frame function.
Blocking send and recieve frame function .
/* tx frame on primary and if in redundant mode a dummy on secondary */ /* normally use partial timout for rx */ /* get frame from primary or if in redundant mode possibly from secondary */ /* wait for answer with WKC>=0 or otherwise retry until timeout */ /* if nothing received, clear buffer index status so it can be used again */