@@ -24,8 +24,7 @@ bool arduino_native_ethernet_udp_transport_open(
24
24
struct uxrCustomTransport *transport) {
25
25
struct micro_ros_agent_locator *locator =
26
26
(struct micro_ros_agent_locator *)transport->args ;
27
- udp_client.begin (locator->port );
28
- return true ;
27
+ return 1 == udp_client.begin (locator->port );
29
28
}
30
29
31
30
bool arduino_native_ethernet_udp_transport_close (
@@ -41,9 +40,12 @@ size_t arduino_native_ethernet_udp_transport_write(
41
40
struct micro_ros_agent_locator *locator =
42
41
(struct micro_ros_agent_locator *)transport->args ;
43
42
44
- udp_client.beginPacket (locator->address , locator->port );
45
- size_t sent = udp_client.write (buf, len);
46
- udp_client.endPacket ();
43
+ size_t sent = 0 ;
44
+ if (1 == udp_client.beginPacket (locator->address , locator->port )){
45
+ sent = udp_client.write (buf, len);
46
+ sent = 1 == udp_client.endPacket () ? sent : 0 ;
47
+ }
48
+
47
49
udp_client.flush ();
48
50
49
51
return sent;
@@ -53,33 +55,18 @@ size_t arduino_native_ethernet_udp_transport_read(
53
55
struct uxrCustomTransport *transport, uint8_t *buf, size_t len, int timeout,
54
56
uint8_t *errcode) {
55
57
(void )errcode;
56
- uint32_t start_time = millis ();
57
58
58
- while (millis () - start_time < ((uint32_t )timeout) &&
59
- udp_client.parsePacket () == 0 ) {
59
+ int64_t start_time = uxr_millis ();
60
+
61
+ while ((uxr_millis () - start_time) < ((int64_t )timeout) && udp_client.parsePacket () == 0 ) {
60
62
delay (1 );
61
63
}
62
64
63
- size_t readed = udp_client.read (buf, len);
64
- return (readed < 0 ) ? 0 : readed;
65
- }
66
-
67
- #define micro_rollover_useconds 4294967295
68
-
69
- int clock_gettime (clockid_t unused, struct timespec *tp) {
70
- (void )unused;
71
- static uint32_t rollover = 0 ;
72
- static uint32_t last_measure = 0 ;
73
-
74
- uint32_t m = micros ();
75
- rollover += (m < last_measure) ? 1 : 0 ;
76
-
77
- uint64_t real_us = (uint64_t )(m + rollover * micro_rollover_useconds);
78
- tp->tv_sec = real_us / 1000000 ;
79
- tp->tv_nsec = (real_us % 1000000 ) * 1000 ;
80
- last_measure = m;
81
-
82
- return 0 ;
65
+ size_t available = 0 ;
66
+ if (udp_client.available ()){
67
+ available = udp_client.read (buf, len);
68
+ }
69
+ return (available < 0 ) ? 0 : available;
83
70
}
84
71
}
85
72
0 commit comments