summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-02-21 14:51:00 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-02-21 14:51:00 +0100
commitdef5cd8ad36f9dfedd48002c1d06d150d6b8120c (patch)
tree80927def2cb45e4a83cb5fc95e2020fd10689461 /test
parent9899b5bce6f644bf1002ef1403088ed65075735b (diff)
hciemu: Add support for setting simple pairing mode
Diffstat (limited to 'test')
-rw-r--r--test/hciemu.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/test/hciemu.c b/test/hciemu.c
index 75b2cf9f..1d10e4fe 100644
--- a/test/hciemu.c
+++ b/test/hciemu.c
@@ -58,6 +58,7 @@ struct vhci_device {
uint8_t features[8];
uint8_t name[248];
uint8_t dev_class[3];
+ uint8_t ssp_mode;
uint8_t inq_mode;
uint8_t eir_fec;
uint8_t eir_data[HCI_MAX_EIR_LENGTH];
@@ -623,6 +624,7 @@ static void hci_host_control(uint16_t ocf, int plen, uint8_t *data)
read_class_of_dev_rp cd;
read_inquiry_mode_rp im;
read_ext_inquiry_response_rp ir;
+ read_simple_pairing_mode_rp pm;
uint8_t status;
const uint16_t ogf = OGF_HOST_CTL;
@@ -709,6 +711,18 @@ static void hci_host_control(uint16_t ocf, int plen, uint8_t *data)
command_complete(ogf, ocf, 1, &status);
break;
+ case OCF_READ_SIMPLE_PAIRING_MODE:
+ pm.status = 0x00;
+ pm.mode = vdev.ssp_mode;
+ command_complete(ogf, ocf, sizeof(pm), &pm);
+ break;
+
+ case OCF_WRITE_SIMPLE_PAIRING_MODE:
+ status = 0x00;
+ vdev.ssp_mode = data[0];
+ command_complete(ogf, ocf, 1, &status);
+ break;
+
default:
status = 0x01;
command_complete(ogf, ocf, 1, &status);
@@ -1141,9 +1155,12 @@ int main(int argc, char *argv[])
vdev.features[3] = 0xfe;
vdev.features[4] = 0x9b;
vdev.features[5] = 0xf9;
- vdev.features[6] = 0x01;
+ vdev.features[6] = 0x00;
vdev.features[7] = 0x80;
+ vdev.features[6] |= 0x01; /* Extended Inquiry Response */
+ vdev.features[6] |= 0x08; /* Secure Simple Pairing */
+
memset(vdev.name, 0, sizeof(vdev.name));
strncpy((char *) vdev.name, "BlueZ (Virtual HCI)",
sizeof(vdev.name) - 1);
@@ -1152,6 +1169,7 @@ int main(int argc, char *argv[])
vdev.dev_class[1] = 0x00;
vdev.dev_class[2] = 0x00;
+ vdev.ssp_mode = 0x00;
vdev.inq_mode = 0x00;
vdev.eir_fec = 0x00;
memset(vdev.eir_data, 0, sizeof(vdev.eir_data));