Андроид-устройства обычно поддерживают период до 10 мс, а устройства Apple — до 15 мс.
Это относится к размеру каждого пакета и количеству таких пакетов, которое можно отправить.
При периоде связи 15 миллисекунд, каждое базовое соединение может отправить 4 пакета (число пакетов зависит от устройства-источника).
Если длина PDU составляет 27 байт, то полезная нагрузка равна 20 байтам, и скорость передачи будет (1000 / 15) * 20 * 4 ≈ 5 КБ/с.
Если длина PDU составляет 251 байт, то полезная нагрузка равна 244 байтам, и скорость передачи будет (1000 / 15) * 244 * 4 ≈ 63 КБ/с. (Должны быть поддерживаемы оба устройства DLE и 2M)
#define ATT_LOCAL_MTU_SIZE (517) /* Размер локального MTU, диапазон: 23–517, конфигурация через интерфейс ble_vendor_set_default_att_mtu */
#define ATT_SEND_CBUF_SIZE (ATT_LOCAL_MTU_SIZE * 5) /* cbuf — это вторичный кэш контроллера для отправки пакетов */
Обычно клиентская сторона активирует обмен MTU; однако если клиент не активирует, сервер также может использовать интерфейс для активации обмена MTU (ble_api.h)
void att_server_set_exchange_mtu(u16 con_handle);
```/* Успешность изменения размера MTU отслеживается через событие ATT_EVENT_MTU_EXCHANGE_COMPLETE, которое включает значение нового размера MTU */
/* Успешность изменения периода связи отслеживается через событие HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE */
Ссылка: https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I4MEA5
static const struct conn_update_param_t trans_connection_param_table[] = {
{6, 9, 0, 400}, /* Параметры соединения, запрошенные Android */
{6, 12, 0, 400}, /* Параметры соединения, запрошенные iOS */
{16, 24, 0, 400},/* Параметры соединения, запрошенные iOS */
};
const int config_btctlr_le_rx_nums = 10; /* Максимальное количество пакетов данных, которые могут быть приняты за одну связь */
const int config_btctlr_le_acl_total_nums = 10; /* Максимальное количество пакетов данных, которые могут быть отправлены за одну связь */
```## 4. Включение поддержки расширения длины данных (Data Length Extension supported), сокращённо DLE, позволяющее настроить длину каждого PDU-пакета ACL в диапазоне 27–251 байт (основное устройство должно поддерживать Bluetooth версии 4.2 или выше)
```C
/* Функциональные возможности Bluetooth */
const uint64_t config_btctler_le_features = SET_ENCRYPTION_CFG | LE_DATA_PACKET_LENGTH_EXTENSION;
const int config_btctler_le_acl_packet_length = 251; /* Длина полезной нагрузки пакета данных, диапазон: 27–251 */
Как основное, так и вспомогательное устройства могут инициировать запрос DLE для обмена данными; обычно это делает основное устройство, можно использовать соответствующий интерфейс; для вспомогательного устройства вызывать этот интерфейс по умолчанию не требуется.
Если изменения вступили в силу, то есть соответствующее событие сообщение HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE.
Конкретные шаги вызова кода можно найти в SDK версии V2.2.1, где приведены примеры вызова.
int ble_comm_set_connection_data_length(u16 conn_handle, u16 tx_octets, u16 tx_time);
ble_comm_set_connection_data_length(conn_handle, config_btctler_le_acl_packet_length, 2120);
внимание: если вспомогательное устройство поддерживает характеристики DLE, размер ATT MTU, доступный обычно для смартфонов, также увеличивается. Дополнительно ATT_LOCAL_MTU_SIZE и config_btctler_le_acl_packet_length конфигурация связи, смотрите https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I599P4
/*Bluetooth версия features*/
const uint64_t config_btctler_le_features = SET_ENCRYPTION_CFG | LE_2M_PHY;
/*как основное, так и вспомогательное устройства могут инициировать запрос 2М пакета для обмена данными; обычно это делает основное устройство, можно использовать соответствующий интерфейс; для вспомогательного устройства вызывать этот интерфейс по умолчанию не требуется*/
/*если изменения вступили в силу, то есть соответствующее событие сообщение HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE*/
/*конкретные шаги вызова кода можно найти в SDK версии V2.2.1, где приведены примеры вызова*/
int ble_comm_set_connection_data_phy(u16 conn_handle, u8 tx_phy, u8 rx_phy, u16 phy_options);
ble_comm_set_connection_data_phy(conn_handle, CONN_SET_2M_PHY, CONN_SET_2M_PHY, CONN_SET_PHY_OPTIONS_NONE);
Вход Перед тем как оставить комментарий