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;
}
Exemple #3
0
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();
}
Exemple #4
0
/**
 * 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();
}