|
|
@@ -33,6 +33,7 @@
|
|
|
|
|
|
extern airlink_statistic_t g_airlink_statistic;
|
|
|
extern uint32_t g_airlink_pause;
|
|
|
+extern void *g_airlink_pause_mutex;
|
|
|
|
|
|
// static uint8_t start;
|
|
|
// static uint8_t slave_rdy;
|
|
|
@@ -265,7 +266,6 @@ __USER_FUNC_IN_RAM__ int airlink_wait_for_slave_reply(size_t timeout_ms)
|
|
|
{
|
|
|
uint64_t timeout = 0;
|
|
|
luat_event_t event = {0};
|
|
|
- size_t qlen = 0;
|
|
|
while (timeout < timeout_ms)
|
|
|
{
|
|
|
event.id = 0;
|
|
|
@@ -289,10 +289,23 @@ __USER_FUNC_IN_RAM__ void airlink_wait_and_prepare_data(uint8_t *txbuff)
|
|
|
int ret = 0;
|
|
|
uint32_t qlen = 0;
|
|
|
luat_rtos_queue_get_cnt(evt_queue, &qlen);
|
|
|
- if (qlen == 0) {
|
|
|
- while (g_airlink_pause) {
|
|
|
- //LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期100ms");
|
|
|
- luat_rtos_task_sleep(100);
|
|
|
+ if (qlen == 0)
|
|
|
+ {
|
|
|
+ if (g_airlink_pause)
|
|
|
+ {
|
|
|
+ if (g_airlink_pause_mutex)
|
|
|
+ {
|
|
|
+ luat_mutex_lock(g_airlink_pause_mutex);
|
|
|
+ luat_mutex_unlock(g_airlink_pause_mutex); // 被unlock唤醒后, 再立即unlock一次, 防止死锁
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (g_airlink_pause)
|
|
|
+ {
|
|
|
+ LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期1000ms");
|
|
|
+ luat_rtos_task_sleep(1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (g_airlink_wakeup_irq_ctx.enable)
|