Skip to content

Commit 91349e2

Browse files
committed
MCUXpresso: Update KW41 nanostack drivers to not enter deep sleep when active
Signed-off-by: Mahesh Mahadevan <[email protected]>
1 parent d921ed7 commit 91349e2

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

features/nanostack/targets/TARGET_NXP/TARGET_KW41Z/NanostackRfPhyKw41z.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
#include "mbed_power_mgmt.h"
1617
#include "common_functions.h"
1718
#include "platform/arm_hal_interrupt.h"
1819
#include "platform/arm_hal_phy.h"
@@ -87,8 +88,9 @@ static uint8_t MAC64_addr[8];
8788

8889
static xcvrState_t mPhySeqState;
8990
static uint8_t rf_mac_handle;
90-
volatile uint8_t rf_ed_value = 0;
91-
static bool rf_ack_pending_state = false;
91+
static volatile uint8_t rf_ed_value = 0;
92+
static volatile bool rf_ack_pending_state = false;
93+
static volatile bool sleep_blocked = false;
9294

9395
static NanostackRfPhyKw41z *rf = NULL;
9496

@@ -155,6 +157,11 @@ static int8_t rf_device_register(void)
155157
static void rf_device_unregister(void)
156158
{
157159
arm_net_phy_unregister(rf_radio_driver_id);
160+
161+
if (sleep_blocked) {
162+
sleep_manager_unlock_deep_sleep();
163+
sleep_blocked = false;
164+
}
158165
}
159166

160167
/*
@@ -209,23 +216,41 @@ static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_
209216
/*Reset PHY driver and set to idle*/
210217
case PHY_INTERFACE_RESET:
211218
rf_abort();
219+
if (sleep_blocked) {
220+
sleep_manager_unlock_deep_sleep();
221+
sleep_blocked = false;
222+
}
212223
break;
213224
/*Disable PHY Interface driver*/
214225
case PHY_INTERFACE_DOWN:
215226
rf_abort();
227+
if (sleep_blocked) {
228+
sleep_manager_unlock_deep_sleep();
229+
sleep_blocked = false;
230+
}
216231
break;
217232
/*Enable PHY Interface driver*/
218233
case PHY_INTERFACE_UP:
219234
if (PhyPlmeSetCurrentChannelRequest(rf_channel, 0)) {
220235
return 1;
221236
}
237+
if (!sleep_blocked) {
238+
/* Disable enter to deep sleep when transfer active */
239+
sleep_manager_lock_deep_sleep();
240+
sleep_blocked = true;
241+
}
222242
rf_receive();
223243
break;
224244
/*Enable wireless interface ED scan mode*/
225245
case PHY_INTERFACE_RX_ENERGY_STATE:
226246
if (PhyPlmeSetCurrentChannelRequest(rf_channel, 0)) {
227247
return 1;
228248
}
249+
if (!sleep_blocked) {
250+
/* Disable enter to deep sleep when transfer active */
251+
sleep_manager_lock_deep_sleep();
252+
sleep_blocked = true;
253+
}
229254
rf_abort();
230255
rf_mac_ed_state_enable();
231256
break;
@@ -234,6 +259,11 @@ static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_
234259
if (PhyPlmeSetCurrentChannelRequest(rf_channel, 0)) {
235260
return 1;
236261
}
262+
if (!sleep_blocked) {
263+
/* Disable enter to deep sleep when transfer active */
264+
sleep_manager_lock_deep_sleep();
265+
sleep_blocked = true;
266+
}
237267
rf_receive();
238268
break;
239269
}

0 commit comments

Comments
 (0)