mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 04:20:33 +00:00
mesh: replace network_header in mesh_segmented_pdu by individual fields
This commit is contained in:
parent
a249589839
commit
7cb45abf1b
@ -89,22 +89,22 @@ static void mesh_lower_transport_report_segments_as_processed(mesh_segmented_pdu
|
||||
}
|
||||
|
||||
uint16_t mesh_message_nid(mesh_segmented_pdu_t * message_pdu){
|
||||
return message_pdu->network_header[0] & 0x7f;
|
||||
return message_pdu->ivi_nid & 0x7f;
|
||||
}
|
||||
uint16_t mesh_message_ctl(mesh_segmented_pdu_t * message_pdu){
|
||||
return message_pdu->network_header[1] >> 7;
|
||||
return message_pdu->ctl_ttl >> 7;
|
||||
}
|
||||
static uint16_t mesh_message_ttl(mesh_segmented_pdu_t * message_pdu){
|
||||
return message_pdu->network_header[1] & 0x7f;
|
||||
return message_pdu->ctl_ttl & 0x7f;
|
||||
}
|
||||
static uint32_t mesh_message_seq(mesh_segmented_pdu_t * message_pdu){
|
||||
return big_endian_read_24(message_pdu->network_header, 2);
|
||||
return message_pdu->seq;
|
||||
}
|
||||
static uint16_t mesh_message_src(mesh_segmented_pdu_t * message_pdu){
|
||||
return big_endian_read_16(message_pdu->network_header, 5);
|
||||
return message_pdu->src;
|
||||
}
|
||||
static uint16_t mesh_message_dest(mesh_segmented_pdu_t * message_pdu){
|
||||
return big_endian_read_16(message_pdu->network_header, 7);
|
||||
return message_pdu->dst;
|
||||
}
|
||||
static uint32_t mesh_message_seq_zero(mesh_segmented_pdu_t * message_pdu){
|
||||
return message_pdu->seq_zero;
|
||||
@ -479,9 +479,12 @@ static mesh_segmented_pdu_t * mesh_lower_transport_pdu_for_segmented_message(mes
|
||||
if (!pdu) return NULL;
|
||||
|
||||
// cache network pdu header
|
||||
(void)memcpy(pdu->network_header, network_pdu->data, 9);
|
||||
pdu->ivi_nid = network_pdu->data[0];
|
||||
pdu->ctl_ttl = network_pdu->data[1];
|
||||
pdu->src = big_endian_read_16(network_pdu->data, 5);
|
||||
pdu->dst = big_endian_read_16(network_pdu->data, 7);
|
||||
// store lower 24 bit of SeqAuth for App / Device Nonce
|
||||
big_endian_store_24(pdu->network_header, 2, seq_auth);
|
||||
pdu->seq = seq_auth;
|
||||
|
||||
// store meta data in new pdu
|
||||
pdu->netkey_index = network_pdu->netkey_index;
|
||||
|
@ -109,19 +109,14 @@ typedef struct mesh_network_pdu {
|
||||
#define MESH_TRANSPORT_FLAG_SEQ_RESERVED 1
|
||||
#define MESH_TRANSPORT_FLAG_CONTROL 2
|
||||
|
||||
typedef struct {
|
||||
// generic pdu header
|
||||
mesh_pdu_t pdu_header;
|
||||
// meta data transport layer
|
||||
uint16_t appkey_index;
|
||||
// MESH_TRANSPORT_FLAG
|
||||
uint16_t flags;
|
||||
// pdu segment
|
||||
mesh_network_pdu_t * segment;
|
||||
} mesh_unsegmented_pdu_t;
|
||||
|
||||
typedef struct {
|
||||
mesh_pdu_t pdu_header;
|
||||
// network header
|
||||
uint8_t ivi_nid;
|
||||
uint8_t ctl_ttl;
|
||||
uint16_t src;
|
||||
uint16_t dst;
|
||||
uint32_t seq;
|
||||
|
||||
// rx/tx: acknowledgement timer / segment transmission timer
|
||||
btstack_timer_source_t acknowledgement_timer;
|
||||
@ -137,8 +132,6 @@ typedef struct {
|
||||
uint8_t transmic_len;
|
||||
// akf - aid for access, opcode for control
|
||||
uint8_t akf_aid_control;
|
||||
// network pdu header
|
||||
uint8_t network_header[9];
|
||||
// MESH_TRANSPORT_FLAG
|
||||
uint16_t flags;
|
||||
// acknowledgement timer active
|
||||
@ -203,15 +196,11 @@ typedef struct {
|
||||
typedef struct {
|
||||
// generic pdu header
|
||||
mesh_pdu_t pdu_header;
|
||||
// ivi_nid
|
||||
// network header
|
||||
uint8_t ivi_nid;
|
||||
// ctl_ttl
|
||||
uint8_t ctl_ttl;
|
||||
// src
|
||||
uint16_t src;
|
||||
// dst
|
||||
uint16_t dst;
|
||||
// seq
|
||||
uint32_t seq;
|
||||
// meta data network layer
|
||||
uint16_t netkey_index;
|
||||
|
@ -541,11 +541,11 @@ static void mesh_upper_transport_send_access_segmented(mesh_upper_transport_pdu_
|
||||
// setup segmented_pdu header
|
||||
// (void)memcpy(segmented_pdu->network_header, upper_pdu->network_header, 9);
|
||||
// TODO: use fields in mesh_segmented_pdu_t and setup network header in lower transport
|
||||
segmented_pdu->network_header[0] = upper_pdu->ivi_nid;
|
||||
segmented_pdu->network_header[1] = upper_pdu->ctl_ttl;
|
||||
big_endian_store_24(segmented_pdu->network_header, 2, upper_pdu->seq);
|
||||
big_endian_store_16(segmented_pdu->network_header, 5, upper_pdu->src);
|
||||
big_endian_store_16(segmented_pdu->network_header, 7, upper_pdu->dst);
|
||||
segmented_pdu->ivi_nid = upper_pdu->ivi_nid;
|
||||
segmented_pdu->ctl_ttl = upper_pdu->ctl_ttl;
|
||||
segmented_pdu->seq = upper_pdu->seq;
|
||||
segmented_pdu->src = upper_pdu->src;
|
||||
segmented_pdu->dst = upper_pdu->dst;
|
||||
|
||||
// queue up
|
||||
upper_pdu->lower_pdu = (mesh_pdu_t *) segmented_pdu;
|
||||
@ -722,11 +722,11 @@ static void mesh_upper_transport_send_segmented_control_pdu(mesh_upper_transport
|
||||
|
||||
// setup segmented_pdu header
|
||||
// TODO: use fields in mesh_segmented_pdu_t and setup network header in lower transport
|
||||
segmented_pdu->network_header[0] = upper_pdu->ivi_nid;
|
||||
segmented_pdu->network_header[1] = upper_pdu->ctl_ttl;
|
||||
big_endian_store_24(segmented_pdu->network_header, 2, upper_pdu->seq);
|
||||
big_endian_store_16(segmented_pdu->network_header, 5, upper_pdu->src);
|
||||
big_endian_store_16(segmented_pdu->network_header, 7, upper_pdu->dst);
|
||||
segmented_pdu->ivi_nid = upper_pdu->ivi_nid;
|
||||
segmented_pdu->ctl_ttl = upper_pdu->ctl_ttl;
|
||||
segmented_pdu->seq = upper_pdu->seq;
|
||||
segmented_pdu->src = upper_pdu->src;
|
||||
segmented_pdu->dst = upper_pdu->dst;
|
||||
|
||||
// queue up
|
||||
upper_pdu->lower_pdu = (mesh_pdu_t *) segmented_pdu;
|
||||
@ -813,11 +813,11 @@ static void mesh_upper_transport_run(void){
|
||||
incoming_control_pdu->len = message_pdu->len;
|
||||
incoming_control_pdu->netkey_index = message_pdu->netkey_index;
|
||||
incoming_control_pdu->akf_aid_control = message_pdu->akf_aid_control;
|
||||
incoming_access_decrypted->ivi_nid = message_pdu->network_header[0];
|
||||
incoming_access_decrypted->ctl_ttl = message_pdu->network_header[1];
|
||||
incoming_access_decrypted->seq = big_endian_read_24(message_pdu->network_header, 2);
|
||||
incoming_access_decrypted->src = big_endian_read_16(message_pdu->network_header, 5);
|
||||
incoming_access_decrypted->dst = big_endian_read_16(message_pdu->network_header, 7);
|
||||
incoming_access_decrypted->ivi_nid = message_pdu->ivi_nid;
|
||||
incoming_access_decrypted->ctl_ttl = message_pdu->ctl_ttl;
|
||||
incoming_access_decrypted->seq = message_pdu->seq;
|
||||
incoming_access_decrypted->src = message_pdu->src;
|
||||
incoming_access_decrypted->dst = message_pdu->dst;
|
||||
|
||||
mesh_print_hex("Assembled payload", incoming_control_pdu->data, incoming_control_pdu->len);
|
||||
|
||||
@ -838,11 +838,11 @@ static void mesh_upper_transport_run(void){
|
||||
incoming_access_decrypted->netkey_index = message_pdu->netkey_index;
|
||||
incoming_access_decrypted->transmic_len = message_pdu->transmic_len;
|
||||
incoming_access_decrypted->akf_aid_control = message_pdu->akf_aid_control;
|
||||
incoming_access_decrypted->ivi_nid = message_pdu->network_header[0];
|
||||
incoming_access_decrypted->ctl_ttl = message_pdu->network_header[1];
|
||||
incoming_access_decrypted->seq = big_endian_read_24(message_pdu->network_header, 2);
|
||||
incoming_access_decrypted->src = big_endian_read_16(message_pdu->network_header, 5);
|
||||
incoming_access_decrypted->dst = big_endian_read_16(message_pdu->network_header, 7);
|
||||
incoming_access_decrypted->ivi_nid = message_pdu->ivi_nid;
|
||||
incoming_access_decrypted->ctl_ttl = message_pdu->ctl_ttl;
|
||||
incoming_access_decrypted->seq = message_pdu->seq;
|
||||
incoming_access_decrypted->src = message_pdu->src;
|
||||
incoming_access_decrypted->dst = message_pdu->dst;
|
||||
|
||||
mesh_upper_transport_process_access_message();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user