コード例 #1
0
ファイル: test.c プロジェクト: ArcEye/3.4.55-rtai
static void sender(long nothing)
{
	int diff = 0, warmup = 1000000000/WORKCYCLE;
	RTIME t, tb;
	struct sample { unsigned long cnt; RTIME tx, rx; } samp = { 0, 0, 0 };
	rt_printk("RtnetTest: Transmitter task initialised\n");

	tb = t = rt_get_real_time_ns();
	while(!end) {
		slen = sprintf(buffer_out, "%lld", t);
		slen = rt_dev_sendto(sock, buffer_out, slen, 0, (struct sockaddr*)&tx_addr, sizeof(tx_addr));

		if (slen < 0) {
			rt_printk("RtnetTest: Packet send failed! Errno %d\n", -slen);
			return;
		}
		rt_task_wait_period();
		t = rt_get_real_time_ns();
		if (!warmup) {
			diff = abs((int)(t - tb - WORKCYCLE));
			samp.cnt++;
			tb = t;
			if (diff > samp.rx) samp.rx = diff;
			rt_mbx_send_if(mbx, &samp, sizeof(samp));
		} else {
			tb = rt_get_real_time_ns();
			warmup--;
		}
	}
}
コード例 #2
0
GDC_return_codes GDCNetwork::sendMessage(GDCMsg & message, int card_number)
{
  ssize_t size;
  const char* payload;
  int length;


  if(card_number >= (int)gdc_card_states_.size())
  {
    printf("GDCNetwork::sendMessage>> ERROR trying to send a message to an invalid card, number =  %d\n", card_number);
    return SDC_CARD_UNDEFINED;
  }

  payload = message.getMessageToSend(&length);
  if (payload == NULL)
  {
    printf("GDCNetwork::sendMessage>> ERROR: gdcMsg payload is not valid (%p)\n", payload);
    return UDP_PAYLOAD_ERROR;
  }
  if (length <= 0 || length > MAX_MSG_SIZE)
  {
    printf("GDCNetwork::sendMessage>> ERROR: gdcMsg length is not valid (%i)\n", length);
    return UDP_MSG_LENGTH_ERROR;
  }

  size = rt_dev_sendto(sender_socket_, payload, length, 0,
                       (struct sockaddr*) (&remote_ip_address_[card_number]), sizeof(sockaddr_in));


  if(size != length)
  {
    if ((size == -EWOULDBLOCK) | (size == -EAGAIN))
    {
      printf("GDCNetwork::sendMessage>> ERROR timeout\n");
      return UDP_SEND_TIMEOUT;
    }
    else if (size < 0)
    {
      printf("GDCNetwork::sendMessage>> ERROR length=%i payload=%p port=%i ip=%s\n",
             length, payload, remote_ip_address_[card_number].sin_port,
             inet_ntoa(remote_ip_address_[card_number].sin_addr));

      printf("GDCNetwork::sendMessage>> ERROR: socket send sys call error: %d\n", (int)size);

      return UDP_SEND_SYSCALL_ERROR;
    }
    else
    {
      printf("GDCNetwork::sendMessage>> ERROR: socket did not sent enough bytes, payload length %d, sent %d\n", length, (int)size);
      return UDP_SEND_SIZE_ERROR;
    }
  }

  return SUCCESS;
}
コード例 #3
0
ファイル: aris_control_pipe.cpp プロジェクト: YinHuile/Aris
		int PipeBase::sendToNrtRawData(const void* pData, int size)
		{
#ifdef UNIX
			if (pData == nullptr)
			{
				throw std::runtime_error("SendRTtoNRT:Invalid pointer");
			}
			return rt_dev_sendto(pImp->FD_RT, pData, size, 0, NULL, 0);
#endif
#ifdef WIN32
			return 0;
#endif
		}
コード例 #4
0
GDC_return_codes GDCNetwork::sendMultiCastMessage(GDCMsg & message)
{
  ssize_t size;
  const char* payload;
  int length;

  payload = message.getMessageToSend(&length);
  if (payload == NULL)
  {
    printf("GDCNetwork::sendMultiCastMessage>> ERROR: gdcMsg payload is not valid (%p)\n", payload);
    return UDP_PAYLOAD_ERROR;
  }
  if (length <= 0 || length > MAX_MSG_SIZE)
  {
    printf("GDCNetwork::sendMultiCastMessage>> ERROR: gdcMsg length is not valid (%i)\n", length);
    return UDP_MSG_LENGTH_ERROR;
  }

  size = rt_dev_sendto(sender_socket_, payload, length, 0,
                       (struct sockaddr*) (&(multi_cast_ip_address_)), sizeof(sockaddr_in));

  if((int)size != length)
  {
    if ((size == -EWOULDBLOCK) | (size == -EAGAIN))
    {
      printf("GDCNetwork::sendMultiCastMessage>> ERROR timeout\n");
      return UDP_SEND_TIMEOUT;
    }
    else if (size < 0)
    {
      printf("GDCNetwork::sendMultiCastMessage>> length=%d payload=%s port=%d ip=%s\n",
             length, payload, multi_cast_ip_address_.sin_port, inet_ntoa(multi_cast_ip_address_.sin_addr));

      printf("GDCNetwork::sendMultiCastMessage>> ERROR: socket send sys call error: %d\n", (int)size);

      return UDP_SEND_SYSCALL_ERROR;
    }
    else
    {
      printf("GDCNetwork::sendMultiCastMessage>> ERROR: socket did not sent enough bytes, payload length %d, sent %d\n", length, (int)size);
      return UDP_SEND_SIZE_ERROR;
    }
  }

  return SUCCESS;
}
コード例 #5
0
ファイル: rtcansend.c プロジェクト: BhargavKola/xenomai-forge
static void rt_task(void)
{
    int i, j, ret;

    for (i = 0; i < loops; i++) {
	rt_task_sleep(rt_timer_ns2ticks(delay));
	if (count)
	    memcpy(&frame.data[0], &i, sizeof(i));
	/* Note: sendto avoids the definiton of a receive filter list */
	if (use_send)
	    ret = rt_dev_send(s, (void *)&frame, sizeof(can_frame_t), 0);
	else
	    ret = rt_dev_sendto(s, (void *)&frame, sizeof(can_frame_t), 0,
				(struct sockaddr *)&to_addr, sizeof(to_addr));
	if (ret < 0) {
	    switch (ret) {
	    case -ETIMEDOUT:
		if (verbose)
		    printf("rt_dev_send(to): timed out");
		break;
	    case -EBADF:
		if (verbose)
		    printf("rt_dev_send(to): aborted because socket was closed");
		break;
	    default:
		fprintf(stderr, "rt_dev_send: %s\n", strerror(-ret));
		break;
	    }
	    i = loops;		/* abort */
	    break;
	}
	if (verbose && (i % print) == 0) {
	    if (frame.can_id & CAN_EFF_FLAG)
		printf("<0x%08x>", frame.can_id & CAN_EFF_MASK);
	    else
		printf("<0x%03x>", frame.can_id & CAN_SFF_MASK);
	    printf(" [%d]", frame.can_dlc);
	    for (j = 0; j < frame.can_dlc; j++) {
		printf(" %02x", frame.data[j]);
	    }
	    printf("\n");
	}
    }
}