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--; } } }
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; }
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 }
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; }
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"); } } }