1
0
Fork 0
forked from len0rd/rockbox

qeditor: many enhancement

Qeditor has been improved in many ways:
- it can now dump all registers, just like the lua DUMPER.dump_all() command
- several crash were fixed
- when connected to a hwstub command, one can correctly edit individual fields
- the code was simplified in several places

Change-Id: I092b99ce3a12ff6417552de61d62c65f706bcff0
This commit is contained in:
Amaury Pouly 2014-05-11 19:51:55 +02:00
parent 4c1eafc208
commit 7b590a9536
8 changed files with 261 additions and 40 deletions

View file

@ -90,9 +90,10 @@ IoBackend *Backend::CreateHWStubIoBackend(HWStubDevice *dev)
* FileIoBackend
*/
FileIoBackend::FileIoBackend(const QString& filename)
FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name)
{
m_filename = filename;
m_soc = soc_name;
Reload();
}
@ -163,7 +164,7 @@ bool FileIoBackend::Commit()
while(it.hasNext())
{
it.next();
out << it.key() << " = " << it.value() << "\n";
out << it.key() << " = " << hex << showbase << it.value() << "\n";
}
out.flush();
return file.flush();
@ -174,6 +175,16 @@ bool FileIoBackend::Commit()
* HWStubDevice
*/
HWStubDevice::HWStubDevice(struct libusb_device *dev)
{
Init(dev);
}
HWStubDevice::HWStubDevice(const HWStubDevice *dev)
{
Init(dev->m_dev);
}
void HWStubDevice::Init(struct libusb_device *dev)
{
libusb_ref_device(dev);
m_dev = dev;
@ -325,7 +336,7 @@ QString HWStubIoBackend::GetSocName()
HWStubIoBackend::~HWStubIoBackend()
{
m_dev->Close();
delete m_dev;
}
bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value)
@ -530,3 +541,31 @@ bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg,
v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit;
return true;
}
bool BackendHelper::DumpAllRegisters(const QString& filename)
{
FileIoBackend b(filename, QString::fromStdString(m_soc.GetSoc().name));
BackendHelper bh(&b, m_soc);
for(size_t i = 0; i < m_soc.GetSoc().dev.size(); i++)
{
const soc_dev_t& dev = m_soc.GetSoc().dev[i];
for(size_t j = 0; j < dev.addr.size(); j++)
{
QString devname = QString::fromStdString(dev.addr[j].name);
for(size_t k = 0; k < dev.reg.size(); k++)
{
const soc_reg_t& reg = dev.reg[k];
for(size_t l = 0; l < reg.addr.size(); l++)
{
QString regname = QString::fromStdString(reg.addr[l].name);
soc_word_t val;
if(!ReadRegister(devname, regname, val))
return false;
if(!bh.WriteRegister(devname, regname, val))
return false;
}
}
}
}
return b.Commit();
}