hspscannerimpl.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. #include "hspscannerimpl.h"
  2. #include "CkDBus.h"
  3. LOG_EXTERN()
  4. HSPSClassImpl::HSPSClassImpl()
  5. {
  6. m_sLibPath[0] = 0;
  7. m_DBusInf_S = CkDBus::GetDBusInfo_S("HSPScanner");
  8. //m_lpRQInf=(LPDBusRQInfo)CkDBus::shmget_ptr(FTOK_FILE, sizeof(DBusRQInfo));
  9. CkDBus::m_pid_Client = GetProcessId(); //
  10. //m_HSPScannerSercive_Pid=CkDBus::m_HSPScannerSercive_Pid;
  11. m_bOpen=false;
  12. }
  13. HSPSClassImpl::~HSPSClassImpl()
  14. {
  15. //m_pHSPSThread->exit();
  16. // CkDBus::Kill_HSPScannerSercive();
  17. // shmdt(m_lpRQInf);
  18. }
  19. //pid_t m_pid_Client;
  20. //pid_t m_pid_Service;
  21. ErrorCodeEnum HSPSClassImpl::DevOpen()
  22. {
  23. LOG_FUNCTION();
  24. //获取服务端的程序完整路径
  25. QString strPath = CkDBus::GetExePath(SERVICE_NAME);
  26. chmod(strPath.toStdString().c_str(),777);
  27. QProcess::startDetached(strPath); //分离式启动外部服务程序,外部程序启动后,当主程序退出时并不退出,而是继续运行
  28. sleep(2); //等待2秒后继续
  29. if(m_bOpen)
  30. {
  31. LogD("DevOpen() already beopened,line=%d",__LINE__);
  32. return Error_Succeed;
  33. }
  34. CkSharedMemory ckMem(CkSharedMemoryKey);
  35. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  36. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  37. strcpy(m_lpRQInf->funcInf.sFuncName, "DevOpen");
  38. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  39. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  40. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  41. if(m_lpRQInf->funcInf.pid_Service > 0)
  42. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  43. m_bOpen=true;
  44. return (ErrorCodeEnum)lRet;
  45. }
  46. ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  47. {
  48. LOG_FUNCTION();
  49. CkSharedMemory ckMem(CkSharedMemoryKey);
  50. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  51. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  52. strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevCategory");
  53. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  54. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  55. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  56. devCategory=m_lpRQInf->funcInf.devCategory;
  57. if(m_lpRQInf->funcInf.pid_Service > 0)
  58. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  59. return (ErrorCodeEnum)lRet;
  60. }
  61. ErrorCodeEnum HSPSClassImpl::Reset()
  62. {
  63. LOG_FUNCTION();
  64. CkSharedMemory ckMem(CkSharedMemoryKey);
  65. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  66. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  67. strcpy(m_lpRQInf->funcInf.sFuncName, "Reset");
  68. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  69. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  70. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  71. if(m_lpRQInf->funcInf.pid_Service > 0)
  72. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  73. return (ErrorCodeEnum)lRet;
  74. }
  75. ErrorCodeEnum HSPSClassImpl::DevClose()
  76. {
  77. LOG_FUNCTION();
  78. CkSharedMemory ckMem(CkSharedMemoryKey);
  79. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  80. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  81. strcpy(m_lpRQInf->funcInf.sFuncName, "DevClose");
  82. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  83. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  84. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  85. if(m_lpRQInf->funcInf.pid_Service > 0)
  86. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  87. LogM("适配器将主动关闭服务端 服务端pid=[%ld],line=%d", (long)CkDBus::m_pid_Service,__LINE__);
  88. // //主动关闭服务端
  89. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  90. strcpy(m_lpRQInf->funcInf.sFuncName, "CloseServer");//关闭服务端
  91. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  92. lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  93. LogM("适配器关闭服务端lRet=%d, 服务端pid=[%ld],line=%d",lRet, (long)CkDBus::m_pid_Service,__LINE__)
  94. return (ErrorCodeEnum)lRet;
  95. }
  96. ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  97. {
  98. LOG_FUNCTION();
  99. CkSharedMemory ckMem(CkSharedMemoryKey);
  100. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  101. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  102. strcpy(m_lpRQInf->funcInf.sFuncName, "GetLastErr");
  103. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  104. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  105. devErrInfo=m_lpRQInf->funcInf.devErrInfo;
  106. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  107. if(m_lpRQInf->funcInf.pid_Service > 0)
  108. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  109. return (ErrorCodeEnum)lRet;
  110. }
  111. ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
  112. {
  113. LOG_FUNCTION();
  114. LogM("HSPSClassImpl::SetParam(type=%d,value=%d),line=%d",type,value,__LINE__);
  115. CkSharedMemory ckMem(CkSharedMemoryKey);
  116. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  117. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  118. strcpy(m_lpRQInf->funcInf.sFuncName, "SetParam");
  119. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  120. m_lpRQInf->funcInf.Param1=type;
  121. m_lpRQInf->funcInf.Param2=value;
  122. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  123. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  124. if(m_lpRQInf->funcInf.pid_Service > 0)
  125. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  126. return (ErrorCodeEnum)lRet;
  127. }
  128. //nValue 值为0时关闭预览并隐藏窗口
  129. ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
  130. {
  131. LOG_FUNCTION();
  132. LogM("HSPSClassImpl::SetPreview(nValue=%d),line=%d",nValue,__LINE__);
  133. CkSharedMemory ckMem(CkSharedMemoryKey);
  134. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  135. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  136. strcpy(m_lpRQInf->funcInf.sFuncName, "SetPreview");
  137. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  138. m_lpRQInf->funcInf.Param1= nValue;
  139. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  140. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  141. if(m_lpRQInf->funcInf.pid_Service > 0)
  142. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  143. return (ErrorCodeEnum)lRet;
  144. }
  145. //
  146. // Scan Image from device and store the image.
  147. // -pszFileName[in] Store the path and name using suffix ".jpg"
  148. // specifies that where the image will be located and what it would be named.
  149. // 拍摄照片,传入的文件名已带绝对路径,无需再进行拼接处理
  150. //
  151. ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
  152. {
  153. LOG_FUNCTION();
  154. LogM("HSPSClassImpl::ScanImage(pszFileName=%s),line=%d",pszFileName,__LINE__);
  155. CkSharedMemory ckMem(CkSharedMemoryKey);
  156. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  157. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  158. strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImage");
  159. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  160. strcpy(m_lpRQInf->funcInf.sFileName,pszFileName);
  161. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  162. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  163. if(m_lpRQInf->funcInf.pid_Service > 0)
  164. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  165. return (ErrorCodeEnum)lRet;
  166. }
  167. // Scan Image from device and return the image data in byte format.
  168. // -pBtImg[out] The buffer used to store the scanned image data.
  169. // 存储图片字节流的缓冲区,大小为 nBtLen 字节
  170. // -nBtLen[in,out] Indicate the max byte-type size of pBtImg could be stored
  171. // and Store the real byte-type size of pBtImg had used when returned.
  172. // when detect value of nBtLen is 0 or smaller that necessary size, please
  173. // set nBtlen with real byte-type size and return Error_TooSmallBuffer.
  174. // 如果nBtLen指定的字节数过小,那么对nBtLen赋值实际所需的大小并返回 Error_TooSmallBuffer,此操作仅允许一次
  175. // -pszFileName[in] Store the path and name where the image file should be located
  176. // while "" indicates that the image file shouldn't be stored at locate.
  177. // 文件名长度为零表示不在本地生成图片文件
  178. //
  179. ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
  180. {
  181. LOG_FUNCTION();
  182. LogM("HSPSClassImpl::ScanImageEx(pBtImg, nBtLen=[%d], pszFileName=[%s])", nBtLen, pszFileName);
  183. CkSharedMemory ckMem(CkSharedMemoryKey);
  184. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  185. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  186. //memset(pBtImg, 0x00, nBtLen);
  187. strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImageEx");
  188. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  189. m_lpRQInf->funcInf.Param1 = nBtLen;
  190. if(nullptr != pszFileName && strlen(pszFileName) > 0)
  191. strcpy(m_lpRQInf->funcInf.sFileName, pszFileName);
  192. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  193. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  194. memcpy(pBtImg, m_lpRQInf->funcInf.BtImg, m_lpRQInf->funcInf.Param1);
  195. nBtLen = m_lpRQInf->funcInf.Param1;
  196. if(m_lpRQInf->funcInf.pid_Service > 0)
  197. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  198. return (ErrorCodeEnum)lRet;
  199. }
  200. //
  201. // Set position and width of preview dialog with the rate of length to width: 16:9.
  202. // -nX[in] The X coordinate of leftTop point.
  203. // -nY[in] The Y coordinate of leftTop point.
  204. // -nWidth[in] The Width of Preview Dialog .
  205. // 传入预览窗口显示的坐标,左上角的横坐标nX,左上角的纵坐标nY,以及预览窗口的宽,宽与高的比例为 16:9
  206. //
  207. ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
  208. {
  209. LOG_FUNCTION();
  210. LogM("HSPSClassImpl::SetViewPos(nX=%d, nY=%d, nWidth=%d),line=%d",nX, nY, nWidth,__LINE__);
  211. CkSharedMemory ckMem(CkSharedMemoryKey);
  212. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  213. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  214. strcpy(m_lpRQInf->funcInf.sFuncName, "SetViewPos");
  215. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  216. m_lpRQInf->funcInf.Param1=nX;
  217. m_lpRQInf->funcInf.Param2=nY;
  218. m_lpRQInf->funcInf.Param3=nWidth;
  219. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  220. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  221. if(m_lpRQInf->funcInf.pid_Service > 0)
  222. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  223. return (ErrorCodeEnum)lRet;
  224. }
  225. //
  226. // Show property dialog of HSPS of LiangTian.
  227. // If there is no property dialog function, ignore it and return Error_NotImpl(更新20161117).
  228. // 更新20161117:用于打开良田高拍仪设备的设置属性页,可能用不到
  229. //
  230. ErrorCodeEnum HSPSClassImpl::SetProperty()
  231. {
  232. return Error_Succeed;
  233. }
  234. //
  235. // Get current status of device.
  236. //
  237. ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
  238. {
  239. LOG_FUNCTION();
  240. CkSharedMemory ckMem(CkSharedMemoryKey);
  241. m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
  242. memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
  243. strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevStatus");
  244. m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
  245. long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
  246. LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
  247. status=m_lpRQInf->funcInf.status;
  248. if(m_lpRQInf->funcInf.pid_Service > 0)
  249. CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
  250. return (ErrorCodeEnum)lRet;
  251. }