Skip to content

Commit 6207fdf

Browse files
committed
Remove buffers reusage to avoid conflicts
1 parent 5bd9b96 commit 6207fdf

File tree

13 files changed

+118
-107
lines changed

13 files changed

+118
-107
lines changed

.github/workflows/espidf.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
5252
mkdir -p $ESPIDF_BASE
5353
cd $ESPIDF_BASE
54-
platformio init -b az-delivery-devkit-v4 --project-option="framework=espidf" --project-option="build_flags=-DZENOH_ESPIDF -DZENOH_DEBUG=3"
54+
platformio init -b az-delivery-devkit-v4 -O "board_build.cmake_extra_args=-DZ_FEATURE_LINK_SERIAL=1" --project-option="framework=espidf" --project-option="build_flags=-DZENOH_ESPIDF -DZENOH_DEBUG=3"
5555
5656
cd $ESPIDF_BASE/lib
5757
ln -s $ZENOH_PICO_BASE

include/zenoh-pico/system/platform/arduino/esp32.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,7 @@ typedef struct {
4747
BluetoothSerial *_bts; // As pointer to cross the boundary between C and C++
4848
#endif
4949
#if Z_FEATURE_LINK_SERIAL == 1
50-
struct {
51-
HardwareSerial *_serial; // As pointer to cross the boundary between C and C++
52-
uint8_t *tmp_buf;
53-
uint8_t *raw_buf;
54-
};
50+
HardwareSerial *_serial; // As pointer to cross the boundary between C and C++
5551
#endif
5652
};
5753
} _z_sys_net_socket_t;

include/zenoh-pico/system/platform/espidf.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,7 @@ typedef struct {
5656
int _fd;
5757
#endif
5858
#if Z_FEATURE_LINK_SERIAL == 1
59-
struct {
60-
uart_port_t _serial;
61-
uint8_t *tmp_buf;
62-
uint8_t *raw_buf;
63-
};
59+
uart_port_t _serial;
6460
#endif
6561
};
6662
} _z_sys_net_socket_t;

include/zenoh-pico/system/platform/flipper.h

-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ typedef struct {
4444
#if Z_FEATURE_LINK_SERIAL == 1
4545
FuriStreamBuffer* _rx_stream;
4646
FuriHalSerialHandle* _serial;
47-
uint8_t* tmp_buf;
48-
uint8_t* raw_buf;
4947
#endif
5048
} _z_sys_net_socket_t;
5149

include/zenoh-pico/system/platform/mbed.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,7 @@ typedef struct {
5151
UDPSocket *_udp; // As pointer to cross the boundary between C and C++
5252
#endif
5353
#if Z_FEATURE_LINK_SERIAL == 1
54-
struct {
55-
BufferedSerial *_serial; // As pointer to cross the boundary between C and C++
56-
uint8_t *tmp_buf;
57-
uint8_t *raw_buf;
58-
};
54+
BufferedSerial *_serial; // As pointer to cross the boundary between C and C++
5955
#endif
6056
};
6157
} _z_sys_net_socket_t;

include/zenoh-pico/system/platform/rpi_pico.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,7 @@ typedef struct {
6161
int _fd;
6262
#endif
6363
#if Z_FEATURE_LINK_SERIAL == 1
64-
struct {
65-
uart_inst_t *_serial;
66-
uint8_t *tmp_buf;
67-
uint8_t *raw_buf;
68-
};
64+
uart_inst_t *_serial;
6965
#endif
7066
};
7167
} _z_sys_net_socket_t;

include/zenoh-pico/system/platform/zephyr.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,7 @@ typedef struct {
5050
int _fd;
5151
#endif
5252
#if Z_FEATURE_LINK_SERIAL == 1
53-
struct {
54-
const struct device *_serial;
55-
uint8_t *tmp_buf;
56-
uint8_t *raw_buf;
57-
};
53+
const struct device *_serial;
5854
#endif
5955
};
6056
} _z_sys_net_socket_t;

src/system/arduino/esp32/network.cpp

+19-14
Original file line numberDiff line numberDiff line change
@@ -685,9 +685,6 @@ z_result_t _z_open_serial_from_pins(_z_sys_net_socket_t *sock, uint32_t txpin, u
685685
}
686686
}
687687

688-
sock->tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
689-
sock->raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
690-
691688
return ret;
692689
}
693690

@@ -727,9 +724,6 @@ z_result_t _z_open_serial_from_dev(_z_sys_net_socket_t *sock, char *dev, uint32_
727724
return _Z_ERR_GENERIC;
728725
}
729726

730-
sock->tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
731-
sock->raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
732-
733727
return _z_connect_serial(*sock);
734728
}
735729

@@ -761,38 +755,49 @@ z_result_t _z_listen_serial_from_dev(_z_sys_net_socket_t *sock, char *dev, uint3
761755
void _z_close_serial(_z_sys_net_socket_t *sock) {
762756
sock->_serial->end();
763757
delete sock->_serial;
764-
z_free(sock->tmp_buf);
765-
z_free(sock->raw_buf);
766758
}
767759

768760
size_t _z_read_serial_internal(const _z_sys_net_socket_t sock, uint8_t *header, uint8_t *ptr, size_t len) {
761+
uint8_t *raw_buf = z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
769762
size_t rb = 0;
770763
for (size_t i = 0; i < _Z_SERIAL_MAX_COBS_BUF_SIZE; i++) {
771764
while (sock._serial->available() < 1) {
772765
z_sleep_ms(1); // FIXME: Yield by sleeping.
773766
}
774-
sock.raw_buf[i] = sock._serial->read();
767+
raw_buf[i] = sock._serial->read();
775768
rb = rb + (size_t)1;
776-
if (sock.raw_buf[i] == (uint8_t)0x00) {
769+
if (raw_buf[i] == (uint8_t)0x00) {
777770
break;
778771
}
779772
}
780773

781-
return _z_serial_msg_deserialize(sock.raw_buf, rb, ptr, len, header, sock.tmp_buf, _Z_SERIAL_MFS_SIZE);
774+
uint8_t *tmp_buf = z_malloc(_Z_SERIAL_MFS_SIZE);
775+
size_t ret = _z_serial_msg_deserialize(raw_buf, rb, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
776+
777+
z_free(raw_buf);
778+
z_free(tmp_buf);
779+
780+
return ret;
782781
}
783782

784783
size_t _z_send_serial_internal(const _z_sys_net_socket_t sock, uint8_t header, const uint8_t *ptr, size_t len) {
785-
size_t ret = _z_serial_msg_serialize(sock.raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, sock.tmp_buf,
786-
_Z_SERIAL_MFS_SIZE);
784+
uint8_t *tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
785+
uint8_t *raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
786+
size_t ret =
787+
_z_serial_msg_serialize(raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
788+
787789
if (ret == SIZE_MAX) {
788790
return ret;
789791
}
790792

791-
ssize_t wb = sock._serial->write(sock.raw_buf, ret);
793+
ssize_t wb = sock._serial->write(raw_buf, ret);
792794
if (wb != (ssize_t)ret) {
793795
ret = SIZE_MAX;
794796
}
795797

798+
z_free(raw_buf);
799+
z_free(tmp_buf);
800+
796801
return len;
797802
}
798803
#endif

src/system/espidf/network.c

+18-10
Original file line numberDiff line numberDiff line change
@@ -601,8 +601,6 @@ z_result_t _z_open_serial_from_dev(_z_sys_net_socket_t *sock, char *dev, uint32_
601601
QueueHandle_t uart_queue;
602602
uart_driver_install(sock->_serial, uart_buffer_size, 0, 100, &uart_queue, 0);
603603
uart_flush_input(sock->_serial);
604-
sock->tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
605-
sock->raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
606604

607605
return _z_connect_serial(*sock);
608606
}
@@ -636,22 +634,21 @@ void _z_close_serial(_z_sys_net_socket_t *sock) {
636634
uart_wait_tx_done(sock->_serial, 1000);
637635
uart_flush(sock->_serial);
638636
uart_driver_delete(sock->_serial);
639-
z_free(sock->tmp_buf);
640-
z_free(sock->raw_buf);
641637
}
642638

643639
size_t _z_read_serial_internal(const _z_sys_net_socket_t sock, uint8_t *header, uint8_t *ptr, size_t len) {
640+
uint8_t *raw_buf = z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
644641
size_t rb = 0;
645642
while (rb < _Z_SERIAL_MAX_COBS_BUF_SIZE) {
646-
int r = uart_read_bytes(sock._serial, &sock.raw_buf[rb], 1, 1000);
643+
int r = uart_read_bytes(sock._serial, &raw_buf[rb], 1, 1000);
647644
if (r == 0) {
648645
_Z_DEBUG("Timeout reading from serial");
649646
if (rb == 0) {
650647
return SIZE_MAX;
651648
}
652649
} else if (r == 1) {
653650
rb = rb + (size_t)1;
654-
if (sock.raw_buf[rb - 1] == (uint8_t)0x00) {
651+
if (raw_buf[rb - 1] == (uint8_t)0x00) {
655652
break;
656653
}
657654
} else {
@@ -660,22 +657,33 @@ size_t _z_read_serial_internal(const _z_sys_net_socket_t sock, uint8_t *header,
660657
}
661658
}
662659

663-
return _z_serial_msg_deserialize(sock.raw_buf, rb, ptr, len, header, sock.tmp_buf, _Z_SERIAL_MFS_SIZE);
660+
uint8_t *tmp_buf = z_malloc(_Z_SERIAL_MFS_SIZE);
661+
size_t ret = _z_serial_msg_deserialize(raw_buf, rb, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
662+
663+
z_free(raw_buf);
664+
z_free(tmp_buf);
665+
666+
return ret;
664667
}
665668

666669
size_t _z_send_serial_internal(const _z_sys_net_socket_t sock, uint8_t header, const uint8_t *ptr, size_t len) {
667-
size_t ret = _z_serial_msg_serialize(sock.raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, sock.tmp_buf,
668-
_Z_SERIAL_MFS_SIZE);
670+
uint8_t *tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
671+
uint8_t *raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
672+
size_t ret =
673+
_z_serial_msg_serialize(raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
669674

670675
if (ret == SIZE_MAX) {
671676
return ret;
672677
}
673678

674-
ssize_t wb = uart_write_bytes(sock._serial, sock.raw_buf, ret);
679+
ssize_t wb = uart_write_bytes(sock._serial, raw_buf, ret);
675680
if (wb != (ssize_t)ret) {
676681
ret = SIZE_MAX;
677682
}
678683

684+
z_free(raw_buf);
685+
z_free(tmp_buf);
686+
679687
return len;
680688
}
681689
#endif

src/system/flipper/network.c

+18-12
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,6 @@ z_result_t _z_open_serial_from_dev(_z_sys_net_socket_t* sock, char* dev, uint32_
7878

7979
_Z_DEBUG("Serial port opened: %s (%li)", dev, baudrate);
8080

81-
sock->tmp_buf = (uint8_t*)z_malloc(_Z_SERIAL_MFS_SIZE);
82-
sock->raw_buf = (uint8_t*)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
83-
8481
return _z_connect_serial(*sock);
8582
}
8683

@@ -116,42 +113,51 @@ void _z_close_serial(_z_sys_net_socket_t* sock) {
116113

117114
sock->_serial = 0;
118115
sock->_rx_stream = 0;
119-
120-
z_free(sock->tmp_buf);
121-
z_free(sock->raw_buf);
122116
}
123117
_Z_DEBUG("Serial port closed");
124118
}
125119

126120
size_t _z_read_serial_internal(const _z_sys_net_socket_t sock, uint8_t* header, uint8_t* ptr, size_t len) {
121+
uint8_t* raw_buf = z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
127122
size_t rb = 0;
128123
for (size_t i = 0; i < _Z_SERIAL_MAX_COBS_BUF_SIZE; i++) {
129124
size_t len = 0;
130-
len = furi_stream_buffer_receive(sock._rx_stream, &sock.raw_buf[i], 1, FLIPPER_SERIAL_TIMEOUT_MS);
125+
len = furi_stream_buffer_receive(sock._rx_stream, &raw_buf[i], 1, FLIPPER_SERIAL_TIMEOUT_MS);
131126
if (!len) {
132127
return SIZE_MAX;
133128
}
134129
rb++;
135130

136-
if (sock.raw_buf[i] == (uint8_t)0x00) {
131+
if (raw_buf[i] == (uint8_t)0x00) {
137132
break;
138133
}
139134
}
140135

141-
return _z_serial_msg_deserialize(sock.raw_buf, rb, ptr, len, header, sock.tmp_buf, _Z_SERIAL_MFS_SIZE);
136+
uint8_t* tmp_buf = z_malloc(_Z_SERIAL_MFS_SIZE);
137+
size_t ret = _z_serial_msg_deserialize(raw_buf, rb, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
138+
139+
z_free(raw_buf);
140+
z_free(tmp_buf);
141+
142+
return ret;
142143
}
143144

144145
size_t _z_send_serial_internal(const _z_sys_net_socket_t sock, uint8_t header, const uint8_t* ptr, size_t len) {
145-
size_t ret = _z_serial_msg_serialize(sock.raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, sock.tmp_buf,
146-
_Z_SERIAL_MFS_SIZE);
146+
uint8_t* tmp_buf = (uint8_t*)z_malloc(_Z_SERIAL_MFS_SIZE);
147+
uint8_t* raw_buf = (uint8_t*)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
148+
size_t ret =
149+
_z_serial_msg_serialize(raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
147150

148151
if (ret == SIZE_MAX) {
149152
return ret;
150153
}
151154

152-
furi_hal_serial_tx(sock._serial, sock.raw_buf, ret);
155+
furi_hal_serial_tx(sock._serial, raw_buf, ret);
153156
furi_hal_serial_tx_wait_complete(sock._serial);
154157

158+
z_free(raw_buf);
159+
z_free(tmp_buf);
160+
155161
return len;
156162
}
157163
#endif

src/system/mbed/network.cpp

+18-13
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,6 @@ z_result_t _z_open_serial_from_pins(_z_sys_net_socket_t *sock, uint32_t txpin, u
332332
ret = _Z_ERR_GENERIC;
333333
}
334334

335-
sock->tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
336-
sock->raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
337-
338335
return _z_connect_serial(*sock);
339336
}
340337

@@ -373,38 +370,46 @@ z_result_t _z_listen_serial_from_dev(_z_sys_net_socket_t *sock, char *device, ui
373370
return ret;
374371
}
375372

376-
void _z_close_serial(_z_sys_net_socket_t *sock) {
377-
delete sock->_serial;
378-
z_free(sock->tmp_buf);
379-
z_free(sock->raw_buf);
380-
}
373+
void _z_close_serial(_z_sys_net_socket_t *sock) { delete sock->_serial; }
381374

382375
size_t _z_read_serial(const _z_sys_net_socket_t sock, uint8_t *ptr, size_t len) {
376+
uint8_t *raw_buf = z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
383377
size_t rb = 0;
384378
for (size_t i = 0; i < _Z_SERIAL_MAX_COBS_BUF_SIZE; i++) {
385-
sock._serial->read(&sock.raw_buf[i], 1);
379+
sock._serial->read(&raw_buf[i], 1);
386380
rb++;
387381
if (before_cobs[i] == (uint8_t)0x00) {
388382
break;
389383
}
390384
}
391385

392-
return _z_serial_msg_deserialize(sock.raw_buf, rb, ptr, len, header, sock.tmp_buf, _Z_SERIAL_MFS_SIZE);
386+
uint8_t *tmp_buf = z_malloc(_Z_SERIAL_MFS_SIZE);
387+
size_t ret = _z_serial_msg_deserialize(raw_buf, rb, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
388+
389+
z_free(raw_buf);
390+
z_free(tmp_buf);
391+
392+
return ret;
393393
}
394394

395395
size_t _z_send_serial_internal(const _z_sys_net_socket_t sock, uint8_t header, const uint8_t *ptr, size_t len) {
396-
size_t ret = _z_serial_msg_serialize(sock.raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, sock.tmp_buf,
397-
_Z_SERIAL_MFS_SIZE);
396+
uint8_t *tmp_buf = (uint8_t *)z_malloc(_Z_SERIAL_MFS_SIZE);
397+
uint8_t *raw_buf = (uint8_t *)z_malloc(_Z_SERIAL_MAX_COBS_BUF_SIZE);
398+
size_t ret =
399+
_z_serial_msg_serialize(raw_buf, _Z_SERIAL_MAX_COBS_BUF_SIZE, ptr, len, header, tmp_buf, _Z_SERIAL_MFS_SIZE);
398400

399401
if (ret == SIZE_MAX) {
400402
return ret;
401403
}
402404

403-
ssize_t wb = sock._serial->write(after_cobs, sock.raw_buf, ret);
405+
ssize_t wb = sock._serial->write(after_cobs, raw_buf, ret);
404406
if (wb != (ssize_t)ret) {
405407
ret = SIZE_MAX;
406408
}
407409

410+
z_free(raw_buf);
411+
z_free(tmp_buf);
412+
408413
return len;
409414
}
410415
#endif

0 commit comments

Comments
 (0)