mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-20 18:40:31 +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;
|
if (gap_event_advertising_report_get_advertising_event_type(packet) != 0x03) break;
|
||||||
data = gap_event_advertising_report_get_data(packet);
|
data = gap_event_advertising_report_get_data(packet);
|
||||||
data_len = gap_event_advertising_report_get_data_length(packet);
|
data_len = gap_event_advertising_report_get_data_length(packet);
|
||||||
|
|
||||||
// log_info_hexdump(data, data_len);
|
// log_info_hexdump(data, data_len);
|
||||||
switch(data[1]){
|
switch(data[1]){
|
||||||
case BLUETOOTH_DATA_TYPE_MESH_MESSAGE:
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (client_callbacks[type_id]){
|
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);
|
(*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;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -502,13 +502,20 @@ static void mesh_network_run(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void mesh_message_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
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_network_pdu_t * network_pdu;
|
||||||
mesh_provisioning_data_t provisioning_data;
|
|
||||||
|
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]){
|
switch(packet[0]){
|
||||||
case HCI_EVENT_MESH_META:
|
case HCI_EVENT_MESH_META:
|
||||||
switch(packet[2]){
|
switch(packet[2]){
|
||||||
@ -522,25 +529,11 @@ static void mesh_message_handler (uint8_t packet_type, uint16_t channel, uint8_t
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mesh_network_init(void){
|
void mesh_network_init(void){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user