404 lines
11 KiB
C++
404 lines
11 KiB
C++
#include "form_burnmode.h"
|
|
#include "ui_form_burnmode.h"
|
|
#include "dialog_setburnsn.h"
|
|
#include "hgscanner.h"
|
|
#include "mainwindow.h"
|
|
#include "analysisjson.h"
|
|
#include "base/HGBase.h"
|
|
#include "HGUIGlobal.h"
|
|
#include "dialog_excepdesc.h"
|
|
#include <QMessageBox>
|
|
#include <QLineEdit>
|
|
#include <QInputDialog>
|
|
|
|
Form_BurnMode::Form_BurnMode(class MainWindow *mainwnd, QWidget *parent) :
|
|
QWidget(parent),
|
|
m_curIndex(0),
|
|
m_mainwnd(mainwnd),
|
|
m_hg(nullptr),
|
|
ui(new Ui::Form_BurnMode)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
connect(this, SIGNAL(testResult(bool)), this, SLOT(on_testResult(bool)), Qt::QueuedConnection);
|
|
|
|
initTableWidget();
|
|
}
|
|
|
|
Form_BurnMode::~Form_BurnMode()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void Form_BurnMode::addDevice(DeviceManager *devManager)
|
|
{
|
|
ui->tableWidget->setRowCount(m_curIndex + 1);
|
|
ui->tableWidget->setItem(m_curIndex, 0, new QTableWidgetItem(QString::number(m_curIndex + 1)));
|
|
ui->tableWidget->item(m_curIndex, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
|
|
QTableWidgetItem *check = new QTableWidgetItem();
|
|
check->setCheckState(Qt::Unchecked);
|
|
ui->tableWidget->setItem(m_curIndex, 1, check);
|
|
ui->tableWidget->item(m_curIndex, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
ui->tableWidget->setItem(m_curIndex, 2, new QTableWidgetItem(devManager->getDevName()));
|
|
ui->tableWidget->item(m_curIndex, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
|
|
QTableWidgetItem *item = ui->tableWidget->item(m_curIndex, 1);
|
|
QVariant var = QVariant::fromValue((void*)devManager);
|
|
item->setData(Qt::UserRole, var);
|
|
|
|
updatetablewidget();
|
|
|
|
m_curIndex++;
|
|
}
|
|
|
|
void Form_BurnMode::deleteDevice(QString devName)
|
|
{
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
QTableWidgetItem *item2 = ui->tableWidget->item(i, 2);
|
|
if (devName!= nullptr && item != nullptr)
|
|
{
|
|
if (devName == item2->text())
|
|
{
|
|
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
|
|
delete devManager;
|
|
|
|
ui->tableWidget->removeRow(i);
|
|
m_curIndex--;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
updatetablewidget();
|
|
}
|
|
|
|
DeviceManager *Form_BurnMode::getDevManager()
|
|
{
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
if (item != nullptr && Qt::Checked == item->checkState())
|
|
{
|
|
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
|
|
return devManager;
|
|
}
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
void Form_BurnMode::on_testResult(bool setStatus)
|
|
{
|
|
//m_mainwnd->releaseTesting();
|
|
}
|
|
|
|
void Form_BurnMode::initTableWidget()
|
|
{
|
|
ui->tableWidget->resizeRowsToContents();
|
|
ui->tableWidget->setColumnCount(3);
|
|
ui->tableWidget->horizontalHeader()->setDefaultSectionSize(200);
|
|
// ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
|
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
|
ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
|
|
|
|
QStringList header;
|
|
header<< tr("ID") << tr("selected") << tr("device");
|
|
ui->tableWidget->setHorizontalHeaderLabels(header);
|
|
|
|
QFont font = ui->tableWidget->horizontalHeader()->font();
|
|
font.setBold(true);
|
|
ui->tableWidget->horizontalHeader()->setFont(font);
|
|
|
|
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
|
ui->tableWidget->verticalHeader()->setDefaultSectionSize(10);
|
|
ui->tableWidget->setFrameShape(QFrame::NoFrame);
|
|
ui->tableWidget->setShowGrid(true);
|
|
ui->tableWidget->verticalHeader()->setVisible(false);
|
|
// ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
ui->tableWidget->horizontalHeader()->setFixedHeight(30);
|
|
ui->tableWidget->clearContents();
|
|
}
|
|
|
|
void Form_BurnMode:: updatetablewidget()
|
|
{
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
|
|
}
|
|
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
if (item != nullptr)
|
|
item->setCheckState(Qt::Checked);
|
|
}
|
|
ui->cbox_selectAll->setChecked(true);
|
|
}
|
|
|
|
void Form_BurnMode::on_cbox_selectAll_stateChanged(int arg1)
|
|
{
|
|
(void)arg1;
|
|
bool check = ui->cbox_selectAll->isChecked();
|
|
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
if (item != nullptr)
|
|
{
|
|
if (check)
|
|
item->setCheckState(Qt::Checked);
|
|
else
|
|
item->setCheckState(Qt::Unchecked);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Form_BurnMode::on_pbtn_enterBurnMode_clicked()
|
|
{
|
|
int select = 0;
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
if (item != nullptr && Qt::Checked == item->checkState())
|
|
{
|
|
select++;
|
|
}
|
|
}
|
|
if (select == 0)
|
|
{
|
|
QMessageBox::information(this, tr("tips"), tr("Please check a devices at least"));
|
|
return;
|
|
}
|
|
|
|
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
{
|
|
QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
if (item != nullptr && Qt::Checked == item->checkState())
|
|
{
|
|
DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
|
|
devManager->setBurnMode();
|
|
}
|
|
}
|
|
}
|
|
|
|
DeviceManager::DeviceManager(class MainWindow *mainwnd, class Form_BurnMode *burnMode, SANE_Handle handle,
|
|
const QString &profileName, const QString & devName, const QString &serialNum)
|
|
{
|
|
m_mainwnd = mainwnd;
|
|
m_burnMode = burnMode;
|
|
m_handle = handle;
|
|
m_profileName = profileName;
|
|
m_devName = devName;
|
|
m_serialNum = serialNum;
|
|
|
|
m_hg = new hgscanner(nullptr, m_burnMode, nullptr, m_handle);
|
|
}
|
|
|
|
DeviceManager::~DeviceManager()
|
|
{
|
|
delete m_hg;
|
|
m_hg = nullptr;
|
|
|
|
sane_close(m_handle);
|
|
}
|
|
|
|
QString DeviceManager::getDevName()
|
|
{
|
|
return m_devName;
|
|
}
|
|
|
|
QString DeviceManager::getSerialNum()
|
|
{
|
|
return m_serialNum;
|
|
}
|
|
|
|
void DeviceManager::setBurnMode()
|
|
{
|
|
const wchar_t *p = L"1";
|
|
// m_mainwnd->addTestingRef();
|
|
func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg);
|
|
|
|
}
|
|
|
|
void DeviceManager::setSpeedMode()
|
|
{
|
|
AnalysisJson analysisJson(m_profileName);
|
|
AnalysisJson::json_global jsonGlobal = analysisJson.GetGlobal();
|
|
LPWRITECFG lp = new WRITECFG;
|
|
|
|
int speedMode = jsonGlobal.speed_mode;
|
|
lp->cat = WRITE_CAT_SPEED;
|
|
lp->val = (void*)&speedMode;
|
|
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
|
|
|
|
delete lp;
|
|
}
|
|
|
|
void DeviceManager::setSleepTime()
|
|
{
|
|
AnalysisJson analysisJson(m_profileName);
|
|
AnalysisJson::json_global jsonGlobal = analysisJson.GetGlobal();
|
|
LPWRITECFG lp = new WRITECFG;
|
|
|
|
int sleepTime = jsonGlobal.sleep_time;
|
|
lp->cat = WRITE_CAT_SLEEP;
|
|
lp->val = (void*)&sleepTime;
|
|
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
|
|
|
|
delete lp;
|
|
}
|
|
|
|
void DeviceManager::setVidPid()
|
|
{
|
|
AnalysisJson analysisJson(m_profileName);
|
|
AnalysisJson::json_global jsonGlobal = analysisJson.GetGlobal();
|
|
LPWRITECFG lp = new WRITECFG;
|
|
|
|
VIDPID vidpid;
|
|
vidpid.VID = jsonGlobal.vid_to;
|
|
vidpid.PID = jsonGlobal.pid_to;
|
|
int vidpidValue = vidpid.Value;
|
|
lp->cat = WRITE_CAT_VID_PID;
|
|
lp->val = (void*)&vidpidValue;
|
|
func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg);
|
|
|
|
delete lp;
|
|
}
|
|
|
|
void DeviceManager::rebootDevice()
|
|
{
|
|
const wchar_t *p = L"0";
|
|
func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg);
|
|
}
|
|
|
|
QString DeviceManager::getDevType()
|
|
{
|
|
std::string firmWareNum;
|
|
unsigned int firmWareNumLen = 0;
|
|
if(SANE_STATUS_NO_MEM == sane_io_control(m_handle, IO_CTRL_CODE_GET_HARDWARE_VERSION, nullptr, &firmWareNumLen) && firmWareNumLen)
|
|
{
|
|
firmWareNum.resize(firmWareNumLen);
|
|
sane_io_control(m_handle, IO_CTRL_CODE_GET_HARDWARE_VERSION, &firmWareNum[0], &firmWareNumLen);
|
|
}
|
|
|
|
QString str = QString::fromStdString(firmWareNum.c_str());
|
|
return str.left(2) + "00";
|
|
}
|
|
|
|
int DeviceManager::getSpeedMode()
|
|
{
|
|
SANE_Int speedMode = 0;
|
|
unsigned int len = sizeof(SANE_Int);
|
|
sane_io_control(m_handle, IO_CTRL_CODE_GET_SPEED_MODE, &speedMode, &len);
|
|
|
|
const wchar_t G100[6] = { 70,80,90,110 };
|
|
const wchar_t G200[6] = { 100,110,120,130 };
|
|
const wchar_t G300[6] = { 40,50,60,70 };
|
|
const wchar_t G400[6] = { 40,50,60,70,80 };
|
|
|
|
QString devType = getDevType();
|
|
int speed = 0;
|
|
|
|
if ((int)speedMode >= 40)
|
|
speed = (int)speedMode;
|
|
else
|
|
{
|
|
if (devType == "G100")
|
|
speed = G100[(int)speedMode - 1];
|
|
else if (devType == "G200")
|
|
speed = G200[(int)speedMode - 1];
|
|
else if (devType == "G300")
|
|
speed = G300[(int)speedMode - 1];
|
|
else if (devType == "G400")
|
|
speed = G400[(int)speedMode - 1];
|
|
}
|
|
|
|
return speed;
|
|
}
|
|
|
|
int DeviceManager::getSleepTime()
|
|
{
|
|
int sleepTime = SANE_POWER_FIRST;
|
|
unsigned int len2 = sizeof(int);
|
|
sane_io_control(m_handle, IO_CTRL_CODE_GET_POWER_LEVEL, &sleepTime, &len2);
|
|
|
|
if (sleepTime > 99999 || sleepTime == -1)
|
|
return 0;
|
|
|
|
return (sleepTime / 60);
|
|
}
|
|
|
|
int DeviceManager::getDevVid()
|
|
{
|
|
VIDPID vidpid;
|
|
int vidpid_val;
|
|
unsigned int len = sizeof(int);
|
|
sane_io_control(m_handle, IO_CTRL_CODE_GET_VIDPID, &vidpid_val, &len);
|
|
vidpid.Value = vidpid_val;
|
|
int vid = vidpid.VID;
|
|
return vid;
|
|
}
|
|
|
|
int DeviceManager::getDevPid()
|
|
{
|
|
VIDPID vidpid;
|
|
int vidpid_val;
|
|
unsigned int len = sizeof(int);
|
|
sane_io_control(m_handle, IO_CTRL_CODE_GET_VIDPID, &vidpid_val, &len);
|
|
vidpid.Value = vidpid_val;
|
|
int pid = vidpid.PID;
|
|
return pid;
|
|
}
|
|
|
|
void Form_BurnMode::on_tableWidget_itemDoubleClicked(QTableWidgetItem *item)
|
|
{
|
|
int row = item->row();
|
|
QTableWidgetItem *item2 = ui->tableWidget->item(row, 1);
|
|
if (item2->checkState() == Qt::Checked)
|
|
{
|
|
item2->setCheckState(Qt::Unchecked);
|
|
}
|
|
else
|
|
{
|
|
item2->setCheckState(Qt::Checked);
|
|
}
|
|
}
|
|
|
|
//void Form_BurnMode::on_pbtn_close_clicked()
|
|
//{
|
|
// int select = 0;
|
|
// for(int i = 0; i < ui->tableWidget->rowCount(); i++)
|
|
// {
|
|
// QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
// if (item != nullptr && Qt::Checked == item->checkState())
|
|
// {
|
|
// select++;
|
|
// }
|
|
// }
|
|
// if (select == 0)
|
|
// {
|
|
// QMessageBox::information(this, tr("tips"), tr("Please check a devices at least"));
|
|
// return;
|
|
// }
|
|
|
|
// int rowCount = ui->tableWidget->rowCount();
|
|
// for (int i = rowCount - 1; i >= 0; --i)
|
|
// {
|
|
// QTableWidgetItem *item = ui->tableWidget->item(i, 1);
|
|
// if (item != nullptr && Qt::Checked == item->checkState())
|
|
// {
|
|
// DeviceManager *devManager = (DeviceManager*)item->data(Qt::UserRole).value<void*>();
|
|
// delete devManager;
|
|
|
|
// ui->tableWidget->removeRow(i);
|
|
// m_curIndex--;
|
|
// }
|
|
// }
|
|
|
|
// updatetablewidget();
|
|
//}
|