|
@@ -92,12 +92,14 @@ CHSPScannerFSM::CHSPScannerFSM(void)
|
|
|
m_nFatalTimes(0),
|
|
|
m_nSrcState(s0),
|
|
|
m_csDllName(""),
|
|
|
+ m_csDllFullPath(""),
|
|
|
m_csDevNo(""),
|
|
|
m_csPort(""),
|
|
|
m_csBuadrate(""),
|
|
|
m_eDevStatus(DEVICE_STATUS_NOT_READY),
|
|
|
m_desiredAction(USER_EVT_QUIT),
|
|
|
m_bOpened(false),
|
|
|
+ m_bOpening(false),
|
|
|
m_contiErrTimes(0),
|
|
|
dwLastUserCode(0),
|
|
|
m_dwMaxImageSize(500)
|
|
@@ -121,8 +123,7 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
|
|
|
LOG_FUNCTION();
|
|
|
GET_DEV_ENTITY_BASE_POINTER()->InitializeVendorLogSwitch();
|
|
|
ErrorCodeEnum erroCode = Error_Succeed;
|
|
|
-
|
|
|
- CSimpleStringA csDllName(true);
|
|
|
+ m_csDllFullPath.Clear();
|
|
|
auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
|
|
|
CSystemStaticInfo sysInfo;
|
|
|
m_csMachineType = "";
|
|
@@ -130,64 +131,31 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
|
|
|
m_csMachineType = sysInfo.strMachineType;
|
|
|
|
|
|
InitialMaxResizeValue();
|
|
|
- auto result = pEntity->ExtractVendorLibFullPath(csDllName);
|
|
|
+ auto result = pEntity->ExtractVendorLibFullPath(m_csDllFullPath);
|
|
|
if (result == Error_NotConfig) {
|
|
|
PostEventLIFO(new FSMEvent(USER_EVT_NOCFG));
|
|
|
return Error_Succeed;
|
|
|
}
|
|
|
if(FAILURED(result)) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Fetch Vendor dllName failed %s.", (LPCTSTR)csDllName);
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Fetch Vendor dllName failed %s.", (LPCTSTR)m_csDllFullPath);
|
|
|
goto FAIL;
|
|
|
}
|
|
|
- LogWarn(Severity_Low, Error_Unexpect, HSPScanner_UserErrorCode_ROOT_INFO, (LPCTSTR)csDllName);
|
|
|
- m_adapterInfo.adapterFileName = csDllName;
|
|
|
+ LogWarn(Severity_Low, Error_Unexpect, HSPScanner_UserErrorCode_ROOT_INFO, (LPCTSTR)m_csDllFullPath);
|
|
|
+ m_adapterInfo.adapterFileName = m_csDllFullPath;
|
|
|
|
|
|
HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, pEntity->vendorLibInfo.strVendor);
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("VendorDllName: %s.", (LPCTSTR)csDllName);
|
|
|
- result = m_hDevHelper.LoadUp(csDllName);
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("VendorDllName: %s.", (LPCTSTR)m_csDllFullPath);
|
|
|
+ result = m_hDevHelper.LoadUp(m_csDllFullPath);
|
|
|
if (result != Error_Succeed) {
|
|
|
#ifdef RVC_OS_WIN
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s - GLE=%u", (LPCTSTR)pEntity->GetVendorLibName(), GetLastError());
|
|
|
#endif
|
|
|
- goto FAIL;
|
|
|
- }
|
|
|
-
|
|
|
- result = m_hDevHelper->DevOpen();
|
|
|
- if (FAILURED(result)) {
|
|
|
- SetErrPackage(m_errPkg, "OnInit::DevOpen", m_csDevNo, result, MEC_DEVAPI_HSPSCANNER_DevOpen);
|
|
|
- AlarmDEC(m_errPkg);
|
|
|
- goto FAIL;
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Open HSPS succ");
|
|
|
- ZeroMemory(m_devCat.szModel, sizeof(m_devCat.szModel));
|
|
|
- ZeroMemory(m_devCat.szType, sizeof(m_devCat.szType));
|
|
|
- ZeroMemory(m_devCat.szVendor, sizeof(m_devCat.szVendor));
|
|
|
- result = m_hDevHelper->GetDevCategory(m_devCat);
|
|
|
- if (result == Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("szVendor:%s,szType:%s,szModel:%s,version:%d.%d.%d.%d", m_devCat.szVendor
|
|
|
- , m_devCat.szType, m_devCat.szModel, m_devCat.version.wMajor, m_devCat.version.wMinor, m_devCat.version.wRevision, m_devCat.version.wBuild);
|
|
|
- m_adapterInfo.devCatInfo = m_devCat;
|
|
|
- }
|
|
|
- else {
|
|
|
- SetErrPackage(m_errPkg, "OnInit::GetDevCategory", m_csDevNo, result, MEC_DEVAPI_HSPSCANNER_GetDevCategory);
|
|
|
- AlarmDEC(m_errPkg);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ if (Error_Succeed == (erroCode = TryToOpenDevice())) {
|
|
|
+ m_eDevStatus = DEVICE_STATUS_NORMAL;
|
|
|
+ return erroCode;
|
|
|
+ }
|
|
|
}
|
|
|
- m_bOpened = true;
|
|
|
- {
|
|
|
- m_nRecX = 1280;
|
|
|
- m_nRecY = 0;
|
|
|
- m_nRecW = 1920;
|
|
|
- ErrorCodeEnum ecInit = m_hDevHelper->SetViewPos(m_nRecX, m_nRecY, m_nRecW);
|
|
|
- ErrorCodeEnum ecInitScan = m_hDevHelper->SetParam(HSPS_MODEL_SCANSIZE, HSPS_SCAN_FULL);
|
|
|
- ErrorCodeEnum ecInitRotate = m_hDevHelper->SetParam(HSPS_MODEL_ROTATE, HSPS_ROTATE_NOANGLE);
|
|
|
- ErrorCodeEnum ecInitColor = m_hDevHelper->SetParam(HSPS_MODEL_COLOR, HSPS_COLOR_FULL);
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ViewPos: %s, Scan: %s, rotate: %s, color: %s.", SpStrError(ecInit), SpStrError(ecInitScan), SpStrError(ecInitRotate), SpStrError(ecInitColor));
|
|
|
- }
|
|
|
- m_eDevStatus = DEVICE_STATUS_NORMAL;
|
|
|
- return result;
|
|
|
|
|
|
FAIL:
|
|
|
|
|
@@ -197,7 +165,6 @@ FAIL:
|
|
|
|
|
|
ErrorCodeEnum CHSPScannerFSM::OnExit()
|
|
|
{
|
|
|
- LOG_FUNCTION();
|
|
|
|
|
|
if(m_hDevHelper)
|
|
|
{
|
|
@@ -323,6 +290,10 @@ unsigned int CHSPScannerFSM::s0_on_event(FSMEvent* e)
|
|
|
DelAndGetNewFileName(strNoUsed);
|
|
|
}
|
|
|
break;
|
|
|
+ case USER_EVT_GOTOHELL:
|
|
|
+ e->SetHandled();
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("HSPScaner init failed!");
|
|
|
+ break;
|
|
|
default:
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("UnHandle event ! %d", e->iEvt);
|
|
@@ -524,17 +495,13 @@ void CHSPScannerFSM::s3_on_entry()
|
|
|
m_nTickTimes = 0;
|
|
|
m_bOperating = FALSE;
|
|
|
|
|
|
- int nStatus = IsDevConnected();
|
|
|
-
|
|
|
- if(nStatus == 0)
|
|
|
- {
|
|
|
+ const int nStatus = IsDevConnected();
|
|
|
+ if (nStatus == 0) {
|
|
|
PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
+ } else {
|
|
|
// move here. --Josephus at 19:07:40 20161214
|
|
|
m_ecSelfTest = Error_InvalidState;
|
|
|
- if(nStatus != -1) {
|
|
|
+ if (nStatus != -1) {
|
|
|
ScheduleTimer(RESET_TIMER_ID, MILLISECOND_TO_RESET / 6);
|
|
|
}
|
|
|
}
|
|
@@ -561,6 +528,9 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
StartPreviewEvent* pEvt = dynamic_cast<StartPreviewEvent*>(e);
|
|
|
if (!m_bOpened) {
|
|
|
pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
|
|
|
+ //if (Error_Succeed == TryToOpenDevice()) {
|
|
|
+ // PostEventFIFO(new FSMEvent(USER_EVT_OPENSUCC));
|
|
|
+ //}
|
|
|
} else {
|
|
|
StartPreviewTask* pTask = new StartPreviewTask(this);
|
|
|
pTask->SetContext(pEvt->m_ctx);
|
|
@@ -577,7 +547,7 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
break;
|
|
|
case USER_EVT_STOPPREVIEW:
|
|
|
{
|
|
|
- if(m_hDevHelper)
|
|
|
+ if(m_hDevHelper && m_bOpened)
|
|
|
{
|
|
|
CancelTimer(RESET_TIMER_ID);
|
|
|
StopPreviewEvent* pEvt = dynamic_cast<StopPreviewEvent*>(e);
|
|
@@ -604,6 +574,9 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
|
|
|
StopPreviewEvent* pEvt = dynamic_cast<StopPreviewEvent*>(e);
|
|
|
pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
|
|
|
+ //if (Error_Succeed == TryToOpenDevice()) {
|
|
|
+ // PostEventFIFO(new FSMEvent(USER_EVT_OPENSUCC));
|
|
|
+ //}
|
|
|
}
|
|
|
}
|
|
|
e->SetHandled();
|
|
@@ -624,8 +597,13 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
}
|
|
|
e->SetHandled();
|
|
|
break;
|
|
|
+ case USER_EVT_OPENSUCC:
|
|
|
+ ///*TODO(80374374@9/2/2022): */
|
|
|
+ e->SetHandled();
|
|
|
+ break;
|
|
|
case USER_EVT_RESET:
|
|
|
{
|
|
|
+ if (m_bOpened) {
|
|
|
ErrorCodeEnum erroCode = m_hDevHelper->Reset();
|
|
|
Dbg("Reset operation returned %s.", SpStrError(erroCode));
|
|
|
if(FAILURED(erroCode))
|
|
@@ -682,13 +660,15 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
uRet = 2;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
e->SetHandled();
|
|
|
break;
|
|
|
case EVT_TIMER:
|
|
|
{
|
|
|
- if(e->param1 == RESET_TIMER_ID)
|
|
|
- {
|
|
|
+ if (e->param1 == RESET_TIMER_ID) {
|
|
|
FSMEvent* pEvt = new FSMEvent(USER_EVT_RESET);
|
|
|
PostEventFIFO(pEvt);
|
|
|
ScheduleTimer(RESET_TIMER_ID, MILLISECOND_TO_RESET);
|
|
@@ -704,6 +684,9 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
GetDevStatusEvent* pEvt = dynamic_cast<GetDevStatusEvent*>(e);
|
|
|
if (!m_bOpened) {
|
|
|
pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
|
|
|
+ //if (Error_Succeed == TryToOpenDevice()) {
|
|
|
+ // PostEventFIFO(new FSMEvent(USER_EVT_OPENSUCC));
|
|
|
+ //}
|
|
|
} else {
|
|
|
GetDevStatusTask* pTask = new GetDevStatusTask(this);
|
|
|
pTask->SetContext(pEvt->m_ctx);
|
|
@@ -714,10 +697,14 @@ unsigned int CHSPScannerFSM::s3_on_event(FSMEvent* e)
|
|
|
break;
|
|
|
case USER_EVT_GETINFO:
|
|
|
{
|
|
|
- GetDevInfoTask* pTask = new GetDevInfoTask(this);
|
|
|
GetDevInfoEvent* pEvt = dynamic_cast<GetDevInfoEvent*>(e);
|
|
|
- pTask->SetContext(pEvt->m_ctx);
|
|
|
- GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
|
|
|
+ if (!m_bOpened) {
|
|
|
+ pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
|
|
|
+ } else {
|
|
|
+ GetDevInfoTask* pTask = new GetDevInfoTask(this);
|
|
|
+ pTask->SetContext(pEvt->m_ctx);
|
|
|
+ GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
|
|
|
+ }
|
|
|
}
|
|
|
e->SetHandled();
|
|
|
break;
|
|
@@ -1007,7 +994,7 @@ void CHSPScannerFSM::s7_on_entry()
|
|
|
|
|
|
void CHSPScannerFSM::s7_on_exit()
|
|
|
{
|
|
|
- if(m_hDevHelper)
|
|
|
+ if(m_hDevHelper && m_bOpened)
|
|
|
{
|
|
|
HspsDevStatus status = {0};
|
|
|
ErrorCodeEnum erroCode = m_hDevHelper->GetDevStatus(status);
|
|
@@ -1879,7 +1866,29 @@ UINT CHSPScannerFSM::UnitTest(LPCTSTR testTag)
|
|
|
void CHSPScannerFSM::SelfTest(EntityTestEnum eTestType,
|
|
|
CSmartPointer<ITransactionContext> pTransactionContext)
|
|
|
{
|
|
|
- pTransactionContext->SendAnswer(m_ecSelfTest);
|
|
|
+ static int openFailedCount = 0;
|
|
|
+ if (GetCurrState()->id == CHSPScannerFSM::s3) {
|
|
|
+ if (!m_bOpened && !m_bOpening) {
|
|
|
+
|
|
|
+ if (!(bool)m_hDevHelper) {
|
|
|
+ pTransactionContext->SendAnswer(Error_InvalidState);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ openFailedCount++;
|
|
|
+ if (openFailedCount > 3) {
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("try to open device exceed limited times, let selftest to restart it! %d", openFailedCount);
|
|
|
+ pTransactionContext->SendAnswer(Error_InvalidState);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ OpenDeviceTask* pTask = new OpenDeviceTask(this);
|
|
|
+ GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
|
|
|
+ } else if (m_bOpened && openFailedCount != 0) {
|
|
|
+ openFailedCount = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pTransactionContext->SendAnswer(Error_Succeed /*m_ecSelfTest*/);
|
|
|
}
|
|
|
|
|
|
void CHSPScannerFSM::OnStateTrans(int iSrcState, int iDstState)
|
|
@@ -2007,3 +2016,45 @@ void CHSPScannerFSM::InitialMaxResizeValue()
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
|
|
|
+{
|
|
|
+ ErrorCodeEnum result(Error_Succeed);
|
|
|
+ m_bOpening = true;
|
|
|
+
|
|
|
+ result = m_hDevHelper->DevOpen();
|
|
|
+ if (FAILURED(result)) {
|
|
|
+ SetErrPackage(m_errPkg, "OnInit::DevOpen", m_csDevNo, result, MEC_DEVAPI_HSPSCANNER_DevOpen);
|
|
|
+ AlarmDEC(m_errPkg);
|
|
|
+ } else {
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Open HSPS succ");
|
|
|
+ ZeroMemory(m_devCat.szModel, sizeof(m_devCat.szModel));
|
|
|
+ ZeroMemory(m_devCat.szType, sizeof(m_devCat.szType));
|
|
|
+ ZeroMemory(m_devCat.szVendor, sizeof(m_devCat.szVendor));
|
|
|
+ result = m_hDevHelper->GetDevCategory(m_devCat);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("szVendor:%s,szType:%s,szModel:%s,version:%d.%d.%d.%d", m_devCat.szVendor
|
|
|
+ , m_devCat.szType, m_devCat.szModel, m_devCat.version.wMajor, m_devCat.version.wMinor, m_devCat.version.wRevision, m_devCat.version.wBuild);
|
|
|
+ m_adapterInfo.devCatInfo = m_devCat;
|
|
|
+ } else {
|
|
|
+ SetErrPackage(m_errPkg, "OnInit::GetDevCategory", m_csDevNo, result, MEC_DEVAPI_HSPSCANNER_GetDevCategory);
|
|
|
+ AlarmDEC(m_errPkg);
|
|
|
+ }
|
|
|
+
|
|
|
+ m_bOpened = true;
|
|
|
+ {
|
|
|
+ m_nRecX = 1280;
|
|
|
+ m_nRecY = 0;
|
|
|
+ m_nRecW = 1920;
|
|
|
+ ErrorCodeEnum ecInit = m_hDevHelper->SetViewPos(m_nRecX, m_nRecY, m_nRecW);
|
|
|
+ ErrorCodeEnum ecInitScan = m_hDevHelper->SetParam(HSPS_MODEL_SCANSIZE, HSPS_SCAN_FULL);
|
|
|
+ ErrorCodeEnum ecInitRotate = m_hDevHelper->SetParam(HSPS_MODEL_ROTATE, HSPS_ROTATE_NOANGLE);
|
|
|
+ ErrorCodeEnum ecInitColor = m_hDevHelper->SetParam(HSPS_MODEL_COLOR, HSPS_COLOR_FULL);
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ViewPos: %s, Scan: %s, rotate: %s, color: %s.", SpStrError(ecInit), SpStrError(ecInitScan), SpStrError(ecInitRotate), SpStrError(ecInitColor));
|
|
|
+ }
|
|
|
+ m_eDevStatus = DEVICE_STATUS_NORMAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ m_bOpening = false;
|
|
|
+ return result;
|
|
|
+}
|