Skip to content

Commit

Permalink
Merge pull request #2 from talesmm14/MultiDevices
Browse files Browse the repository at this point in the history
Multi devices
  • Loading branch information
talesmm14 authored Aug 23, 2022
2 parents 69b9378 + c8f56b4 commit 64ffbf6
Showing 1 changed file with 162 additions and 42 deletions.
204 changes: 162 additions & 42 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <iostream>
#include <pybind11/pybind11.h>
namespace py = pybind11;

#include "NBioAPI.h"
#include "NBioAPI_Export.h"
Expand All @@ -8,80 +9,165 @@
NBioAPI_HANDLE nbioApiHandle;
NBioAPI_DEVICE_ID nbioApiDeviceId;
NBioAPI_RETURN nbioApiReturn;
NBioAPI_UINT32 pNumDevice;
NBioAPI_DEVICE_ID *pDeviceList;

// Initialize the device.
bool NBioBSP_Init() {
if (NBioAPI_Init(&nbioApiHandle) != NBioAPIERROR_NONE) {
std::cout << "ERROR: Initialization failed." << std::endl;
return false;
void NBioBSP_Init_Device(NBioAPI_DEVICE_ID *DeviceId)
{
nbioApiReturn = NBioAPI_OpenDevice(nbioApiHandle, *DeviceId);
if (nbioApiReturn != NBioAPIERROR_NONE)
{
switch (nbioApiReturn)
{
case NBioAPI_INVALID_HANDLE:
std::cout << "ERROR: Problem to invalid NBioBSP handle." << std::endl;
break;
case NBioAPIERROR_INVALID_DEVICE_ID:
std::cout << "ERROR: Problem to invalid device ID." << std::endl;
break;
case NBioAPIERROR_DEVICE_ALREADY_OPENED:
std::cout << "ERROR: Problem to device already opened." << std::endl;
break;
case NBioAPIERROR_DEVICE_OPEN_FAIL:
std::cout << "ERROR: Problem to open device fail." << std::endl;
break;
case NBioAPIERROR_DEVICE_INIT_FAIL:
std::cout << "ERROR: Problem to The FDU05 sensor has scale." << std::endl;
break;
default:
std::cout << "Device ID successfully opened." << std::ends;
break;
}
}
}

nbioApiDeviceId = NBioAPI_DEVICE_ID_AUTO; // Opening the device for use.
nbioApiReturn = NBioAPI_OpenDevice(nbioApiHandle, nbioApiDeviceId);
void NBioBSP_Connect_Devices()
{
nbioApiReturn = NBioAPI_EnumerateDevice(nbioApiHandle, &pNumDevice, &pDeviceList);

if (nbioApiReturn != NBioAPIERROR_NONE) {
std::cout << "ERROR: Unable to connect to device." << std::endl;
if (nbioApiReturn != NBioAPIERROR_NONE)
{
switch (nbioApiReturn)
{
case NBioAPI_INVALID_HANDLE:
std::cout << "ERROR: Problem to invalid NBioBSP handle." << std::endl;
break;
case NBioAPIERROR_INVALID_POINTER:
std::cout << "ERROR: Problem to invalid parameter." << std::endl;
break;
default:
break;
}
}

for (NBioAPI_UINT32 i = 0; i < pNumDevice; i++)
{
NBioBSP_Init_Device(&pDeviceList[i]);
}
}

void NBioBSP_Close_Device(NBioAPI_DEVICE_ID *DeviceId){
nbioApiReturn = NBioAPI_CloseDevice(nbioApiHandle, *DeviceId);
if (nbioApiReturn != NBioAPIERROR_NONE)
{
switch (nbioApiReturn)
{
case NBioAPI_INVALID_HANDLE:
std::cout << "ERROR: Problem to invalid NBioBSP handle." << std::endl;
break;
case NBioAPIERROR_WRONG_DEVICE_ID:
std::cout << "ERROR: Problem to invalid device ID." << std::endl;
break;
case NBioAPIERROR_DEVICE_NOT_OPENED:
std::cout << "ERROR: Problem to device already opened." << std::endl;
break;
default:
std::cout << "Device ID successfully closed." << std::ends;
break;
}
}
}

void NBioBSP_Close_All_Devices(){
for (NBioAPI_UINT32 i = 0; i < pNumDevice; i++)
{
NBioBSP_Close_Device(&pDeviceList[i]);
}
}

// Initialize the device.
bool NBioBSP_Init()
{
if (NBioAPI_Init(&nbioApiHandle) != NBioAPIERROR_NONE)
{
std::cout << "ERROR: Initialization failed." << std::endl;
return false;
}

NBioBSP_Connect_Devices(); // Opening the device for use.

return true;
}

// Method to end device usage and free up memory.
void NBioBSP_Close(){
nbioApiReturn = NBioAPI_CloseDevice(nbioApiHandle, nbioApiDeviceId);
if (nbioApiReturn != NBioAPIERROR_NONE)
std::cout << "ERROR: Problem to close device." << std::endl;
void NBioBSP_Close()
{
NBioBSP_Close_All_Devices();

nbioApiReturn = NBioAPI_Terminate(nbioApiHandle);
if (nbioApiReturn != NBioAPIERROR_NONE)
if (nbioApiReturn != NBioAPIERROR_NONE)
std::cout << "ERROR: Problem to terminate NBioBSP handle." << std::endl;
}

// Method to capture the fingerprint and return a FIR.
std::string NBioBSP_Capture(int timeout){
std::string NBioBSP_Capture(int timeout, bool enRoll)
{
NBioAPI_FIR_HANDLE firHandle;

nbioApiReturn = NBioAPI_Capture(
nbioApiHandle, // Module for handling NBioBSP module.
NBioAPI_FIR_PURPOSE_ENROLL,
&firHandle, // Capture the FIR and put in the variable.
timeout, // Capture timeout.
nbioApiHandle, // Module for handling NBioBSP module.
(enRoll) ? NBioAPI_FIR_PURPOSE_ENROLL : NBioAPI_FIR_PURPOSE_VERIFY,
&firHandle, // Capture the FIR and put in the variable.
timeout, // Capture timeout.
NULL,
NULL
);
NULL);

if (nbioApiReturn != NBioAPIERROR_NONE) {
switch (nbioApiReturn) {
case NBioAPIERROR_INVALID_HANDLE:
return "ERROR: Invalid handle";
case NBioAPIERROR_INVALID_POINTER:
return "ERROR: Invalid pointer";
case NBioAPIERROR_ENCRYPTED_DATA_ERROR:
return "ERROR: Encrypted data error";
case NBioAPIERROR_INTERNAL_CHECKSUM_FAIL:
return "ERROR: Checksum fail";
case NBioAPIERROR_MUST_BE_PROCESSED_DATA:
return "ERROR: Must be processed data";
default:
return "ERROR: Unknown error";
if (nbioApiReturn != NBioAPIERROR_NONE)
{
switch (nbioApiReturn)
{
case NBioAPIERROR_INVALID_HANDLE:
return "ERROR: Invalid handle";
case NBioAPIERROR_INVALID_POINTER:
return "ERROR: Invalid pointer";
case NBioAPIERROR_ENCRYPTED_DATA_ERROR:
return "ERROR: Encrypted data error";
case NBioAPIERROR_INTERNAL_CHECKSUM_FAIL:
return "ERROR: Checksum fail";
case NBioAPIERROR_MUST_BE_PROCESSED_DATA:
return "ERROR: Must be processed data";
default:
return "ERROR: Unknown error";
}
}

// Capture the digital FIR and return the hash of the template.
NBioAPI_FIR_TEXTENCODE textFIR;
nbioApiReturn = NBioAPI_GetTextFIRFromHandle(
nbioApiHandle, firHandle, &textFIR, NBioAPI_FALSE);
if(nbioApiReturn != NBioAPIERROR_NONE)

if (nbioApiReturn != NBioAPIERROR_NONE)
return "ERROR: Problem in NBioAPI get Text FIR from Handle.";

if(nbioApiReturn == NBioAPIERROR_NONE) return textFIR.TextFIR;
else return "NULL";
if (nbioApiReturn == NBioAPIERROR_NONE)
return textFIR.TextFIR;
else
return "NULL";
}

// Method for carrying out comparisons of FIR templates.
bool NBioBSP_Match(std::string firCaptured, std::string firStored){
bool NBioBSP_Match(std::string firCaptured, std::string firStored)
{
NBioAPI_BOOL result;
NBioAPI_INPUT_FIR inputFirCaptured, inputFirStored;

Expand Down Expand Up @@ -131,10 +217,44 @@ bool NBioBSP_Match(std::string firCaptured, std::string firStored){
else return false;
}

PYBIND11_MODULE(pynbiobsp, module) {
// Method to check the presence of a finger on the sensor
bool NBioBSP_Verify_Figer()
{
NBioAPI_BOOL pbExistFinger;
nbioApiReturn = NBioAPI_CheckFinger(nbioApiHandle, &pbExistFinger);

if (nbioApiReturn != NBioAPIERROR_NONE)
{
switch (nbioApiReturn)
{
case NBioAPI_INVALID_HANDLE:
std::cout << "ERROR: Problem to invalid NBioBSP handle." << std::endl;
break;
case NBioAPIERROR_DEVICE_NOT_OPENED:
std::cout << "ERROR: Problem to device not opened." << std::endl;
break;
case NBioAPIERROR_LOWVERSION_DRIVER:
std::cout << "ERROR: Problem to device driver does not support this feature. (HFDU 01/04/06(device driver version 4.1.0.1 or higher), HFDU 11/14(all version), HFDU 05/07 not support.)" << std::endl;
break;
default:
break;
}
}

if (pbExistFinger == NBioAPI_TRUE)
return true;
return false;
}

using namespace pybind11::literals;

PYBIND11_MODULE(pynbiobsp, module)
{
module.doc() = "NBioBSP module for Python to device Nitgen Hamster III";
module.def("init", &NBioBSP_Init, "Initialize the device");
module.def("close", &NBioBSP_Close, "Close the device");
module.def("capture", &NBioBSP_Capture, "Capture FIR template from fingerprint.");
module.def("capture", &NBioBSP_Capture, "Capture FIR template from fingerprint.", py::arg("enRoll")=false, "enRoll"_a = false);
module.def("match", &NBioBSP_Match, "Match two FIRs template.");
module.def("verify_finger", &NBioBSP_Verify_Figer, "Checks if there is a finger on the sensor.");
}

0 comments on commit 64ffbf6

Please sign in to comment.