bool zoSms::getPacketWire(ZO_PROTOCOL_PACKET* packet) { uint8_t i; if( i2cPacketReceived ) { enterCritical(); //copy buffered packet packet->addressedNodeID = BufferedPacket.addressedNodeID; packet->ownNodeID = BufferedPacket.ownNodeID; packet->commandID = BufferedPacket.commandID; packet->byteCount = BufferedPacket.byteCount; packet->lrc = BufferedPacket.lrc; for(i=0;i<packet->byteCount;i++) packet->data[i] = BufferedPacket.data[i]; //indicate received packet was used i2cPacketReceived = false; exitCritical(); return true; } else return false; }
bool getReceivalOfPacketStarted(void) { bool returnVal; enterCritical(); returnVal = PacketRxStarted; exitCritical(); return returnVal; }
void XFTimeoutManager::addTimeout(XFTimeout * pNewTimeout) { enterCritical(); if (!_timeouts.empty()) { // Insert timeout before timeout(s) triggering later TimeoutList::iterator i = _timeouts.begin(); if ((*i)->_relTicks >= pNewTimeout->_relTicks) { // A new timeout at the beginning _timeouts.push_front(pNewTimeout); // Remove time from following timeout (*i)->_relTicks -= pNewTimeout->_relTicks; } else { unsigned int index = 0; // Remove time from new timeout pNewTimeout->_relTicks -= (*i)->_relTicks; i++; index++; while (i != _timeouts.end() && (*i)->_relTicks < pNewTimeout->_relTicks) { pNewTimeout->_relTicks -= (*i)->_relTicks; i++; index++; } // Insert new timeout before i = _timeouts.insert(i, pNewTimeout); if (_timeouts.size() > index + 1) { // Remove time from following timeout i++; assert(i != _timeouts.end()); (*i)->_relTicks -= pNewTimeout->_relTicks; } } } else { _timeouts.push_front(pNewTimeout); } exitCritical(); }
/** * Removes all timeouts corresponding the given parameters. */ void XFTimeoutManager::removeTimeouts(int timeoutId, IXFReactive * pReactive) { const XFTimeout timeout(timeoutId, 0, pReactive); XFTimeout * pTimeout; enterCritical(); for (TimeoutList::iterator i = _timeouts.begin(); i != _timeouts.end();) { pTimeout = *i; // Check if behavior and timeout id are equal if (*pTimeout == timeout) { TimeoutList::iterator next = i; // Check if remaining ticks can be given further if (++next != _timeouts.end()) { // Add (remaining) ticks to next timeout in list (*next)->_relTicks += pTimeout->_relTicks; } i = _timeouts.erase(i); delete pTimeout; } else { i++; } } exitCritical(); }
void setReceivalOfPacketStarted(bool trueFalse) { enterCritical(); PacketRxStarted = trueFalse; exitCritical(); }