@@ -63,6 +63,8 @@ void Solo5Net::transmit(net::Packet_ptr pckt) {
6363 // explicitly release the data to prevent destructor being called
6464 net::Packet* pckt = tail.release ();
6565 uint8_t *buf = pckt->buf ();
66+
67+ printf (" Solo5 writing packet %i bytes \n " , pckt->size ());
6668 solo5_net_write_sync (buf, pckt->size ());
6769
6870 tail = std::move (next);
@@ -87,21 +89,33 @@ Solo5Net::create_packet(int link_offset)
8789}
8890
8991std::unique_ptr<Packet>
90- Solo5Net::recv_packet (uint8_t * data, uint16_t size )
92+ Solo5Net::recv_packet ()
9193{
9294 auto buffer = solo5_bufstore.get_buffer ();
9395 auto * pckt = (net::Packet*) buffer.addr ;
94-
96+ int size = MTU_;
9597 new (pckt) net::Packet (0 , size, MTU_, &solo5_bufstore);
9698 uint8_t *buf = pckt->buf ();
97- memcpy (buf, data, size);
98- return net::Packet_ptr (pckt);
99+ memset (buf, 0 , size);
100+ // Populate the packet buffer with new packet, if any
101+ if (solo5_net_read_sync (buf, &size) == 0 ) {
102+ // Adjust packet size to match received data
103+ // printf("Solo5 data size: %i \n", size);
104+ if (size) {
105+ pckt->set_data_end (size);
106+ // printf("Solo5 Packet size: %i \n", pckt->size());
107+ return net::Packet_ptr (pckt);
108+ }
109+ }
110+ printf (" Solo5 didn't get data. Size: %i \n " , size);
111+ return nullptr ;
99112}
100113
101- void Solo5Net::upstream_received_packet ( uint8_t *data, int len )
114+ void Solo5Net::poll ( )
102115{
103- auto pckt_ptr = recv_packet (data, len);
104- Link::receive (std::move (pckt_ptr));
116+ auto pckt_ptr = recv_packet ();
117+ if (pckt_ptr != nullptr )
118+ Link::receive (std::move (pckt_ptr));
105119}
106120
107121void Solo5Net::deactivate ()
0 commit comments