finger.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include <QDebug>
  2. #include <QFile>
  3. #include <QDir>
  4. #include "finger.h"
  5. #include "config.h"
  6. #include <QImage>
  7. #include <QBuffer>
  8. extern config *pconfig;
  9. finger::finger(QObject *parent) : QThread(parent)
  10. {
  11. }
  12. void finger::slot_set_thread_stop(void)
  13. {
  14. this->threadstatus = false;
  15. }
  16. void finger::slot_fingerWork(bool stat)
  17. {
  18. finger_workStat = stat;
  19. // if(stat == true)
  20. // {
  21. // if(pconfig->fingerStat == true)
  22. // {
  23. // workstat = fingerWorkStat::adcquireFingerprint;
  24. // }
  25. // }
  26. // else{
  27. // if(pconfig->fingerStat == true)
  28. // {
  29. // workstat = fingerWorkStat::sleep;
  30. // }
  31. // }
  32. }
  33. void finger::finger_toImage(unsigned char *data)
  34. {
  35. QByteArray byteArray(reinterpret_cast<const char*>(data), m_imgFPWidth * m_imgFPHeight);
  36. QImage::Format format = QImage::Format_Grayscale8;
  37. // 将字节流转换为 QImage
  38. QImage image(reinterpret_cast<const uchar*>(byteArray.constData()), m_imgFPWidth, m_imgFPHeight, format);
  39. m_pBmpSize = image.bytesPerLine();
  40. QBuffer buffer(&m_pBmpBuf);
  41. buffer.open(QIODevice::WriteOnly);
  42. image.save(&buffer, "BMP");
  43. }
  44. void finger::finger_init(void)
  45. {
  46. int stat = ZKFPM_Init(); // 调用DLL中的函数
  47. if(stat == ZKFP_ERR_OK || stat == ZKFP_ERR_ALREADY_INIT)
  48. {
  49. fingerInit = true;
  50. workstat = fingerWorkStat::opendev;
  51. }
  52. }
  53. void finger::finger_opendev(void)
  54. {
  55. int count = ZKFPM_GetDeviceCount();
  56. qDebug() << "zkfpm_init success, dev count:"<< count;
  57. if(count > 0)
  58. {
  59. fingerHandle = ZKFPM_OpenDevice(0);
  60. qDebug() << "open fingerdev: "<< fingerHandle;
  61. if(fingerHandle != NULL)
  62. {
  63. m_nFakeFunOn = 1;
  64. ZKFPM_SetParameters(fingerHandle, 2002, (unsigned char *)&m_nFakeFunOn, 4);
  65. ZKFPM_SetParameters(fingerHandle, 104, (unsigned char *)&m_nFakeFunOn, 4);
  66. unsigned int size = 4;
  67. ZKFPM_GetParameters(fingerHandle, 1, (unsigned char *)&m_imgFPWidth, &size);
  68. ZKFPM_GetParameters(fingerHandle, 2, (unsigned char *)&m_imgFPHeight, &size);
  69. ZKFPM_GetParameters(fingerHandle, 3, (unsigned char *)&m_impDpi, &size);
  70. m_pImgBuf = new unsigned char[m_imgFPWidth * m_imgFPHeight];
  71. qDebug() << "zkfpm_OpenDevice success";
  72. pconfig->fingerStat = true;
  73. workstat = fingerWorkStat::adcquireFingerprint;
  74. }
  75. }
  76. }
  77. void finger::finger_acquirefingerprint(void)
  78. {
  79. szFingerLen = MAX_TEMPLATE_SIZE;
  80. int ret = ZKFPM_AcquireFingerprint(fingerHandle, m_pImgBuf, m_imgFPWidth * m_imgFPHeight, szFinger, &szFingerLen);
  81. if(ret == ZKFP_ERR_OK)
  82. {
  83. if(finger_workStat == true)
  84. {
  85. finger_toImage(m_pImgBuf);
  86. emit signal_fingerStat(true, m_pBmpBuf, m_pBmpSize);
  87. workstat = fingerWorkStat::adcquireFingerprint;
  88. }
  89. qDebug() << "zkfpm_AcquireFingerprint success:" << szFingerLen;
  90. }
  91. // else{
  92. // qDebug() << "zkfpm_AcquireFingerprint fail:" << ret;
  93. // emit signal_fingerStat(ret, m_pBmpBuf, m_pBmpSize);
  94. // workstat = (finger_workStat == true)?fingerWorkStat::adcquireFingerprint:fingerWorkStat::sleep;
  95. // }
  96. }
  97. void finger::run()
  98. {
  99. while(this->threadstatus)
  100. {
  101. switch(workstat)
  102. {
  103. case fingerWorkStat::init:finger_init();break;
  104. case fingerWorkStat::opendev:finger_opendev();break;
  105. case fingerWorkStat::adcquireFingerprint:finger_acquirefingerprint();break;
  106. default:break;
  107. }
  108. msleep(100);
  109. }
  110. if(fingerHandle != NULL)
  111. {
  112. ZKFPM_CloseDevice(fingerHandle);
  113. }
  114. if(fingerInit == true)
  115. {
  116. ZKFPM_Terminate();
  117. }
  118. // if(workstat != fingerWorkStat::loadDll)
  119. // {
  120. // // 卸载库
  121. // library->unload(); // 卸载DLL
  122. // }
  123. qDebug() << "finger thread exit!";
  124. }