/** * A simple example to show the basic usage of Biostation SDK * * @author sjlee@suprema.co.kr * @see */ /* * Copyright (c) 2006 Suprema Co., Ltd. All Rights Reserved. * * This software is the confidential and proprietary information of * Suprema Co., Ltd. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Suprema. */ #include #include #include "BS_API.h" int main( int argc, char* argv ) { // // (1) Open a communication channel // int handle; BS_InitSDK(); BS_RET_CODE result = BS_OpenSocket( "192.168.1.61", 1470, &handle ); //BS_RET_CODE result = BS_OpenUSB( &handle ); //BS_RET_CODE result = BS_OpenSerial( "COM1", 115200, &handle ); if( result != BS_SUCCESS ) { printf( "Cannot open the communication channel: %d\n", result ); return -1; } unsigned biostationID; result = BS_GetBiostationID( handle, &biostationID ); if( result != BS_SUCCESS ) { printf( "Cannot get the ID: %d\n", result ); BS_CloseSocket( handle ); return -1; } BS_SetBiostationID( handle, biostationID ); // // (2) Read log records // BSLogRecord* logRecord = (BSLogRecord*)malloc( sizeof(BSLogRecord) * 32768 ); int numOfLog; result = BS_ReadLog( handle, 0, 0, &numOfLog, logRecord ); // read All log if( result != BS_SUCCESS ) { printf( "Cannot read log record: %d\n", result ); BS_CloseSocket( handle ); free( logRecord ); return -1; } printf( "Read %d log records\n", numOfLog ); time_t currentTime = BS_ConvertToLocalTime( time(NULL) ); // read log records in latest 24 hours result = BS_ReadLog( handle, currentTime - 24 * 60 * 60, 0, &numOfLog, logRecord ); if( result != BS_SUCCESS ) { printf( "Cannot read log record: %d\n", result ); BS_CloseSocket( handle ); free( logRecord ); return -1; } printf( "Read %d log records\n", numOfLog ); // // (3) Real-time log monitoring // BS_ClearLogCache( handle ); numOfLog = 0; while( !numOfLog ) { result = BS_ReadLogCache( handle, &numOfLog, logRecord ); if( result != BS_SUCCESS ) { printf( "Cannot read log record: %d\n", result ); BS_CloseSocket( handle ); free( logRecord ); return -1; } Sleep( 500 ); } free( logRecord ); // // (4) Get user DB information // int numOfUser, numOfTemplate; result = BS_GetUserDBInfo( handle, &numOfUser, &numOfTemplate ); if( result != BS_SUCCESS ) { printf( "Cannot get user DB info: %d\n", result ); BS_CloseSocket( handle ); return -1; } printf( "Enrolled user: %d template: %d\n", numOfUser, numOfTemplate ); // // (5) Enroll a user // result = BS_Disable( handle, 30 ); if( result != BS_SUCCESS ) { printf( "Cannot enter into communication-only mode: %d\n", result ); BS_CloseSocket( handle ); return -1; } BSUserHdr userHdr; memset( &userHdr, 0, sizeof( BSUserHdr ) ); userHdr.ID = 100; userHdr.accessGroupMask = 0xffffffff; // no access group strcpy( userHdr.name, "Test User" ); strcpy( userHdr.department, "R&D" ); userHdr.adminLevel = BS_USER_NORMAL; userHdr.securityLevel = BS_USER_SECURITY_DEFAULT; userHdr.duressMask = 0x00; // no duress finger userHdr.numOfFinger = 1; unsigned char* templateData = (unsigned char*)malloc( userHdr.numOfFinger * 2 * BS_TEMPLATE_SIZE ); // two templates per finger for( int i = 0; i < userHdr.numOfFinger * 2; i++ ) { result = BS_ScanTemplate( handle, templateData + i * BS_TEMPLATE_SIZE ); if( result != BS_SUCCESS ) { printf( "Cannot get the template data: %d\n", result ); free( templateData ); BS_CloseSocket( handle ); return -1; } for( int j = 0; j < BS_TEMPLATE_SIZE; j++ ) { userHdr.checksum[i/2] += *(templateData + i * BS_TEMPLATE_SIZE + j); } } result = BS_EnrollUser( handle, &userHdr, templateData ); if( result != BS_SUCCESS ) { printf( "Cannot enroll a user: %d\n", result ); free( templateData ); BS_CloseSocket( handle ); return -1; } free( templateData ); BS_Enable( handle ); // // (6) Read/write fingerprint configuration // BSFingerprintConfig fingerprintConfig; result = BS_ReadFingerprintConfig( handle, &fingerprintConfig ); if( result != BS_SUCCESS ) { printf( "Cannot read fingerprint configuration: %d\n", result ); BS_CloseSocket( handle ); return -1; } fingerprintConfig.fastMode = BS_FAST_MODE_FAST; result = BS_Disable( handle, 30 ); if( result != BS_SUCCESS ) { printf( "Cannot enter into communication-only mode: %d\n", result ); BS_CloseSocket( handle ); return -1; } result = BS_WriteFingerprintConfig( handle, &fingerprintConfig ); if( result != BS_SUCCESS ) { printf( "Cannot write fingerprint configuration: %d\n", result ); BS_CloseSocket( handle ); return -1; } BS_Enable( handle ); // // (7) Close communication channel // BS_CloseSocket( handle ); //BS_CloseUSB( handle ); //BS_CloseSerial( handle ); return 0; }