diff --git a/emulator/bthost.c b/emulator/bthost.c
index 2022e6b..4390082 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
bool reject_user_confirm;
void *smp_data;
bool conn_init;
+ bool sc;
};
struct bthost *bthost_create(void)
cp.handle = cpu_to_le16(handle);
send_command(bthost, BT_HCI_CMD_AUTH_REQUESTED, &cp, sizeof(cp));
} else {
- smp_pair(conn->smp_data, bthost->io_capability, bthost->auth_req);
+ uint8_t auth_req = bthost->auth_req;
+
+ if (bthost->sc)
+ auth_req |= 0x08;
+
+ smp_pair(conn->smp_data, bthost->io_capability, auth_req);
}
}
bthost->new_l2cap_conn_data = data;
}
+void bthost_set_sc_support(struct bthost *bthost, bool enable)
+{
+ struct bt_hci_cmd_write_secure_conn_support cmd;
+
+ bthost->sc = enable;
+
+ if (!lmp_bredr_capable(bthost))
+ return;
+
+ cmd.support = enable;
+ send_command(bthost, BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
+ &cmd, sizeof(cmd));
+}
+
void bthost_set_pin_code(struct bthost *bthost, const uint8_t *pin,
uint8_t pin_len)
{
uint8_t bthost_get_auth_req(struct bthost *bthost)
{
- return bthost->auth_req;
+ uint8_t auth_req = bthost->auth_req;
+
+ if (bthost->sc)
+ auth_req |= 0x08;
+
+ return auth_req;
}
void bthost_set_reject_user_confirm(struct bthost *bthost, bool reject)
diff --git a/emulator/bthost.h b/emulator/bthost.h
index c0fa410..6295c13 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
void bthost_add_l2cap_server(struct bthost *bthost, uint16_t psm,
bthost_l2cap_connect_cb func, void *user_data);
+void bthost_set_sc_support(struct bthost *bthost, bool enable);
+
void bthost_set_pin_code(struct bthost *bthost, const uint8_t *pin,
uint8_t pin_len);
void bthost_set_io_capability(struct bthost *bthost, uint8_t io_capability);