Skip to content

Commit

Permalink
Change so memoryDirty/memoryClean signals from the freeemsplugin now …
Browse files Browse the repository at this point in the history
…properly watch for individual bytes to be "clean" or "dirty"
  • Loading branch information
malcom2073 committed Jan 30, 2014
1 parent 47fcca9 commit 4206297
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 13 deletions.
10 changes: 10 additions & 0 deletions plugins/freeems/emsdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -973,3 +973,13 @@ int EmsData::backConvertAxis(double val,QList<QPair<QString,double> > metadata)
}
return (int)newval;
}
MemoryLocation* EmsData::getLocalRamBlockInfo(unsigned short locationid)
{
for (int i=0;i<m_ramMemoryList.size();i++)
{
if (m_ramMemoryList[i]->locationid == locationid)
{
return m_ramMemoryList[i];
}
}
}
1 change: 1 addition & 0 deletions plugins/freeems/emsdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ class EmsData : public QObject
}
QList<unsigned short> getTopLevelUniqueLocationIdList();
QList<unsigned short> getUniqueLocationIdList();
MemoryLocation* getLocalRamBlockInfo(unsigned short locationid);

private:
bool m_checkEmsDataInUse;
Expand Down
57 changes: 45 additions & 12 deletions plugins/freeems/freeemscomms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,14 +454,26 @@ int FreeEmsComms::burnBlockFromRamToFlash(unsigned short location,unsigned short
req.sequencenumber = m_sequenceNumber;
m_sequenceNumber++;
m_reqList.append(req);
if (m_dirtyLocationIds.contains(location))

for (int i=emsData.getLocalRamBlockInfo(location)->ramAddress + offset;i<emsData.getLocalRamBlockInfo(location)->ramAddress+offset+size;i++)
{
if (m_dirtyRamAddresses.contains(i))
{
m_dirtyRamAddresses.removeOne(i);
}
}
if (m_dirtyRamAddresses.size() == 0)
{
emit memoryClean();
}
/*if (m_dirtyLocationIds.contains(location))
{
m_dirtyLocationIds.removeOne(location);
if (m_dirtyLocationIds.size() == 0)
{
emit memoryClean();
}
}
}*/
return m_sequenceNumber-1;
}
int FreeEmsComms::enableDatalogStream()
Expand Down Expand Up @@ -506,11 +518,21 @@ int FreeEmsComms::updateBlockInRam(unsigned short location,unsigned short offset
req.sequencenumber = m_sequenceNumber;
m_sequenceNumber++;
m_reqList.append(req);
if (!m_dirtyLocationIds.contains(location))

unsigned short ramaddress = emsData.getLocalRamBlockInfo(location)->ramAddress;
for (int i=ramaddress+offset;i<ramaddress+offset+size;i++)
{
if (!m_dirtyRamAddresses.contains(i))
{
m_dirtyRamAddresses.append(i);
}
}
emit memoryDirty();
/*if (!m_dirtyLocationIds.contains(location))
{
m_dirtyLocationIds.append(location);
emit memoryDirty();
}
}*/
return m_sequenceNumber-1;
}
int FreeEmsComms::updateBlockInFlash(unsigned short location,unsigned short offset, unsigned short size,QByteArray data)
Expand Down Expand Up @@ -579,14 +601,21 @@ int FreeEmsComms::retrieveBlockFromFlash(unsigned short location, unsigned short
req.sequencenumber = m_sequenceNumber;
m_sequenceNumber++;
m_reqList.append(req);
if (m_dirtyLocationIds.contains(location))
//This gets us the range of effected values.
//emsData.getLocalRamBlockInfo(location)->size;
//emsData.getLocalRamBlockInfo(location)->ramAddress;

for (int i=emsData.getLocalRamBlockInfo(location)->ramAddress + offset;i<emsData.getLocalRamBlockInfo(location)->ramAddress+offset+size;i++)
{
m_dirtyLocationIds.removeOne(location);
if (m_dirtyLocationIds.size() == 0)
if (m_dirtyRamAddresses.contains(i))
{
emit memoryClean();
m_dirtyRamAddresses.removeOne(i);
}
}
if (m_dirtyRamAddresses.size() == 0)
{
emit memoryClean();
}
return m_sequenceNumber-1;
}
int FreeEmsComms::retrieveBlockFromRam(unsigned short location, unsigned short offset, unsigned short size)
Expand Down Expand Up @@ -1954,14 +1983,18 @@ void FreeEmsComms::copyFlashToRam(unsigned short locationid)
}
}
updateBlockInRam(locationid,0,emsData.getLocalFlashBlock(locationid).size(),emsData.getLocalFlashBlock(locationid));
if (m_dirtyLocationIds.contains(locationid))

for (int i=emsData.getLocalRamBlockInfo(locationid)->ramAddress;i<emsData.getLocalRamBlockInfo(locationid)->ramAddress+emsData.getLocalRamBlockInfo(locationid)->size;i++)
{
m_dirtyLocationIds.removeOne(locationid);
if (m_dirtyLocationIds.size() == 0)
if (m_dirtyRamAddresses.contains(i))
{
emit memoryClean();
m_dirtyRamAddresses.removeOne(i);
}
}
if (m_dirtyRamAddresses.size() == 0)
{
emit memoryClean();
}
}

void FreeEmsComms::copyRamToFlash(unsigned short locationid)
Expand Down
2 changes: 1 addition & 1 deletion plugins/freeems/freeemscomms.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class FreeEmsComms : public EmsComms
PacketDecoder *m_packetDecoder;
QMap<QString,QString> m_interrogationMetaDataMap;
void sendNextInterrogationPacket();
QList<unsigned short> m_dirtyLocationIds;
QList<unsigned int> m_dirtyRamAddresses;
signals:
void packetSent(unsigned short locationid,QByteArray header,QByteArray payload);
void packetAcked(unsigned short locationid,QByteArray header,QByteArray payload);
Expand Down

0 comments on commit 4206297

Please sign in to comment.