示例#1
0
void EmsData::flashBytesLocalUpdate(unsigned short locationid,unsigned short offset,unsigned short size,QByteArray data)
{
	if (!hasLocalFlashBlock(locationid))
	{
		QLOG_ERROR() << "Requested flash update for locationid" << locationid << "but location has no flash!";
		return;
	}
	if (getLocalFlashBlock(locationid).mid(offset,size) == data)
	{
		QLOG_WARN() << "Data in application flash memory unchanged, no reason to send write for single value";
		return;
	}
	QLOG_TRACE() << "Updating flash locationid" << locationid << "with" << data.size() << "bytes at offset" << offset;
	setLocalFlashBlock(locationid,getLocalFlashBlock(locationid).replace(offset,size,data));
	//emit updateRequired(locationid);
	emit flashBlockUpdateRequest(locationid,offset,size,data); //don't emit a signal for flash updates, those are always manual.
}
示例#2
0
void EmsData::acceptLocalFlashBlockForDevice(unsigned short locationid)
{
	setDeviceFlashBlock(locationid,getLocalFlashBlock(locationid));
	if (isLocalFlashDirty(locationid))
	{
		markLocalFlashLocationClean(locationid);
	}
}
示例#3
0
void EmsData::flashBlockUpdate(unsigned short locationid, QByteArray header, QByteArray payload)
{
	QLOG_TRACE() << "Flash Block retrieved:" << "0x" + QString::number(locationid,16).toUpper();
	Q_UNUSED(header)
	for (int l=0;l<getChildrenOfLocalFlashLocation(locationid).size();l++)
	{
		unsigned short childid = getChildrenOfLocalFlashLocation(locationid)[l];
	QList<ConfigBlock> configlist = m_memoryMetaData->getConfigMetaData(QString::number(childid,16).toUpper());
	QLOG_TRACE() << "Location" << QString::number(childid,16).toUpper() << "Size:" << configlist.size();
	for (int i=0;i<configlist.size();i++)
	{
		//configlist[i].offset()

		QString valstr = "";
		QString bytestr = "";
		for (int k=0;k<configlist[i].size();k++)
		{
			unsigned int value = 0;
			for (int j=0;j<configlist[i].elementSize();j++)
			{
				//QLOG_DEBUG() << (unsigned char)block[m_fieldConfigList[i].second.offset() + (k * m_fieldConfigList[i].second.elementSize()) + j];
				bytestr += QString::number((unsigned char)payload[configlist[i].offset() + (k * configlist[i].elementSize()) + j],16).toUpper() + ",";
				value += ((unsigned char)payload[configlist[i].offset() + (k * configlist[i].elementSize()) + j]) << (8 * (configlist[i].elementSize() - (j+1)));
			}
			//userValue = (ecuValue + translate) * scale

			valstr += QString::number(calcAxis(value,configlist[i].calc())) + ",";
		}
		valstr = valstr.mid(0,valstr.length()-1);
		QLOG_DEBUG() << "Pre value:" << "0x" + QString::number(locationid,16) << bytestr;
		//valstr == variable.
		emit configRecieved(configlist[i],QVariant(valstr));
	}
	}
	if (!verifyMemoryBlock(locationid,header,payload))
	{
		//QMessageBox::information(this,"Error","Flash Location ID 0x" + QString::number(locationid,16).toUpper() + " should be 1024 sized, but it is " + QString::number(payload.size()) + ". This should never happen");
		QLOG_ERROR() << "Flash Location ID 0x" + QString::number(locationid,16).toUpper() + " should be 1024 sized, but it is " + QString::number(payload.size()) + ". This should never happen";
		return;
	}
	if (hasDeviceFlashBlock(locationid))
	{
			if (getDeviceFlashBlock(locationid).isEmpty())
			{
				setLocalFlashBlock(locationid,payload);
				setDeviceFlashBlock(locationid,payload);
				emit updateRequired(locationid);
				return;
			}
			else
			{
				if (m_interrogationInProgress)
				{
					//checkEmsData->setDeviceFlashBlock(locationid,payload);
					for (int i=0;i<m_duplicateFlashMemoryList.size();i++)
					{
						if (m_duplicateFlashMemoryList[i]->locationid == locationid)
						{
							m_duplicateFlashMemoryList[i]->setData(payload);
							break;
						}
					}
					m_checkEmsDataInUse = true;
				}
				else
				{
					if (getDeviceFlashBlock(locationid) != payload)
					{
						QLOG_ERROR() << "Flash block in memory does not match flash block on tuner! This should not happen!";
						QLOG_ERROR() << "Flash size:" << getDeviceFlashBlock(locationid).size();
						QLOG_ERROR() << "Flash ID:" << "0x" + QString::number(locationid,16).toUpper();
						setDeviceFlashBlock(locationid,payload);
					}
					if (getLocalFlashBlock(locationid) != payload)
					{
						setLocalFlashBlock(locationid,payload);
					}
				}
			}
	}
	emit updateRequired(locationid);
	//updateDataWindows(locationid);
	return;
}