| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- #include "hspscannerimpl.h"
- #include "CkDBus.h"
- LOG_EXTERN()
- HSPSClassImpl::HSPSClassImpl()
- {
- m_sLibPath[0] = 0;
- m_DBusInf_S = CkDBus::GetDBusInfo_S("HSPScanner");
- //m_lpRQInf=(LPDBusRQInfo)CkDBus::shmget_ptr(FTOK_FILE, sizeof(DBusRQInfo));
- CkDBus::m_pid_Client = GetProcessId(); //
- //m_HSPScannerSercive_Pid=CkDBus::m_HSPScannerSercive_Pid;
- m_bOpen=false;
- }
- HSPSClassImpl::~HSPSClassImpl()
- {
- //m_pHSPSThread->exit();
- // CkDBus::Kill_HSPScannerSercive();
- // shmdt(m_lpRQInf);
- }
- //pid_t m_pid_Client;
- //pid_t m_pid_Service;
- ErrorCodeEnum HSPSClassImpl::DevOpen()
- {
- LOG_FUNCTION();
- //获取服务端的程序完整路径
- QString strPath = CkDBus::GetExePath(SERVICE_NAME);
- chmod(strPath.toStdString().c_str(),777);
- QProcess::startDetached(strPath); //分离式启动外部服务程序,外部程序启动后,当主程序退出时并不退出,而是继续运行
- sleep(2); //等待2秒后继续
- if(m_bOpen)
- {
- LogD("DevOpen() already beopened,line=%d",__LINE__);
- return Error_Succeed;
- }
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "DevOpen");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- m_bOpen=true;
- return (ErrorCodeEnum)lRet;
- }
- ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
- {
- LOG_FUNCTION();
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevCategory");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- devCategory=m_lpRQInf->funcInf.devCategory;
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- ErrorCodeEnum HSPSClassImpl::Reset()
- {
- LOG_FUNCTION();
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "Reset");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- ErrorCodeEnum HSPSClassImpl::DevClose()
- {
- LOG_FUNCTION();
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "DevClose");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- LogM("适配器将主动关闭服务端 服务端pid=[%ld],line=%d", (long)CkDBus::m_pid_Service,__LINE__);
- // //主动关闭服务端
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "CloseServer");//关闭服务端
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("适配器关闭服务端lRet=%d, 服务端pid=[%ld],line=%d",lRet, (long)CkDBus::m_pid_Service,__LINE__)
- return (ErrorCodeEnum)lRet;
- }
- ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
- {
- LOG_FUNCTION();
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "GetLastErr");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- devErrInfo=m_lpRQInf->funcInf.devErrInfo;
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
- {
- LOG_FUNCTION();
- LogM("HSPSClassImpl::SetParam(type=%d,value=%d),line=%d",type,value,__LINE__);
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "SetParam");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- m_lpRQInf->funcInf.Param1=type;
- m_lpRQInf->funcInf.Param2=value;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- //nValue 值为0时关闭预览并隐藏窗口
- ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
- {
- LOG_FUNCTION();
- LogM("HSPSClassImpl::SetPreview(nValue=%d),line=%d",nValue,__LINE__);
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "SetPreview");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- m_lpRQInf->funcInf.Param1= nValue;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- //
- // Scan Image from device and store the image.
- // -pszFileName[in] Store the path and name using suffix ".jpg"
- // specifies that where the image will be located and what it would be named.
- // 拍摄照片,传入的文件名已带绝对路径,无需再进行拼接处理
- //
- ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
- {
- LOG_FUNCTION();
- LogM("HSPSClassImpl::ScanImage(pszFileName=%s),line=%d",pszFileName,__LINE__);
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImage");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- strcpy(m_lpRQInf->funcInf.sFileName,pszFileName);
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- // 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)
- {
- LOG_FUNCTION();
- LogM("HSPSClassImpl::ScanImageEx(pBtImg, nBtLen=[%d], pszFileName=[%s])", nBtLen, pszFileName);
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- //memset(pBtImg, 0x00, nBtLen);
- strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImageEx");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- m_lpRQInf->funcInf.Param1 = nBtLen;
- if(nullptr != pszFileName && strlen(pszFileName) > 0)
- strcpy(m_lpRQInf->funcInf.sFileName, pszFileName);
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- memcpy(pBtImg, m_lpRQInf->funcInf.BtImg, m_lpRQInf->funcInf.Param1);
- nBtLen = m_lpRQInf->funcInf.Param1;
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- //
- // Set position and width of preview dialog with the rate of length to width: 16:9.
- // -nX[in] The X coordinate of leftTop point.
- // -nY[in] The Y coordinate of leftTop point.
- // -nWidth[in] The Width of Preview Dialog .
- // 传入预览窗口显示的坐标,左上角的横坐标nX,左上角的纵坐标nY,以及预览窗口的宽,宽与高的比例为 16:9
- //
- ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
- {
- LOG_FUNCTION();
- LogM("HSPSClassImpl::SetViewPos(nX=%d, nY=%d, nWidth=%d),line=%d",nX, nY, nWidth,__LINE__);
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "SetViewPos");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- m_lpRQInf->funcInf.Param1=nX;
- m_lpRQInf->funcInf.Param2=nY;
- m_lpRQInf->funcInf.Param3=nWidth;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
- //
- // Show property dialog of HSPS of LiangTian.
- // If there is no property dialog function, ignore it and return Error_NotImpl(更新20161117).
- // 更新20161117:用于打开良田高拍仪设备的设置属性页,可能用不到
- //
- ErrorCodeEnum HSPSClassImpl::SetProperty()
- {
- return Error_Succeed;
- }
- //
- // Get current status of device.
- //
- ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
- {
- LOG_FUNCTION();
- CkSharedMemory ckMem(CkSharedMemoryKey);
- m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
- memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
- strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevStatus");
- m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
- long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
- LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
- status=m_lpRQInf->funcInf.status;
- if(m_lpRQInf->funcInf.pid_Service > 0)
- CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
- return (ErrorCodeEnum)lRet;
- }
|