| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- #include "hspscannerimpl.h"
- #include "cmb.h"
- HSPSThread::HSPSThread()
- :QThread (0)
- {
- start();
- }
- void HSPSThread::run()
- {
- exec();
- }
- /////////////////////////////////////////////////////////////////////
- HSPSClassImpl::HSPSClassImpl()
- {
- m_sLibPath[0] = 0;
- m_CamDevice.moveToThread(&m_HSPSThread);
- }
- HSPSClassImpl::~HSPSClassImpl()
- {
- m_HSPSThread.exit();
- }
- ErrorCodeEnum HSPSClassImpl::DevOpen()
- {
- LOG4VTM_FUNCTION();
- SIni ini;
- char sA4[32], sID[32], sAll[32], sUsb[64];
- //拍照裁剪范围设置
- if (ini.GetValueFromIniFile("/cashway/setting/cashway.ini", "HSPScan", "SizeA4", sA4, 30) &&
- ini.GetValueFromIniFile("/cashway/setting/cashway.ini", "HSPScan", "SizeID", sID, 30) &&
- ini.GetValueFromIniFile("/cashway/setting/cashway.ini", "HSPScan", "SizeAll", sAll, 30))
- {
- float dA4[4], dID[4];
- int iSize[2];
- int i1 = sscanf(sA4, "%f,%f,%f,%f", &dA4[0], &dA4[1], &dA4[2], &dA4[3]);
- int i2 = sscanf(sID, "%f,%f,%f,%f", &dID[0], &dID[1], &dID[2], &dID[3]);
- int i3 = sscanf(sAll, "%dx%d", &iSize[0], &iSize[1]);
- if (i1 > 3 && i2 > 3 && i3 > 1) m_CamDevice.SetSize(dA4, dID, iSize);
- }
- //摄像头的pid vid
- if (!ini.GetValueFromIniFile("/cashway/setting/cashway.ini", "HSPScan", "Camera", sUsb, 30))
- {
- strcpy(sUsb, "usb:v04F2pB61E");
- }
- GetCurLibsPath(m_sLibPath, NULL);
- int iRet = m_CamDevice.Open(sUsb);
- return GetErrorInfo(iRet, "DevOpen");
- }
- int getFileVer(char* sFile, short& ch1, short& ch2)
- {
- ch1 = 0;
- ch2 = 0;
- char* pFind = strstr(sFile, ".so");
- char* pTemp = pFind;
- while (pTemp)
- {
- pFind = pTemp;
- pTemp = strstr(pFind + 3, ".so");
- }
- if (pFind == NULL) return 0;
- pTemp = pFind - 1;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch2 = atoi(pTemp+1);
- pTemp--;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if (*pTemp == '.')
- ch1 = atoi(pTemp+1);
- return 1;
- }
- ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
- {
- LOG4VTM_FUNCTION();
- if (!m_CamDevice.m_bIsOpen)
- return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
- memset(&devCategory, 0, sizeof(devCategory));
- strcpy(devCategory.szModel , "FWID=Cam00001");
- strcpy(devCategory.szVendor , "cw");
- strcpy(devCategory.szType ,"00000000");
- char sPath[256], sFile[128] = {0};
- GetCurLibsPath(sPath, sFile);
- short v1,v2;
- getFileVer(sFile, v1, v2);
- devCategory.version.wMajor = v1;
- devCategory.version.wMinor = v2;
- devCategory.version.wRevision = 0xffff;
- devCategory.version.wBuild = FILE_VERSION;
- if (m_CamDevice.State())
- devCategory.eState = DEVICE_STATUS_NORMAL;
- else
- devCategory.eState = DEVICE_STATUS_NOT_READY;
- return Error_Succeed;
- }
- ErrorCodeEnum HSPSClassImpl::Reset()
- {
- LOG4VTM_FUNCTION();
- if (!m_CamDevice.m_bIsOpen)
- return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
- int iRet = 0;
- return GetErrorInfo(iRet, "Reset");
- }
- ErrorCodeEnum HSPSClassImpl::DevClose()
- {
- LOG4VTM_FUNCTION();
- m_CamDevice.Close();
- Sleep(50);
- return Error_Succeed;
- }
- ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
- {
- memcpy(&devErrInfo, &m_DevErrInfo, sizeof(DevErrorInfo));
- return Error_Succeed;
- }
- ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
- {
- LOG4VTM_FUNCTION();
- switch(type){
- case HSPS_MODEL_COLOR:
- m_CamDevice.m_bIsGrey = (value == HSPS_COLOR_GREY);
- break;
- case HSPS_MODEL_ROTATE:
- m_CamDevice.m_iRotate = (value - HSPS_ROTATE_NOANGLE);
- break;
- case HSPS_MODEL_SCANSIZE:
- m_CamDevice.m_iScanSz = (value - HSPS_SCAN_FULL);
- break;
- case HSPS_MODEL_VIEW:
- m_CamDevice.Show(value == HSPS_VIEW_SHOW);
- }
- return Error_Succeed;
- }
- // 更新20161117: nValue值为 1 时打开预览,确保当前打开预览过程执行结束且窗口处于显示状态才返回Error_Succeed,
- // nValue值为 0 时关闭预览并隐藏窗口
- ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
- {
- LOG4VTM_FUNCTION();
- int iRet = 0;
- if (nValue == 1)
- {
- iRet = m_CamDevice.Preview(nValue == 1);
- if (iRet == 0)
- m_CamDevice.Show(true);
- }
- else {
- iRet = m_CamDevice.Preview(nValue == 1);
- }
- return GetErrorInfo(iRet, "SetPreview");
- }
- // specifies that where the image will be located and what it would be named.
- // 拍摄照片,传入的文件名已带绝对路径,无需再进行拼接处理
- //
- ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
- {
- LOG4VTM_FUNCTION();
- if (!m_CamDevice.m_bIsView)
- return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
- int iRet = m_CamDevice.GetPic(pszFileName);
- return GetErrorInfo(iRet, "ScanImage");
- }
- // Scan Image from device and return the image data in byte format.
- // -pBtImg[out] The buffer used to store the scanned image data.
- // 存储图片字节流的缓冲区,大小为 nBtLen 字节
- // -nBtLen[in,out] Indicate the max byte-type size of pBtImg could be stored
- // and Store the real byte-type size of pBtImg had used when returned.
- // when detect value of nBtLen is 0 or smaller that necessary size, please
- // set nBtlen with real byte-type size and return Error_TooSmallBuffer.
- // 如果nBtLen指定的字节数过小,那么对nBtLen赋值实际所需的大小并返回 Error_TooSmallBuffer,此操作仅允许一次
- // -pszFileName[in] Store the path and name where the image file should be located
- // while "" indicates that the image file shouldn't be stored at locate.
- // 文件名长度为零表示不在本地生成图片文件
- ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
- {
- LOG4VTM_FUNCTION();
- if (!m_CamDevice.m_bIsView)
- return GetErrorInfo(ERR_NOT_OPENED, "ScanImageEx");
- char sFile[300];
- bool bFile = false;
- if (strlen(pszFileName))
- {
- strcpy(sFile, pszFileName);
- bFile = true;
- }
- else
- sprintf(sFile, "%s/hsps-temp.jpg", m_sLibPath);
- ErrorCodeEnum eRet = Error_Succeed;
- int iRet = m_CamDevice.GetPic(sFile);
- if (iRet != 0) return GetErrorInfo(iRet, "ScanImageEx");
- FILE* fp = fopen(sFile, "rb");
- fseek(fp, 0, SEEK_END);
- int iLen = ftell(fp);
- if (iLen < nBtLen)
- {
- fseek(fp, 0, SEEK_SET);
- fread(pBtImg, 1, iLen, fp);
- }
- else
- eRet = Error_TooSmallBuffer;
- fclose(fp);
- if (!bFile) remove(sFile);
- return eRet;
- }
- // 传入预览窗口显示的坐标,左上角的横坐标nX,左上角的纵坐标nY,以及预览窗口的宽,宽与高的比例为 16:9
- ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
- {
- LOG4VTM_FUNCTION();
- m_CamDevice.SetPos(nX, nY, nWidth, nWidth*9/16);
- return Error_Succeed;
- }
- ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
- {
- LOG4VTM_FUNCTION();
- status.isConnected = m_CamDevice.m_bIsOpen;
- status.inPreview = m_CamDevice.m_bIsView;
- status.inShow = !m_CamDevice.m_bIsHide;
- return Error_Succeed;
- }
- /////////////////////////////////////////////////////////////////////////////
- // DEC_SUCCESS DEC_HARDWARE DEC_TIMEOUT DEC_INVALID_PARAMETER DEC_INVALID_MASTER_KEY
- const static CmbErrorDef HSPSErrInfo[] = {
- {0, "命令执行成功", Error_Succeed, DEC_SUCCESS},
- {ERR_NO_DEVICE, "未发现设备", Error_Hardware, DEC_DEV_NOT_FOUND},
- {ERR_NOT_OPENED, "设备尚未打开", Error_Param, DEC_DEV_NOT_OPENED},
- {ERR_OPEN_FAIL, "设备打开失败", Error_Hardware, DEC_HARDWARE},
- {ERR_VIEW_FAIL, "启动预览失败", Error_Hardware, DEC_HARDWARE},
- };
- ErrorCodeEnum HSPSClassImpl::GetErrorInfo(int iCode, char* sErr, ...)
- {
- size_t iLenOne = sizeof(CmbErrorDef);
- size_t iLenAll = sizeof(HSPSErrInfo);
- int iCount = iLenAll / iLenOne;
- char sErrInfo[256]="";
- DWORD dSta = 0;
- int iErr = -1;
- for (int ia = 0; ia < iCount; ia++)
- {
- if (HSPSErrInfo[ia].iCode == iCode)
- {
- dSta = HSPSErrInfo[ia].iInf;
- strcpy(sErrInfo, HSPSErrInfo[ia].sInf);
- iErr = HSPSErrInfo[ia].iRet;
- break;
- }
- }
- char sErrAll[300];
- va_list arglist;
- va_start(arglist, sErr);
- _vsnprintf(sErrAll, 128, sErr, arglist);
- va_end(arglist);
- if (sErrInfo[0])
- {
- strcat(sErrAll, " ");
- strcat(sErrAll, sErrInfo);
- }
- sErrAll[200] = 0;
- iLenOne = strlen(sErrAll);
- sprintf(m_DevErrInfo.szErrMsg, "{\"ErrCode\":\"%04x\",\"Description\":\"%s\"}", iErr, sErrAll);
- // strcpy(m_DevErrInfo.szErrMsg, sErrAll);
- m_DevErrInfo.dwErrMsgLen = ((dSta << 16) & 0xffff0000) + iLenOne;
- if (iErr != Error_Succeed)
- LOG4VTM(WARN, m_DevErrInfo.szErrMsg);
- else
- LOG4VTM(INFO, m_DevErrInfo.szErrMsg);
- return (ErrorCodeEnum)iErr;
- }
|