diff --git a/src/ble/mesh/adv_bearer.c b/src/ble/mesh/adv_bearer.c index db5476efe..aa96d8bdc 100644 --- a/src/ble/mesh/adv_bearer.c +++ b/src/ble/mesh/adv_bearer.c @@ -128,12 +128,14 @@ static void adv_bearer_packet_handler (uint8_t packet_type, uint16_t channel, ui if (client_callbacks[type_id]){ switch (type_id){ case PB_ADV_ID: - case MESH_BEACON_ID: (*client_callbacks[type_id])(packet_type, channel, packet, size); break; case MESH_MESSAGE_ID: (*client_callbacks[type_id])(MESH_NETWORK_PACKET, 0, (uint8_t*) &data[2], data_len-2); break; + case MESH_BEACON_ID: + (*client_callbacks[type_id])(MESH_BEACON_PACKET, 0, (uint8_t*) &data[2], data_len-2); + break; default: break; } diff --git a/src/ble/mesh/beacon.c b/src/ble/mesh/beacon.c index 8db7cf1e3..730175eca 100644 --- a/src/ble/mesh/beacon.c +++ b/src/ble/mesh/beacon.c @@ -62,30 +62,30 @@ static btstack_packet_handler_t unprovisioned_device_beacon_handler; static btstack_packet_handler_t secure_network_beacon_handler; static void beacon_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - - const uint8_t * data; uint8_t beacon[23]; - - if (packet_type != HCI_EVENT_PACKET) return; - switch(packet[0]){ - case HCI_EVENT_MESH_META: - switch(packet[2]){ - case MESH_SUBEVENT_CAN_SEND_NOW: - beacon[0] = BEACON_TYPE_UNPROVISIONED_DEVICE; - memcpy(&beacon[1], beacon_device_uuid, 16); - big_endian_store_16(beacon, 17, beacon_oob_information); - big_endian_store_32(beacon, 19, beacon_uri_hash); - adv_bearer_send_mesh_beacon(beacon, sizeof(beacon)); + switch (packet_type){ + case HCI_EVENT_PACKET: + switch(packet[0]){ + case HCI_EVENT_MESH_META: + switch(packet[2]){ + case MESH_SUBEVENT_CAN_SEND_NOW: + beacon[0] = BEACON_TYPE_UNPROVISIONED_DEVICE; + memcpy(&beacon[1], beacon_device_uuid, 16); + big_endian_store_16(beacon, 17, beacon_oob_information); + big_endian_store_32(beacon, 19, beacon_uri_hash); + adv_bearer_send_mesh_beacon(beacon, sizeof(beacon)); + break; + default: + break; + } break; default: break; } break; - case GAP_EVENT_ADVERTISING_REPORT: - // check type - data = gap_event_advertising_report_get_data(packet); - log_info("beacon type %u", data[2]); - switch (data[2]){ + case MESH_BEACON_PACKET: + log_info("beacon type %u", packet[0]); + switch (packet[0]){ case BEACON_TYPE_UNPROVISIONED_DEVICE: if (unprovisioned_device_beacon_handler){ (*unprovisioned_device_beacon_handler)(packet_type, channel, packet, size); diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index 6d4c581f0..6a3a20aa0 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -202,22 +202,14 @@ static void mesh_message_handler (uint8_t packet_type, uint16_t channel, uint8_t } static void mesh_unprovisioned_beacon_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - if (packet_type != HCI_EVENT_PACKET) return; - uint8_t device_uuid[16]; + if (packet_type != MESH_BEACON_PACKET) return; + uint8_t device_uuid[16]; uint16_t oob; - const uint8_t * data; - switch(packet[0]){ - case GAP_EVENT_ADVERTISING_REPORT: - data = gap_event_advertising_report_get_data(packet); - memcpy(device_uuid, &packet[15], 16); - oob = big_endian_read_16(data, 31); - printf("received unprovisioned device beacon, oob data %x, device uuid: ", oob); - printf_hexdump(device_uuid, 16); - pb_adv_create_link(device_uuid); - break; - default: - break; - } + memcpy(device_uuid, &packet[1], 16); + oob = big_endian_read_16(packet, 17); + printf("received unprovisioned device beacon, oob data %x, device uuid: ", oob); + printf_hexdump(device_uuid, 16); + pb_adv_create_link(device_uuid); } uint8_t pts_device_uuid[16]; diff --git a/test/mesh/provisioner.c b/test/mesh/provisioner.c index fdc524179..6ab03f167 100644 --- a/test/mesh/provisioner.c +++ b/test/mesh/provisioner.c @@ -240,43 +240,18 @@ static void mesh_message_handler (uint8_t packet_type, uint16_t channel, uint8_t static uint8_t device_uuid[16]; static void mesh_unprovisioned_beacon_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - if (packet_type != HCI_EVENT_PACKET) return; + if (packet_type != MESH_BEACON_PACKET) return; uint16_t oob; - const uint8_t * data; - switch(packet[0]){ - case GAP_EVENT_ADVERTISING_REPORT: - data = gap_event_advertising_report_get_data(packet); - memcpy(device_uuid, &packet[15], 16); - oob = big_endian_read_16(data, 31); - printf("received unprovisioned device beacon, oob data %x, device uuid: ", oob); - printf_hexdump(device_uuid, 16); - pb_adv_cid = pb_adv_create_link(device_uuid); - break; - default: - break; - } + memcpy(device_uuid, &packet[1], 16); + oob = big_endian_read_16(packet, 17); + printf("received unprovisioned device beacon, oob data %x, device uuid: ", oob); + printf_hexdump(device_uuid, 16); + pb_adv_create_link(device_uuid); } uint8_t pts_device_uuid[16]; const char * pts_device_uuid_string = "001BDC0810210B0E0A0C000B0E0A0C00"; -static uint8_t adv_prov_invite_pdu[] = { 0x00, 0x00 }; -static uint8_t adv_prov_start_pdu[] = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}; -static uint8_t adv_prov_public_key_pdu[65]; - -static btstack_crypto_aes128_cmac_t mesh_cmac_request; -static uint8_t mesh_secure_network_beacon[22]; -static uint8_t mesh_secure_network_beacon_auth_value[16]; - -static void mesh_secure_network_beacon_auth_value_calculated(void * arg){ - UNUSED(arg); - memcpy(&mesh_secure_network_beacon[14], mesh_secure_network_beacon_auth_value, 8); - printf("Secure Network Beacon\n"); - printf("- "); - printf_hexdump(mesh_secure_network_beacon, sizeof(mesh_secure_network_beacon)); - adv_bearer_send_mesh_beacon(mesh_secure_network_beacon, sizeof(mesh_secure_network_beacon)); -} - static void stdin_process(char cmd){ if (ui_chars_for_pin){ printf("%c", cmd);