Fix c > 64 to c >= 64 typo in channel-mask calculation.

Depending the channel-configuration, this would send three LinkADRReq
mac-commands while the same configuration could be send to the device in
two LinkADRReq mac-commands.
This commit is contained in:
Orne Brocaar 2022-08-21 21:48:27 +01:00
parent 3b297ef221
commit d97da8ed50
2 changed files with 88 additions and 10 deletions

View File

@ -1107,7 +1107,7 @@ impl Region for Configuration {
// use the ChMask of the first LinkADRReqPayload, besides
// turning off all 125 kHz this payload contains the ChMask
// for the last block of channels.
if c > 64 {
if c >= 64 {
out[0].ch_mask.set(c % 16, true);
continue;
}
@ -1419,11 +1419,11 @@ pub mod test {
expected_uplink_channels: c.get_uplink_channel_indices(),
expected_link_adr_req_payloads: vec![],
},
// Only activate 0 - 7.
// Only activate 0 - 7 + 64.
Test {
device_channels: c.get_uplink_channel_indices(),
enabled_channels: vec![0, 1, 2, 3, 4, 5, 6, 7],
expected_uplink_channels: vec![0, 1, 2, 3, 4, 5, 6, 7],
enabled_channels: vec![0, 1, 2, 3, 4, 5, 6, 7, 64],
expected_uplink_channels: vec![0, 1, 2, 3, 4, 5, 6, 7, 64],
expected_link_adr_req_payloads: vec![
LinkADRReqPayload {
dr: 0,
@ -1432,7 +1432,10 @@ pub mod test {
ch_mask_cntl: 7,
nb_rep: 0,
},
ch_mask: ChMask::new([false; 16]),
ch_mask: ChMask::new([
true, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false,
]),
},
LinkADRReqPayload {
dr: 0,
@ -1448,6 +1451,42 @@ pub mod test {
},
],
},
// Only activate 0 - 15 + 64 & 65.
Test {
device_channels: c.get_uplink_channel_indices(),
enabled_channels: vec![
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 64, 65,
],
expected_uplink_channels: vec![
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 64, 65,
],
expected_link_adr_req_payloads: vec![
LinkADRReqPayload {
dr: 0,
tx_power: 0,
redundancy: Redundancy {
ch_mask_cntl: 7,
nb_rep: 0,
},
ch_mask: ChMask::new([
true, true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false,
]),
},
LinkADRReqPayload {
dr: 0,
tx_power: 0,
redundancy: Redundancy {
ch_mask_cntl: 0,
nb_rep: 0,
},
ch_mask: ChMask::new([
true, true, true, true, true, true, true, true, true, true, true, true,
true, true, true, true,
]),
},
],
},
];
for tst in &tests {

View File

@ -797,7 +797,7 @@ impl Region for Configuration {
// use the ChMask of the first LinkADRReqPayload, besides
// turning off all 125 kHz this payload contains the ChMask
// for the last block of channels.
if c > 64 {
if c >= 64 {
out[0].ch_mask.set(c % 16, true);
continue;
}
@ -1111,11 +1111,11 @@ pub mod test {
expected_uplink_channels: c.get_uplink_channel_indices(),
expected_link_adr_req_payloads: vec![],
},
// Only activate 0 - 7.
// Only activate 0 - 7 + 64.
Test {
device_channels: c.get_uplink_channel_indices(),
enabled_channels: vec![0, 1, 2, 3, 4, 5, 6, 7],
expected_uplink_channels: vec![0, 1, 2, 3, 4, 5, 6, 7],
enabled_channels: vec![0, 1, 2, 3, 4, 5, 6, 7, 64],
expected_uplink_channels: vec![0, 1, 2, 3, 4, 5, 6, 7, 64],
expected_link_adr_req_payloads: vec![
LinkADRReqPayload {
dr: 0,
@ -1124,7 +1124,10 @@ pub mod test {
ch_mask_cntl: 7,
nb_rep: 0,
},
ch_mask: ChMask::new([false; 16]),
ch_mask: ChMask::new([
true, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false,
]),
},
LinkADRReqPayload {
dr: 0,
@ -1140,6 +1143,42 @@ pub mod test {
},
],
},
// Only activate 0 - 15 + 64 & 65.
Test {
device_channels: c.get_uplink_channel_indices(),
enabled_channels: vec![
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 64, 65,
],
expected_uplink_channels: vec![
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 64, 65,
],
expected_link_adr_req_payloads: vec![
LinkADRReqPayload {
dr: 0,
tx_power: 0,
redundancy: Redundancy {
ch_mask_cntl: 7,
nb_rep: 0,
},
ch_mask: ChMask::new([
true, true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false,
]),
},
LinkADRReqPayload {
dr: 0,
tx_power: 0,
redundancy: Redundancy {
ch_mask_cntl: 0,
nb_rep: 0,
},
ch_mask: ChMask::new([
true, true, true, true, true, true, true, true, true, true, true, true,
true, true, true, true,
]),
},
],
},
];
for tst in &tests {