mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-13 15:41:17 +00:00
mesh: deliver Mesh Beacons from ADV Bearer to Beacon and higher layers as MESH_BEACON_PACKET
This commit is contained in:
parent
33674932a6
commit
4c8f56d7c4
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user