mesh: Transport tx fields overflow

The transport segmented TX nack and seg_pending fields must be at least
6 bits to avoid overflow for 32 segment messages. This change rearranges
the seg_tx fields to gather all state flag fields in one byte, while
making the counter fields whole bytes.

this is port of 4a2e56d42a432f603df0ae3101b00f4a0fe350e6
This commit is contained in:
Krzysztof Kopyściński
2021-01-12 14:05:19 +01:00
committed by Łukasz Rymanowski
parent a684f02ddb
commit e14729093b
+7 -9
View File
@@ -78,16 +78,14 @@ static struct seg_tx {
ctl:1,
aszmic:1,
friend_cred:1;
u8_t seg_o:6,/* Segment being sent. 6 bits to
* prevent overflow in loop.
*/
started:1, /* Start cb called */
sending:1; /* Sending is in progress */
u8_t nack_count:5, /* Number of unacked segs */
blocked:1; /* Blocked by ongoing tx */
u8_t seg_o; /* Segment being sent. */
u8_t nack_count; /* Number of unacked segs */
u8_t ttl;
u8_t seg_pending:5, /* Number of segments pending */
attempts:3;
u8_t seg_pending; /* Number of segments pending */
u8_t attempts; /* Transmit attempts */
u8_t started:1, /* Start cb called */
sending:1, /* Sending is in progress */
blocked:1; /* Blocked by ongoing tx */
const struct bt_mesh_send_cb *cb;
void *cb_data;
struct k_delayed_work retransmit; /* Retransmit timer */