Loading system/hci/include/hci_layer.h +0 −2 Original line number Diff line number Diff line Loading @@ -33,13 +33,11 @@ #define MSG_SUB_EVT_MASK 0x00FF /* eq. BT_SUB_EVT_MASK */ /* Message event ID passed from Host/Controller lib to stack */ #define MSG_HC_TO_STACK_HCI_SCO 0x1200 /* eq. BT_EVT_TO_BTU_HCI_SCO */ #define MSG_HC_TO_STACK_HCI_ERR 0x1300 /* eq. BT_EVT_TO_BTU_HCIT_ERR */ #define MSG_HC_TO_STACK_HCI_ISO 0x1700 /* eq. BT_EVT_TO_BTU_HCI_ISO */ #define MSG_HC_TO_STACK_HCI_EVT 0x1000 /* eq. BT_EVT_TO_BTU_HCI_EVT */ /* Message event ID passed from stack to vendor lib */ #define MSG_STACK_TO_HC_HCI_SCO 0x2200 /* eq. BT_EVT_TO_LM_HCI_SCO */ #define MSG_STACK_TO_HC_HCI_ISO 0x2d00 /* eq. BT_EVT_TO_LM_HCI_ISO */ #define MSG_STACK_TO_HC_HCI_CMD 0x2000 /* eq. BT_EVT_TO_LM_HCI_CMD */ Loading system/stack/btm/btm_sco.cc +14 −39 Original line number Diff line number Diff line Loading @@ -101,25 +101,6 @@ static BT_HDR* WrapPacketAndCopy( return packet; } static void transmit_sco_fragment(const uint8_t* stream, size_t length) { uint16_t handle_with_flags; STREAM_TO_UINT16(handle_with_flags, stream); uint16_t handle = HCID_GET_HANDLE(handle_with_flags); ASSERT_LOG(handle <= HCI_HANDLE_MAX, "Require handle <= 0x%X, but is 0x%X", HCI_HANDLE_MAX, handle); length -= 2; // skip data total length stream += 1; length -= 1; auto payload = std::vector<uint8_t>(stream, stream + length); auto sco_packet = bluetooth::hci::ScoBuilder::Create( handle, bluetooth::hci::PacketStatusFlag::CORRECTLY_RECEIVED, std::move(payload)); pending_sco_data->Enqueue(std::move(sco_packet), bluetooth::shim::GetGdShimHandler()); } static void sco_data_callback() { if (hci_sco_queue_end == nullptr) { return; Loading @@ -130,11 +111,10 @@ static void sco_data_callback() { LOG_INFO("Dropping invalid packet of size %zu", packet->size()); return; } auto data = WrapPacketAndCopy(MSG_HC_TO_STACK_HCI_SCO, packet.get()); auto data = WrapPacketAndCopy(0x1200 /* delete next CL */, packet.get()); if (do_in_main_thread(FROM_HERE, base::Bind(&btm_route_sco_data, data)) != BT_STATUS_SUCCESS) { LOG(ERROR) << __func__ << ": do_in_main_thread failed from sco_data_callback"; LOG_ERROR("do_in_main_thread failed from sco_data_callback"); } } static void register_for_sco() { Loading Loading @@ -479,25 +459,20 @@ void btm_send_sco_packet(std::vector<uint8_t> data) { if (active_sco == nullptr || data.empty()) { return; } BT_HDR* packet = btm_sco_make_packet(std::move(data), active_sco->hci_handle); packet->event = BT_EVT_TO_LM_HCI_SCO; cpp::transmit_sco_fragment(packet->data + packet->offset, packet->len); } // Build a SCO packet from uint8 BT_HDR* btm_sco_make_packet(std::vector<uint8_t> data, uint16_t sco_handle) { ASSERT_LOG(data.size() <= BTM_SCO_DATA_SIZE_MAX, "Invalid SCO data size: %lu", (unsigned long)data.size()); BT_HDR* p_buf = (BT_HDR*)osi_calloc(BT_SMALL_BUFFER_SIZE); p_buf->event = BT_EVT_TO_LM_HCI_SCO; // SCO header size is 3 per Core 5.2 Vol 4 Part E 5.4.3 figure 5.3 p_buf->len = data.size() + 3; uint8_t* payload = p_buf->data; UINT16_TO_STREAM(payload, sco_handle); UINT8_TO_STREAM(payload, data.size()); ARRAY_TO_STREAM(payload, data.data(), static_cast<int>(data.size())); return p_buf; uint16_t handle_with_flags = active_sco->hci_handle; uint16_t handle = HCID_GET_HANDLE(handle_with_flags); ASSERT_LOG(handle <= HCI_HANDLE_MAX, "Require handle <= 0x%X, but is 0x%X", HCI_HANDLE_MAX, handle); auto sco_packet = bluetooth::hci::ScoBuilder::Create( handle, bluetooth::hci::PacketStatusFlag::CORRECTLY_RECEIVED, std::move(data)); cpp::pending_sco_data->Enqueue(std::move(sco_packet), bluetooth::shim::GetGdShimHandler()); } /******************************************************************************* Loading system/stack/btm/btm_sco.h +0 −3 Original line number Diff line number Diff line Loading @@ -224,8 +224,5 @@ typedef struct { void btm_sco_chk_pend_rolechange(uint16_t hci_handle); void btm_sco_disc_chk_pend_for_modechange(uint16_t hci_handle); /* Visible for test only */ BT_HDR* btm_sco_make_packet(std::vector<uint8_t> data, uint16_t sco_handle); /* Send a SCO packet */ void btm_send_sco_packet(std::vector<uint8_t> data); system/stack/test/btm/stack_btm_test.cc +0 −15 Original line number Diff line number Diff line Loading @@ -254,21 +254,6 @@ TEST_F(StackBtmWithQueuesTest, change_packet_type) { get_btm_client_interface().lifecycle.btm_free(); } TEST(ScoTest, make_sco_packet) { std::vector<uint8_t> data = {10, 20, 30}; uint16_t handle = 0xab; BT_HDR* p = btm_sco_make_packet(data, handle); ASSERT_EQ(p->event, BT_EVT_TO_LM_HCI_SCO); ASSERT_EQ(p->len, 3 + data.size()); ASSERT_EQ(p->data[0], 0xab); ASSERT_EQ(p->data[1], 0); ASSERT_EQ(p->data[2], 3); ASSERT_EQ(p->data[3], 10); ASSERT_EQ(p->data[4], 20); ASSERT_EQ(p->data[5], 30); osi_free(p); } TEST(BtmTest, BTM_EIR_MAX_SERVICES) { ASSERT_EQ(46, BTM_EIR_MAX_SERVICES); } } // namespace Loading Loading
system/hci/include/hci_layer.h +0 −2 Original line number Diff line number Diff line Loading @@ -33,13 +33,11 @@ #define MSG_SUB_EVT_MASK 0x00FF /* eq. BT_SUB_EVT_MASK */ /* Message event ID passed from Host/Controller lib to stack */ #define MSG_HC_TO_STACK_HCI_SCO 0x1200 /* eq. BT_EVT_TO_BTU_HCI_SCO */ #define MSG_HC_TO_STACK_HCI_ERR 0x1300 /* eq. BT_EVT_TO_BTU_HCIT_ERR */ #define MSG_HC_TO_STACK_HCI_ISO 0x1700 /* eq. BT_EVT_TO_BTU_HCI_ISO */ #define MSG_HC_TO_STACK_HCI_EVT 0x1000 /* eq. BT_EVT_TO_BTU_HCI_EVT */ /* Message event ID passed from stack to vendor lib */ #define MSG_STACK_TO_HC_HCI_SCO 0x2200 /* eq. BT_EVT_TO_LM_HCI_SCO */ #define MSG_STACK_TO_HC_HCI_ISO 0x2d00 /* eq. BT_EVT_TO_LM_HCI_ISO */ #define MSG_STACK_TO_HC_HCI_CMD 0x2000 /* eq. BT_EVT_TO_LM_HCI_CMD */ Loading
system/stack/btm/btm_sco.cc +14 −39 Original line number Diff line number Diff line Loading @@ -101,25 +101,6 @@ static BT_HDR* WrapPacketAndCopy( return packet; } static void transmit_sco_fragment(const uint8_t* stream, size_t length) { uint16_t handle_with_flags; STREAM_TO_UINT16(handle_with_flags, stream); uint16_t handle = HCID_GET_HANDLE(handle_with_flags); ASSERT_LOG(handle <= HCI_HANDLE_MAX, "Require handle <= 0x%X, but is 0x%X", HCI_HANDLE_MAX, handle); length -= 2; // skip data total length stream += 1; length -= 1; auto payload = std::vector<uint8_t>(stream, stream + length); auto sco_packet = bluetooth::hci::ScoBuilder::Create( handle, bluetooth::hci::PacketStatusFlag::CORRECTLY_RECEIVED, std::move(payload)); pending_sco_data->Enqueue(std::move(sco_packet), bluetooth::shim::GetGdShimHandler()); } static void sco_data_callback() { if (hci_sco_queue_end == nullptr) { return; Loading @@ -130,11 +111,10 @@ static void sco_data_callback() { LOG_INFO("Dropping invalid packet of size %zu", packet->size()); return; } auto data = WrapPacketAndCopy(MSG_HC_TO_STACK_HCI_SCO, packet.get()); auto data = WrapPacketAndCopy(0x1200 /* delete next CL */, packet.get()); if (do_in_main_thread(FROM_HERE, base::Bind(&btm_route_sco_data, data)) != BT_STATUS_SUCCESS) { LOG(ERROR) << __func__ << ": do_in_main_thread failed from sco_data_callback"; LOG_ERROR("do_in_main_thread failed from sco_data_callback"); } } static void register_for_sco() { Loading Loading @@ -479,25 +459,20 @@ void btm_send_sco_packet(std::vector<uint8_t> data) { if (active_sco == nullptr || data.empty()) { return; } BT_HDR* packet = btm_sco_make_packet(std::move(data), active_sco->hci_handle); packet->event = BT_EVT_TO_LM_HCI_SCO; cpp::transmit_sco_fragment(packet->data + packet->offset, packet->len); } // Build a SCO packet from uint8 BT_HDR* btm_sco_make_packet(std::vector<uint8_t> data, uint16_t sco_handle) { ASSERT_LOG(data.size() <= BTM_SCO_DATA_SIZE_MAX, "Invalid SCO data size: %lu", (unsigned long)data.size()); BT_HDR* p_buf = (BT_HDR*)osi_calloc(BT_SMALL_BUFFER_SIZE); p_buf->event = BT_EVT_TO_LM_HCI_SCO; // SCO header size is 3 per Core 5.2 Vol 4 Part E 5.4.3 figure 5.3 p_buf->len = data.size() + 3; uint8_t* payload = p_buf->data; UINT16_TO_STREAM(payload, sco_handle); UINT8_TO_STREAM(payload, data.size()); ARRAY_TO_STREAM(payload, data.data(), static_cast<int>(data.size())); return p_buf; uint16_t handle_with_flags = active_sco->hci_handle; uint16_t handle = HCID_GET_HANDLE(handle_with_flags); ASSERT_LOG(handle <= HCI_HANDLE_MAX, "Require handle <= 0x%X, but is 0x%X", HCI_HANDLE_MAX, handle); auto sco_packet = bluetooth::hci::ScoBuilder::Create( handle, bluetooth::hci::PacketStatusFlag::CORRECTLY_RECEIVED, std::move(data)); cpp::pending_sco_data->Enqueue(std::move(sco_packet), bluetooth::shim::GetGdShimHandler()); } /******************************************************************************* Loading
system/stack/btm/btm_sco.h +0 −3 Original line number Diff line number Diff line Loading @@ -224,8 +224,5 @@ typedef struct { void btm_sco_chk_pend_rolechange(uint16_t hci_handle); void btm_sco_disc_chk_pend_for_modechange(uint16_t hci_handle); /* Visible for test only */ BT_HDR* btm_sco_make_packet(std::vector<uint8_t> data, uint16_t sco_handle); /* Send a SCO packet */ void btm_send_sco_packet(std::vector<uint8_t> data);
system/stack/test/btm/stack_btm_test.cc +0 −15 Original line number Diff line number Diff line Loading @@ -254,21 +254,6 @@ TEST_F(StackBtmWithQueuesTest, change_packet_type) { get_btm_client_interface().lifecycle.btm_free(); } TEST(ScoTest, make_sco_packet) { std::vector<uint8_t> data = {10, 20, 30}; uint16_t handle = 0xab; BT_HDR* p = btm_sco_make_packet(data, handle); ASSERT_EQ(p->event, BT_EVT_TO_LM_HCI_SCO); ASSERT_EQ(p->len, 3 + data.size()); ASSERT_EQ(p->data[0], 0xab); ASSERT_EQ(p->data[1], 0); ASSERT_EQ(p->data[2], 3); ASSERT_EQ(p->data[3], 10); ASSERT_EQ(p->data[4], 20); ASSERT_EQ(p->data[5], 30); osi_free(p); } TEST(BtmTest, BTM_EIR_MAX_SERVICES) { ASSERT_EQ(46, BTM_EIR_MAX_SERVICES); } } // namespace Loading