STM32: iface activity indication

This commit is contained in:
Pavel Kirienko
2014-04-07 15:17:58 +04:00
parent d3f76c5c16
commit 377d2f7d7f
3 changed files with 49 additions and 4 deletions
@@ -381,6 +381,9 @@ leave:
void CanIface::handleTxMailboxInterrupt(uavcan::uint8_t mailbox_index, bool txok, const uavcan::uint64_t utc_usec)
{
assert(mailbox_index < NumTxMailboxes);
had_activity_ = had_activity_ || txok;
TxItem& txi = pending_tx_[mailbox_index];
if (txi.loopback && txok && txi.pending)
{
@@ -471,6 +474,7 @@ void CanIface::handleRxInterrupt(uavcan::uint8_t fifo_index, uavcan::uint64_t ut
*/
rx_queue_.push(frame, utc_usec, 0);
update_event_.signalFromInterrupt();
had_activity_ = true;
}
void CanIface::handleStatusInterrupt()
@@ -522,6 +526,14 @@ uavcan::uint8_t CanIface::yieldLastHardwareErrorCode()
return val;
}
bool CanIface::hadActivity()
{
CriticalSectionLocker lock;
const bool ret = had_activity_;
had_activity_ = false;
return ret;
}
/*
* CanDriver
*/
@@ -640,6 +652,15 @@ CanIface* CanDriver::getIface(uavcan::uint8_t iface_index)
return NULL;
}
bool CanDriver::hadActivity()
{
bool ret = if0_.hadActivity();
#if UAVCAN_STM32_NUM_IFACES > 1
ret |= if1_.hadActivity();
#endif
return ret;
}
} // namespace uavcan_stm32
/*