void DestroyAuthSystem() { gRunAuthSystem = false; gReaderThread->join(); delete gReaderThread; destroyReader(); }
void Flash::program(const QString &filename) { #if 0 QFile file(filename); uint32_t len; uint32_t addr; int32_t response; if (!file.open(QIODevice::ReadOnly)) throw std::runtime_error((QString("Cannot open file ") + filename + QString(".")).toStdString()); for(addr=0x14000000; !file.atEnd(); addr+=len) { len =(uint32_t)file.read(m_buf, m_sectorSize); m_chirp.callSync(m_programProc, UINT32(addr), UINTS8(len, m_buf), END_OUT_ARGS, &response, END_IN_ARGS); if (response==-1) throw std::runtime_error("Invalid address range."); else if (response==-3) throw std::runtime_error("Error during verify."); else if (response<0) throw std::runtime_error("Error during programming."); } #else IReader *reader; unsigned long addr, len; int32_t res, response; reader = createReader(filename); while(1) { res = reader->read((unsigned char *)m_buf, m_sectorSize, &addr, &len); if (len) { if (m_chirp.callSync(m_programProc, UINT32(addr), UINTS8(len, m_buf), END_OUT_ARGS, &response, END_IN_ARGS)<0) throw std::runtime_error("communication error during programming."); if (response==-1) throw std::runtime_error("invalid address range."); else if (response==-3) throw std::runtime_error("during verify."); else if (response<-100) { QString str = "I/O: " + QString::number(-response-100) + "."; throw std::runtime_error(str.toStdString()); } else if (response<0) { QString str = "programming: " + QString::number(response) + "."; throw std::runtime_error(str.toStdString()); } } if (res<0) break; } #endif // reset Pixy if (m_chirp.callSync(m_reset, END_OUT_ARGS, &response, END_IN_ARGS)<0) throw std::runtime_error("Unable to reset."); destroyReader(reader); }