mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
bluetooth/filter: add more OGF into ble blacklist
Change-Id: I4f1b98dc63ab2d9eeb523b8040aae88ea285bb9a Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#define HCI_RECVBUF_SIZE 4096
|
||||
#define HCI_RECVBUF_SIZE 8192
|
||||
#define HCI_SENDBUF_SIZE 1024
|
||||
#define HCI_NPOLLWAITERS 2
|
||||
|
||||
@@ -76,7 +76,7 @@ struct bt_uart_bridge_s
|
||||
sem_t sendlock;
|
||||
|
||||
struct file filep;
|
||||
char tmpbuf[HCI_RECVBUF_SIZE];
|
||||
char tmpbuf[1024];
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
@@ -251,13 +251,49 @@ bool bt_uart_filter_forward_recv(FAR struct bt_uart_filter_s *filter,
|
||||
case BT_HCI_EVT_CMD_COMPLETE:
|
||||
{
|
||||
FAR struct hci_evt_cmd_complete_s *evt;
|
||||
uint8_t ogf;
|
||||
|
||||
evt = (FAR void *)&buffer[3];
|
||||
ogf = evt->opcode >> 10;
|
||||
|
||||
if (BT_OGF_BASEBAND == (evt->opcode >> 10))
|
||||
if (BT_OGF_BASEBAND == ogf ||
|
||||
BT_OGF_LINK_CTRL == ogf ||
|
||||
BT_OGF_INFO == ogf)
|
||||
{
|
||||
return bt_uart_filter_free_opcode(filter, evt->opcode);
|
||||
}
|
||||
else if (BT_OGF_LINK_POLICY == ogf ||
|
||||
BT_OGF_STATUS == ogf)
|
||||
{
|
||||
if (filter->type == BT_UART_FILTER_TYPE_BLE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BT_HCI_EVT_CMD_STATUS:
|
||||
{
|
||||
FAR struct bt_hci_evt_cmd_status_s *stat;
|
||||
uint8_t ogf;
|
||||
|
||||
stat = (FAR void *)&buffer[3];
|
||||
ogf = stat->opcode >> 10;
|
||||
|
||||
if (BT_OGF_BASEBAND == ogf ||
|
||||
BT_OGF_LINK_CTRL == ogf ||
|
||||
BT_OGF_INFO == ogf)
|
||||
{
|
||||
return bt_uart_filter_free_opcode(filter, stat->opcode);
|
||||
}
|
||||
if (BT_OGF_LINK_POLICY == ogf ||
|
||||
BT_OGF_STATUS == ogf)
|
||||
{
|
||||
if (filter->type == BT_UART_FILTER_TYPE_BLE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -284,6 +320,7 @@ bool bt_uart_filter_forward_send(FAR struct bt_uart_filter_s *filter,
|
||||
if (buffer[0] == H4_CMD)
|
||||
{
|
||||
opcode = (uint16_t)buffer[2] << 8 | (uint16_t)buffer[1];
|
||||
ogf = buffer[2] >> 2;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
@@ -302,22 +339,23 @@ bool bt_uart_filter_forward_send(FAR struct bt_uart_filter_s *filter,
|
||||
break;
|
||||
}
|
||||
|
||||
ogf = buffer[2] >> 2;
|
||||
if (BT_OGF_BASEBAND == ogf)
|
||||
if (BT_OGF_BASEBAND == ogf ||
|
||||
BT_OGF_LINK_CTRL == ogf ||
|
||||
BT_OGF_INFO == ogf)
|
||||
{
|
||||
if (!bt_uart_filter_alloc_opcode(filter, opcode))
|
||||
{
|
||||
nerr("Unable to set opcode 0x%04x.\n", opcode);
|
||||
{
|
||||
nerr("Unable to set opcode 0x%04x.\n", opcode);
|
||||
|
||||
for (i = 0; i < BT_UART_FILTER_OPCODE_COUNT; i++)
|
||||
{
|
||||
nerr("PENDING opcode: %04x.\n", filter->opcode[i]);
|
||||
}
|
||||
for (i = 0; i < BT_UART_FILTER_OPCODE_COUNT; i++)
|
||||
{
|
||||
nerr("PENDING opcode: %04x.\n", filter->opcode[i]);
|
||||
}
|
||||
|
||||
memset(filter->opcode, 0, sizeof(filter->opcode));
|
||||
memset(filter->opcode, 0, sizeof(filter->opcode));
|
||||
|
||||
bt_uart_filter_alloc_opcode(filter, opcode);
|
||||
}
|
||||
bt_uart_filter_alloc_opcode(filter, opcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user