mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-13 15:41:17 +00:00
mesh: deliver Network PDU from ADV Bearer to Network as MESH_NETWORK_PACKET
This commit is contained in:
parent
14fe90b179
commit
33674932a6
@ -110,6 +110,7 @@ static void adv_bearer_packet_handler (uint8_t packet_type, uint16_t channel, ui
|
||||
if (gap_event_advertising_report_get_advertising_event_type(packet) != 0x03) break;
|
||||
data = gap_event_advertising_report_get_data(packet);
|
||||
data_len = gap_event_advertising_report_get_data_length(packet);
|
||||
|
||||
// log_info_hexdump(data, data_len);
|
||||
switch(data[1]){
|
||||
case BLUETOOTH_DATA_TYPE_MESH_MESSAGE:
|
||||
@ -125,7 +126,17 @@ static void adv_bearer_packet_handler (uint8_t packet_type, uint16_t channel, ui
|
||||
return;
|
||||
}
|
||||
if (client_callbacks[type_id]){
|
||||
(*client_callbacks[type_id])(packet_type, channel, packet, size);
|
||||
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;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -502,44 +502,37 @@ static void mesh_network_run(void){
|
||||
}
|
||||
|
||||
static void mesh_message_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||
if (packet_type != HCI_EVENT_PACKET) return;
|
||||
const uint8_t * adv_data;
|
||||
const uint8_t * pdu_data;
|
||||
uint8_t pdu_len;
|
||||
uint8_t adv_len;
|
||||
|
||||
mesh_network_pdu_t * network_pdu;
|
||||
mesh_provisioning_data_t provisioning_data;
|
||||
switch(packet[0]){
|
||||
case HCI_EVENT_MESH_META:
|
||||
switch(packet[2]){
|
||||
case MESH_SUBEVENT_CAN_SEND_NOW:
|
||||
if (btstack_linked_list_empty(&network_pdus_outgoing)) break;
|
||||
network_pdu = (mesh_network_pdu_t *) btstack_linked_list_pop(&network_pdus_outgoing);
|
||||
adv_bearer_send_mesh_message(network_pdu->data, network_pdu->len);
|
||||
btstack_memory_mesh_network_pdu_free(network_pdu);
|
||||
|
||||
switch (packet_type){
|
||||
case MESH_NETWORK_PACKET:
|
||||
// check len. minimal transport PDU len = 1, 32 bit NetMIC -> 13 bytes
|
||||
if (size < 13) break;
|
||||
|
||||
printf("received mesh message (len %u): ", size);
|
||||
printf_hexdump(packet, size);
|
||||
mesh_network_received_message(packet, size);
|
||||
break;
|
||||
|
||||
case HCI_EVENT_PACKET:
|
||||
switch(packet[0]){
|
||||
case HCI_EVENT_MESH_META:
|
||||
switch(packet[2]){
|
||||
case MESH_SUBEVENT_CAN_SEND_NOW:
|
||||
if (btstack_linked_list_empty(&network_pdus_outgoing)) break;
|
||||
network_pdu = (mesh_network_pdu_t *) btstack_linked_list_pop(&network_pdus_outgoing);
|
||||
adv_bearer_send_mesh_message(network_pdu->data, network_pdu->len);
|
||||
btstack_memory_mesh_network_pdu_free(network_pdu);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case GAP_EVENT_ADVERTISING_REPORT:
|
||||
adv_len = gap_event_advertising_report_get_data_length(packet);
|
||||
adv_data = gap_event_advertising_report_get_data(packet);
|
||||
// validate data item len
|
||||
pdu_len = adv_data[0] - 1;
|
||||
printf("adv len %u pdu len %u\n", adv_len, pdu_len);
|
||||
|
||||
if ((pdu_len + 2) > adv_len) break;
|
||||
if (pdu_len < 13) break; // transport PDU len = 0, 32 bit NetMIC
|
||||
|
||||
// get transport pdu
|
||||
pdu_data = &adv_data[2];
|
||||
printf("received mesh message: ");
|
||||
printf_hexdump(pdu_data, pdu_len);
|
||||
mesh_network_received_message(pdu_data, pdu_len);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user