Account for max_packet_size in outgoing length

This commit is contained in:
Scott Shawcroft 2021-04-15 16:34:06 -07:00
parent aa28d4f315
commit 43c16c89c4
No known key found for this signature in database
GPG Key ID: 0DFD512649C052DA
1 changed files with 8 additions and 5 deletions

View File

@ -42,7 +42,8 @@
STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) { STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) {
if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) { if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) {
// This shouldn't happen. // This shouldn't happen but can if our buffer size was much smaller than
// the writes the client actually makes.
return; return;
} }
// Push all the data onto the ring buffer. // Push all the data onto the ring buffer.
@ -399,8 +400,9 @@ mp_int_t common_hal_bleio_packet_buffer_get_outgoing_packet_length(bleio_packet_
if (self->conn_handle != BLE_CONN_HANDLE_INVALID) { if (self->conn_handle != BLE_CONN_HANDLE_INVALID) {
bleio_connection_internal_t *connection = bleio_conn_handle_to_connection(self->conn_handle); bleio_connection_internal_t *connection = bleio_conn_handle_to_connection(self->conn_handle);
if (connection) { if (connection) {
return MIN(common_hal_bleio_connection_get_max_packet_length(connection), return MIN(MIN(common_hal_bleio_connection_get_max_packet_length(connection),
self->characteristic->max_length); self->max_packet_size),
self->characteristic->max_length);
} }
} }
// There's no current connection, so we don't know the MTU, and // There's no current connection, so we don't know the MTU, and
@ -415,11 +417,12 @@ mp_int_t common_hal_bleio_packet_buffer_get_outgoing_packet_length(bleio_packet_
if (self->conn_handle != BLE_CONN_HANDLE_INVALID) { if (self->conn_handle != BLE_CONN_HANDLE_INVALID) {
bleio_connection_internal_t *connection = bleio_conn_handle_to_connection(self->conn_handle); bleio_connection_internal_t *connection = bleio_conn_handle_to_connection(self->conn_handle);
if (connection) { if (connection) {
return common_hal_bleio_connection_get_max_packet_length(connection); return MIN(common_hal_bleio_connection_get_max_packet_length(connection),
self->max_packet_size);
} }
} }
} }
return self->characteristic->max_length; return MIN(self->characteristic->max_length, self->max_packet_size);
} }
bool common_hal_bleio_packet_buffer_deinited(bleio_packet_buffer_obj_t *self) { bool common_hal_bleio_packet_buffer_deinited(bleio_packet_buffer_obj_t *self) {