diff --git a/example/Makefile.inc b/example/Makefile.inc index d5ace91fa..3e86cfa1c 100644 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@ -82,6 +82,7 @@ EXAMPLES = \ hsp_ag_demo \ hsp_hs_demo \ sm_pairing_peripheral \ + sm_pairing_central \ EXAMPLES_USING_LE = \ ancs_client_demo \ @@ -92,6 +93,7 @@ EXAMPLES_USING_LE = \ spp_and_le_counter \ gap_le_advertisements \ sm_pairing_peripheral \ + sm_pairing_central \ # .o for .c CORE_OBJ = $(CORE:.c=.o) @@ -137,6 +139,9 @@ le_counter: le_counter.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} sm_pairing_peripheral: sm_pairing_peripheral.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_REAL_OBJ} sm_pairing_peripheral.c ${CC} $(filter-out sm_pairing_peripheral.h,$^) ${CFLAGS} ${LDFLAGS} -o $@ +sm_pairing_central: ${CORE_OBJ} ${COMMON_OBJ} ${SM_REAL_OBJ} ad_parser.o sm_pairing_central.o + ${CC} ${CFLAGS} ${LDFLAGS} $^ -o $@ + le_streamer: le_streamer.h ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${GATT_SERVER_OBJ} ${SM_REAL_OBJ} le_streamer.c ${CC} $(filter-out le_streamer.h,$^) ${CFLAGS} ${LDFLAGS} -o $@ diff --git a/port/libusb/gap_le_connect_to_1111.c b/example/sm_pairing_central.c similarity index 78% rename from port/libusb/gap_le_connect_to_1111.c rename to example/sm_pairing_central.c index 85e99c285..6b0f2bfd9 100644 --- a/port/libusb/gap_le_connect_to_1111.c +++ b/example/sm_pairing_central.c @@ -37,10 +37,13 @@ // ***************************************************************************** -/* EXAMPLE_START(gap_le_connect_to_1111): GAP LE Advertisements Dumper +/* EXAMPLE_START(sm_pairing_central): LE Peripheral - Test pairing combinations * - * @text This example shows how to scan and parse advertisements. - * + * @text Depending on the Authentication requiremens and IO Capabilities, + * the pairing process uses different short and long term key generation method. + * This example helps explore the different options incl. LE Secure Connections. + * It scans for advertisements and connects to the first device that lists a + * random service. */ // ***************************************************************************** @@ -53,6 +56,12 @@ #include "btstack.h" + +// We're looking for a remote device that lists this service in the advertisement +// LightBlue assigns 0x1111 as the UUID for a Blank service. +#define REMOTE_SERVICE 0x1111 + + static btstack_packet_callback_registration_t hci_event_callback_registration; static btstack_packet_callback_registration_t sm_event_callback_registration; @@ -66,7 +75,7 @@ static btstack_packet_callback_registration_t sm_event_callback_registration; /* LISTING_START(GAPLEAdvSetup): Setting up GAP LE client for receiving advertisements */ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); -static void gap_le_connect_to_1111_setup(void){ +static void sm_pairing_central_setup(void){ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); @@ -79,21 +88,34 @@ static void gap_le_connect_to_1111_setup(void){ sm_init(); sm_event_callback_registration.callback = &packet_handler; sm_add_event_handler(&sm_event_callback_registration); - // Numeric Comparison - // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); - // Passkey entry initiator enter, responder displays - sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_ONLY); - sm_set_authentication_requirements(SM_AUTHREQ_MITM_PROTECTION); + + /** + * Choose ONE of the following configurations + */ + + // LE Legacy Pairing, Just Works + sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); + sm_set_authentication_requirements(0); + + // LE Legacy Pairing, Passkey entry initiator enter, responder (us) displays + // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_ONLY); + // sm_set_authentication_requirements(SM_AUTHREQ_MITM_PROTECTION); + #ifdef ENABLE_LE_SECURE_CONNECTIONS - sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION|SM_AUTHREQ_MITM_PROTECTION); - // Just Works (no MITM requested) + // LE Secure Connetions, Just Works + // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION); + + // LE Secure Connections, Numeric Comparison + // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); + // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION|SM_AUTHREQ_MITM_PROTECTION); + + // LE Legacy Pairing, Passkey entry initiator enter, responder (us) displays + // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_ONLY); + // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION|SM_AUTHREQ_MITM_PROTECTION); #endif } -/* LISTING_END */ - - /* LISTING_END */ /* @section HCI packet handler @@ -128,8 +150,8 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe printf("Advertisement event: addr-type %u, addr %s, data[%u] ", address_type, bd_addr_to_str(address), length); printf_hexdump(data, length); - if (!ad_data_contains_uuid16(length, (uint8_t *) data, 0x1111)) break; - printf("Found remtoe with UUID 1111, connecting...\n"); + if (!ad_data_contains_uuid16(length, (uint8_t *) data, REMOTE_SERVICE)) break; + printf("Found remote with UUID %04x, connecting...\n", REMOTE_SERVICE); gap_stop_scan(); gap_connect(address,address_type); break; @@ -162,7 +184,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe int btstack_main(void); int btstack_main(void) { - gap_le_connect_to_1111_setup(); + sm_pairing_central_setup(); // turn on! hci_power_control(HCI_POWER_ON); @@ -170,4 +192,4 @@ int btstack_main(void) return 0; } -/* EXAMPLE_END */ \ No newline at end of file +/* EXAMPLE_END */ diff --git a/port/libusb/Makefile b/port/libusb/Makefile index de3483ebd..340f8f02c 100644 --- a/port/libusb/Makefile +++ b/port/libusb/Makefile @@ -7,12 +7,6 @@ COMMON += hci_transport_h2_libusb.c btstack_run_loop_posix.c btstack_link_key_db include ${BTSTACK_ROOT}/example/Makefile.inc -# custom -EXAMPLES += gap_le_connect_to_1111 -gap_le_connect_to_1111: ${CORE_OBJ} ${COMMON_OBJ} ${ATT_OBJ} ${SM_REAL_OBJ} ad_parser.o gap_le_connect_to_1111.c - ${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@ - - # CC = gcc-fsf-4.9 CFLAGS += -g -Wall -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Werror # CFLAGS += -Werror