예제 #1
0
void CtrlrUpdateManager::run()
{
#ifdef LINUX
	return;
#endif

	_INF("Running update check");

	sendChangeMessage();

	ScopedPointer <XmlElement> xml(getUpdateData());
	if (xml)
	{
		_DBG("--------------------------------------------------------------");
		_DBG(xml->createDocument(String::empty));
		_DBG("--------------------------------------------------------------");

		if (xml->getBoolAttribute("update"))
		{
			/* new version */

			triggerAsyncUpdate();

			return;
		}
	}

	sendChangeMessage();
}
예제 #2
0
IOUpdate *IOComponent::getUpdates() {
	//outputs_waiting = 0; // reset work indicator flag
	uint8_t *mask = ::generateUpdateMask();
	if (!mask) {
		return 0;
	}
	//MEMCHECK();
	IOUpdate *res = new IOUpdate;
	//MEMCHECK();
	res->setSize(max_offset - min_offset + 1);
	res->setData(getUpdateData());
	//MEMCHECK();
	res->setMask(mask);
	//MEMCHECK();
#if VERBOSE_DEBUG
	std::cout << std::flush 
		<< "IOComponent::getUpdates preparing to send " << res->size() << " d:"; 
	display(res->data(), process_data_size); 
	std::cout << " m:"; 
	display(res->mask(), process_data_size);
	std::cout << "\n" << std::flush;
#endif
	//MEMCHECK();
	return res;
}
예제 #3
0
void IOComponent::markChange() {
	assert(io_process_data);
	if (!update_data) getUpdateData();
	uint8_t *offset = update_data + address.io_offset;
	int bitpos = address.io_bitpos;
	offset += (bitpos / 8);
	bitpos = bitpos % 8;

	if (address.bitlen == 1) {
		int32_t value = (*offset & (1<< bitpos)) ? 1 : 0;

		// only outputs will have an e_on or e_off event queued, 
		// if they do, set the bit accordingly, ignoring the previous value
		if (!value && last_event == e_on) {
/*
			std::cout << "IOComponent::markChange setting bit " 
				<< (offset - update_data) << ":" << bitpos 
				<< " for " << io_name << "\n";
*/
			set_bit(offset, bitpos, 1);			
			updatesSent(false);
		}
		else if (value &&last_event == e_off) {
			set_bit(offset, bitpos, 0);
			updatesSent(false);
		}
		last_event = e_none;
	}
	else {
		if (last_event == e_change) {
/*
			std::cerr << " marking change to " << pending_value 
				<< " at offset " << (unsigned long)(offset - update_data)
			    << " for " << io_name << "\n";
*/
			if (address.bitlen == 8) {
				*offset = (uint8_t)pending_value & 0xff;
			}
			else if (address.bitlen == 16) {
				uint16_t x = pending_value % 65536;
				toU16(offset, x);
			}
			else if (address.bitlen == 32) {
				toU32(offset, pending_value); 
			}
			last_event = e_none;
#if VERBOSE_DEBUG
			std::cout << "@";
			display(update_data);
			std::cout << "\n";
#endif
			updatesSent(false);
			//address.value = pending_value;
		}
	}
}