# fssm

## Содержание

+ [Введение](#введение)
+ [Основные возможности](#основные-возможности)
+ [Создание адаптера поддержки сканера](#создание-адаптера-поддержки-сканера)
+ [Лицензионные обязательства](#лицензионные-обязательства)

## Введение

**FSSM (Fingerprint Scanner Support Module)** - модуль поддержки сканеров отпечатков пальцев. Это динамически подключаемая библиотека, предоставляющая унифицированный интерфейс для взаимодействия с различными сканерами отпечатков пальцев от разных производителей.

## Основные возможности

+ **Поддержка множества производителей** - работа с устройствами от разных вендоров через единый API
+ **Кроссплатформенность** - совместимость с различными версиями Windows и Linux

+ **Поддерживаемые устройства**
  + ZKTeco SLK20R
  + ZKTeco ZK9500 (работа устройства поддерживается только для Windows)
  + Futronic FS-80H
  + Futronic FS26
  + Futronic FS10 1 "x1"
  + Anviz U Bio Reader (работа устройства поддерживается только для Windows)
  + Папилон ДС-21C

+ **Расширяемость** - имеется возможность использовать самописные адаптеры поддержки сканеров ([подробнее](#создание-адаптера-поддержки-сканера))

+ **Настройки перед использованием**

  Для использования сканера следует положить адаптеры в папку adapters рядом с библиотекой fssm. Драйверы для соответствующего адаптера по умолчанию следует положить в папку adapters/drivers/*имя_адаптера*.

+ **Основные операции:**

  Коды возврата и описание входных структур можно найти в заголовочных файлах библиотеки.

  | Сигнатура функции   | Назначение |
  | -------- |  ------- |
  | FSSMResult listScanners(FSSMScanner* scanners, size_t* count)      | Получение списка подключённых сканеров|
  | FSSMResult getFingerprint(FSSMScanner scanner, unsigned char* buf,<br>  size_t* width, size_t* height, unsigned int wait_timeout_ms)     | Получение отпечатка с выбранного сканера, с заданием таймаута (бесконечное ожидание если wait_timeout_ms == 0) |
  | FSSMResult getFirstFingerprint(unsigned char* buf, size_t* width,<br> size_t* height, unsigned int wait_timeout_ms)      | Получить отпечаток с любого из подключённых сканеров, с заданием таймаута (бесконечное ожидание если wait_timeout_ms == 0) |
  | FSSMResult cancelScan()         | Отмена сканирования |
  | FSSMResult listAdapters(bool all, const char** adapter_names, size_t* count)        | Получение списка адаптеров (all == false - возвращает только подгруженные адаптеры, all == true - возвращает список всех валидных адаптеров)|
  | FSSMResult isFingerOnScanner(const FSSMScanner* scanner, bool* result)        | Получение информации о том, находится ли палец на сканере или нет, если scanner == nullptr, то смотрим наличие пальца на всех доступных сканерах; работа функции зависит от реализации функции isFingerOn соответствующего адаптера сканера |

## Создание адаптера поддержки сканера

**FSSM** предоставляет механизм расширения для интеграции новых моделей сканеров. Ниже описан API для создания собственного адаптера:

| Сигнатура функции   | Назначение |
| -------- |  ------- |
| FSSMResult initScan(int scannerID)      | Инициализация сканирования |
| FSSMResult scan(int scannerID, unsigned char* scan, size_t* scanWidth, size_t* scanHeight)      | Сканирование и получение отпечатка пальца |
| FSSMResult stopScan(int scannerID)      | Остановка сканирования |
| FSSMResult getDeviceCount(size_t* count)      | Получение количества сканеров |
| FSSMResult getMaxImageSize(int scannerID, size_t* scanWidth, size_t* scanHeight)      | Получение максимального размера изображения отпечатка |
| FSSMResult getName(const char** name)      | Получение названия сканера |
| FSSMResult isReady()      | Готовность загрузки драйвера устройства |
| FSSMResult isFingerOn(int scannerID, bool* result)      | Наличие пальца на устройстве; для сканеров, API которых не позволяет получить информацию о наличии пальца на устройстве, следует возвращать *result==false |

Примечание: предоставленные адаптеры устройств ZKTeco и Papilon при вызове функции isFingerOn всегда возвращают false.

## Лицензионные обязательства

Библиотека является проприетарной и включена в продукты компании АО «Актив-софт» под внутренней лицензией.  

© 2026 АО «Актив-софт». Все права защищены.  
© Rutoken, 2026
