Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:configuration_api [2020/02/25 08:31]
kkshin [BS2SystemConfig]
en:configuration_api [2024/05/28 19:37] (current)
kkshin
Line 35: Line 35:
   * [[BS2_GetWiegandDeviceConfig]]:​ Retrieves Wiegand device settings from the device.   * [[BS2_GetWiegandDeviceConfig]]:​ Retrieves Wiegand device settings from the device.
   * [[BS2_SetWiegandDeviceConfig]]:​ Stores Wiegand device settings on the device.   * [[BS2_SetWiegandDeviceConfig]]:​ Stores Wiegand device settings on the device.
-  * [[BS2_GetInputConfig]]:​ Retrieves input port settings from the device. +  * [[BS2_GetInputConfig]]:​ Retrieves ​supervised ​input port settings from the device. 
-  * [[BS2_SetInputConfig]]:​ Stores input port settings on the device.+  * [[BS2_SetInputConfig]]:​ Stores ​supervised ​input port settings on the device.
   * [[BS2_GetWlanConfig]]:​ Retrieves wireless LAN settings from the device.   * [[BS2_GetWlanConfig]]:​ Retrieves wireless LAN settings from the device.
   * [[BS2_SetWlanConfig]]:​ Stores wireless LAN settings on the device.   * [[BS2_SetWlanConfig]]:​ Stores wireless LAN settings on the device.
Line 68: Line 68:
   * [[BS2_GetIPV6ConfigViaUDPEx]]:​ [+ 2.6.3] Retrieves IPv6 configuration through UDP broadcast with host IP.    * [[BS2_GetIPV6ConfigViaUDPEx]]:​ [+ 2.6.3] Retrieves IPv6 configuration through UDP broadcast with host IP. 
   * [[BS2_SetIPV6ConfigViaUDPEx]]:​ [+ 2.6.3] Stores IPv6 configuration through UDP broadcast with host IP.    * [[BS2_SetIPV6ConfigViaUDPEx]]:​ [+ 2.6.3] Stores IPv6 configuration through UDP broadcast with host IP. 
-  * [[BS2_GetDesFireCardConfigEx]]:​ [+ V2.6.4] Retrieves DesFire advanced configuration from the device. +  * [[BS2_GetDesFireCardConfigEx]]:​ [+ 2.6.4] Retrieves DesFire advanced configuration from the device. 
-  * [[BS2_SetDesFireCardConfigEx]]:​ [+ V2.6.4] Sets DesFire advanced configuration in the device.+  * [[BS2_SetDesFireCardConfigEx]]:​ [+ 2.6.4] Sets DesFire advanced configuration in the device
 +  * [[BS2_GetAuthConfigExt]]:​ [+ 2.7.1] ''​Visual Face-based devices''​ Retrieves authentication settings from the device. 
 +  * [[BS2_SetAuthConfigExt]]:​ [+ 2.7.1] ''​Visual Face-based devices''​ Stores authentication settings from the device. 
 +  * [[BS2_GetFaceConfigExt]]:​ [+ 2.7.1] Retrieves configuration of thermal camera and mask detection. 
 +  * [[BS2_SetFaceConfigExt]]:​ [+ 2.7.1] Stores configuration of thermal camera and mask detection. 
 +  * [[BS2_GetThermalCameraConfig]]:​ [+ 2.7.1] Retrieves configuration of thermal camera. 
 +  * [[BS2_SetThermalCameraConfig]]:​ [+ 2.7.1] Stores configuration of thermal camera. 
 +  * [[BS2_GetBarcodeConfig]]:​ [+ 2.8] ''​X-Station 2''​ Retrieves configuration of Barcode. 
 +  * [[BS2_SetBarcodeConfig]]:​ [+ 2.8] ''​X-Station 2''​ Stores configuration of Barcode. 
 +  * [[BS2_GetInputConfigEx]]:​​ [+ 2.8.1] ''​​IM-120''​​ Retrieves Expanded Configuration related to the Input. 
 +  * [[BS2_SetInputConfigEx]]:​​ [+ 2.8.1] ''​​IM-120''​​ Retrieves Expanded Configuration related to the Input. 
 +  * [[BS2_GetRelayActionConfig]]:​​ [+ 2.8.1] ''​​IM-120''​​ Retrieves Configuration related to the RelayAction. 
 +  * [[BS2_SetRelayActionConfig]]:​​ [+ 2.8.1] ''​​IM-120''​​ Retrieves Configuration related to the RelayAction. 
 +  * [[BS2_GetVoipConfigExt]]:​ [+ 2.8.3] Gets the extended VoIP settings. 
 +  * [[BS2_SetVoipConfigExt]]:​ [+ 2.8.3] Save the extended VoIP settings. 
 +  * [[BS2_GetRtspConfig]]:​ [+ 2.8.3] Gets the RTSP settings. 
 +  * [[BS2_SetRtspConfig]]:​ [+ 2.8.3] Save the RTSP settings. 
 +  * [[BS2_GetLicenseConfig]]:​ [+ 2.9.1] Gets the device license activation information. 
 +  * [[BS2_GetOsdpStandardConfig]]:​ [+ 2.9.1] Get the device'​s OSDP setting information. 
 +  * [[BS2_GetOsdpStandardActionConfig]]:​ [+ 2.9.1] Get the LED/buzzer settings for each action of the OSDP device. 
 +  * [[BS2_SetOsdpStandardActionConfig]]:​ [+ 2.9.1] Specifies the LED/buzzer setting for each action of the OSDP device. 
 +  * [[BS2_GetCustomCardConfig]]:​ [+ 2.9.4] Retrieves Custom smart card settings. 
 +  * [[BS2_SetCustomCardConfig]]:​ [+ 2.9.4] Stores Custom smart card settings.
 \\ \\
 ===== Structure ===== ===== Structure =====
Line 148: Line 170:
 Represents standard time zone in seconds. \\ \\  Represents standard time zone in seconds. \\ \\ 
 **3. //​syncTime//​** \\  **3. //​syncTime//​** \\ 
-Stores when synchronization with BioStar ​has occurred. \\ \\ +This is a FLAG that determines time synchronization with the BioStar ​Server. \\ \\ 
 **4. //​serverSync//​** \\  **4. //​serverSync//​** \\ 
 Reserved variable. \\ \\ Reserved variable. \\ \\
Line 184: Line 206:
 Also, the required card type MASK should be combined with ''​CARD_OPERATION_USE''​. \\ Also, the required card type MASK should be combined with ''​CARD_OPERATION_USE''​. \\
 For example, useCardOperationMask needs to be configured ''​x0x80000001''​ when EM card is selected only. For example, useCardOperationMask needs to be configured ''​x0x80000001''​ when EM card is selected only.
-<WRAP group 50%>+<WRAP group 60%>
 ^Value ​ ^Description ^ ^Value ​ ^Description ^
 |0xFFFFFFFF ​ |CARD_OPERATION_MASK_DEFAULT ​ | |0xFFFFFFFF ​ |CARD_OPERATION_MASK_DEFAULT ​ |
 |0x80000000 ​ |CARD_OPERATION_USE ​ | |0x80000000 ​ |CARD_OPERATION_USE ​ |
 +|0x00000000 ​ |CARD_OPERATION_MASK_NONE ​ |
 +|0x00000800 ​ |CARD_OPERATION_MASK_CUSTOM_DESFIRE_EV1 ​ |
 +|0x00000400 ​ |CARD_OPERATION_MASK_CUSTOM_CLASSIC_PLUS ​ |
 |0x00000200 ​ |CARD_OPERATION_MASK_BLE ​ | |0x00000200 ​ |CARD_OPERATION_MASK_BLE ​ |
 |0x00000100 ​ |CARD_OPERATION_MASK_NFC ​ | |0x00000100 ​ |CARD_OPERATION_MASK_NFC ​ |
Line 364: Line 389:
     uint8_t timeFormat;     uint8_t timeFormat;
     uint8_t homeFormation;​     uint8_t homeFormation;​
-    ​uint8_t ​useUserPhrase;​ +    ​BS2_BOOL ​useUserPhrase;​ 
-    ​uint8_t reserved[1];+    ​BS2_BOOL queryUserPhrase;
     uint8_t shortcutHome[BS2_MAX_SHORTCUT_HOME];​     uint8_t shortcutHome[BS2_MAX_SHORTCUT_HOME];​
     uint8_t tnaIcon[16];​     uint8_t tnaIcon[16];​
-    uint8_t reserved1[32];+    ​uint8_t useScreenSaver;​ 
 +    uint8_t showOsdpResult;​ 
 +    ​uint8_t reserved1[30];
 } BS2DisplayConfig;​ } BS2DisplayConfig;​
 </​code>​ </​code>​
Line 408: Line 435:
 </​WRAP>​ </​WRAP>​
 **6. //​menuTimeout//​** \\  **6. //​menuTimeout//​** \\ 
-Timeout in seconds for lock screen when the user is inactive. The timeout can be set from 0 to 255 seconds. 0 means no lock screen.\\ ​\\ +Timeout in seconds for lock screen when the user is inactive. The timeout can be set from 0 to 255 seconds. 0 means no lock screen.\\ ​ 
 +<WRAP group 50%> 
 +^Value ​ ^Description ​ ^ 
 +|0  |No timeout. ​ | 
 +|10  |Menu timeout 10 sec.  | 
 +|20  |Menu timeout 20 sec. (Default) ​ | 
 +|30  |Menu timeout 30 sec.  | 
 +|40  |Menu timeout 40 sec.  | 
 +|50  |Menu timeout 50 sec.  | 
 +|60  |Menu timeout 60 sec.  | 
 +</​WRAP>​
 **7. //​msgTimeout//​** \\  **7. //​msgTimeout//​** \\ 
-Message timeout in milliseconds. The timeout can be set from 500 to 5000 milliseconds.\\ ​\\ +Message timeout in milliseconds. The timeout can be set from 500 to 5000 milliseconds.\\ ​ 
 +<WRAP group 50%> 
 +^Value ​ ^Description ​ ^ 
 +|500  |Message timeout 500 msec.  | 
 +|1000  |Message timeout 1 sec.  | 
 +|2000  |Message timeout 2 sec. (Default) ​ | 
 +|3000  |Message timeout 3 sec.  | 
 +|4000  |Message timeout 4 sec.  | 
 +|5000  |Message timeout 5 sec.  | 
 +</​WRAP>​
 **8. //​backlightTimeout//​** \\  **8. //​backlightTimeout//​** \\ 
-Backlight timeout in seconds. \\ \\ +Backlight timeout in seconds. \\  
 +<WRAP group 50%> 
 +^Value ​ ^Description ​ ^ 
 +|0  |Backlight timeout 0 sec.  | 
 +|10  |Backlight timeout 10 sec.  | 
 +|20  |Backlight timeout 20 sec. (Default) ​ | 
 +|30  |Backlight timeout 30 sec.  | 
 +|40  |Backlight timeout 40 sec.  | 
 +|50  |Backlight timeout 50 sec.  | 
 +|60  |Backlight timeout 60 sec.  | 
 +</​WRAP>​
 **9. //​displayDateTime//​** \\  **9. //​displayDateTime//​** \\ 
 Decides whether to display clock on screen. \\ \\  Decides whether to display clock on screen. \\ \\ 
Line 437: Line 493:
 **13. //​useUserPhrase//​** \\  **13. //​useUserPhrase//​** \\ 
 Flag that determines whether to use the user phrase feature. \\ \\  Flag that determines whether to use the user phrase feature. \\ \\ 
-**14. //​shortcutHome//​** \\  +**13. //​queryUserPhrase//​** \\  
-Home screen layout(Currently, not used). \\ \\  +If set true, asks for the user phrase to the server. \\ \\  
-**15. //​tnaIcon//​** \\  +**15. //​shortcutHome//​** \\  
-Icon displayed on the device corresponding ​to the job code. \\ \\ +Home screen layout(Going to apply later, not used currently). \\ \\  
-**16. //reserved1//** \\ +**16. //​tnaIcon//​** \\  
 +Icon displayed on the device corresponding ​TNA key. \\ \\ 
 +**17. //​useScreenSaver//​** \\  
 +If set true, you can activate ​the screensaver. \\ \\ 
 +**18. //showOsdpResult//** \\  
 +[+ 2.9.6] In environments where Suprema devices are connected as peripheral devices to Intelligent Slaves or third-party controllers,​ this option allows authentication results to be displayed on the device screen. \\ 
 +<WRAP group 50%> 
 +^Value ​ ^Description ​ ^ 
 +|0  |Display OSDP Authentication Result (Default) ​ | 
 +|1  |Do Not Display OSDP Authentication Result ​ | 
 +</​WRAP>​ 
 +19. //​reserved1// ​\\ 
 Reserved space. \\  Reserved space. \\ 
  
Line 684: Line 751:
 **23. //​cipher//​** \\ **23. //​cipher//​** \\
 Activates '​Keypad card ID' option. \\ Activates '​Keypad card ID' option. \\
-Default value is 0, it is only valid for XPass D2 Gangbox Keypad type. \\+Default value is 0, it is only valid for Gangbox Keypad type of Xpass 2, XPass D2. \\
 <WRAP group 50%> <WRAP group 50%>
 ^Value ​ ^Description ​ ^ ^Value ​ ^Description ​ ^
Line 775: Line 842:
 ==== BS2Rs485Config ==== ==== BS2Rs485Config ====
 <code cpp> <code cpp>
 +typedef struct {
 +    uint8_t supportConfig;​
 +    uint8_t useExceptionCode;​
 +    uint8_t exceptionCode[BS2_RS485_MAX_FAIL_CODE_LEN];​
 +    uint8_t outputFormat;​
 +    uint8_t osdpID;
 +    uint8_t reserved[4];​
 +} BS2IntelligentPDInfo; ​  //​Added 2.8.0 for Intelligent Slave Feature
 +
 typedef struct { typedef struct {
     uint32_t baudRate;     uint32_t baudRate;
Line 787: Line 863:
     uint8_t mode;     uint8_t mode;
     uint8_t numOfChannels;​     uint8_t numOfChannels;​
-    uint8_t reserved[2];​ +    uint8_t reserved[2]; ​ 
-    uint8_t reserved1[32];+    BS2IntelligentPDInfo intelligentInfo; ​ //Updated to v2.8.0 
 +    uint8_t reserved1[16];
     BS2Rs485Channel channels[BS2_RS485_MAX_CHANNELS];​     BS2Rs485Channel channels[BS2_RS485_MAX_CHANNELS];​
 } BS2Rs485Config;​ } BS2Rs485Config;​
 </​code>​ </​code>​
-**1. //​baudRate//​** \\ +**1. //​supportConfig//​** \\  
 +''​[+V2.8]''​ If this value is 0, the device will ignore all settings related to Intelligent PD (Peripheral Device) below. \\ 
 +useExceptionCode \\ 
 +exceptionCode \\ 
 +outputFormat \\ 
 +osdpID \\ 
 + 
 +**2. //​useExceptionCode//​** \\  
 +''​[+V2.8]''​ This option is available to choose whether the exception code is sent or not. 
 + 
 +**3. //​exceptionCode//​** \\  
 +''​[+V2.8]''​ This function sends an exception code in case of authentication failure or authentication success but no card registered user.\\ 
 +Set the exception code to be used at this time.\\ 
 +If the exception code is 0 (0x0000000000000000),​ no exception code is generated.\\ 
 + 
 +**4. //​outputFormat//​** \\  
 +''​[+V2.8]''​ Intelligent Slave device can send Card ID or User ID upon successful authentication. ​ \\ 
 +If it is 0, the card ID is output, if it is 1, the user ID is output. \\ 
 + 
 +**5. //​osdpID//​** \\  
 +''​[+V2.8]''​ This is a value used to distinguish two or more Suprema Intelligent devices from each other when connecting to the RS485 port of the same third party controller. You can set and designate a unique value between 0 and 127. 
 +The default OSDP ID for Suprema intelligent devices is 0. 
 + 
 + 
 +**6. //​reserved//​** \\  
 +''​[+V2.8]''​ Reserved space.\\  
 + 
 + 
 +**7. //​baudRate//​** \\ 
 The RS-485 communication speed which can be configured as below. \\ The RS-485 communication speed which can be configured as below. \\
 <WRAP group 50%> <WRAP group 50%>
Line 802: Line 907:
 |115200 ​ | |115200 ​ |
 </​WRAP>​ </​WRAP>​
-**2. //​channelIndex//​** \\  +**8. //​channelIndex//​** \\  
-Communication channel index of the RS-485 network. \\ \\ +(non configurable index) ​Communication channel index of the RS-485 network. \\ \\ 
-**3. //​useRegistance//​** \\  +**9. //​useRegistance//​** \\  
-Decides whether to use a resistance. \\ \\ +Registance flag - no effect on operation. \\ \\ 
-**4. //​numOfDevices//​** \\ +**10. //​numOfDevices//​** \\ 
 Number of slave devices.\\ \\ Number of slave devices.\\ \\
-**5. //​slaveDevices//​** \\ +**11. //​reserved//​** \\  
 +Reserved space.\\ \\ 
 +**12. //​slaveDevices//​** \\ 
 List of slave devices, which can be configured up to 32 devices.\\ \\ List of slave devices, which can be configured up to 32 devices.\\ \\
-**6. //mode//** \\ +**13. //mode//** \\ 
 Decides the operating mode on the RS-485 network.\\ Decides the operating mode on the RS-485 network.\\
 <WRAP group 50%> <WRAP group 50%>
Line 819: Line 926:
 |3  |Standalone ​ | |3  |Standalone ​ |
 </​WRAP>​ </​WRAP>​
-**7. //​numOfChannels//​** \\ +**14. //​numOfChannels//​** \\ 
 Number of RS-485 channel.\\ \\  Number of RS-485 channel.\\ \\ 
-**8. //​reserved//​** \\ +**15. //​reserved//​** \\ 
 Reserved space.\\ \\  Reserved space.\\ \\ 
-**9. //​reserved1//​** \\  +**16. //​intelligentInfo//​** \\  
-Reserved space.\\ \\ +''​[+V2.8]''​ This is Intelligent Slave Device Information\\  
-**10. //​channels//​** \\ +This only works when the device mode is RS485 default.\\ 
 +Once the Suprema device is connected to a slave device to the 3rd party ACU through RS485(OSDP),​ the Suprema device becomes a Peripheral Device of the OSDP automatically.\\ \\ 
 + 
 +**17. //​reserved1//​** \\  
 +Reserved space.\\ \\  
 +**18. //​channels//​** \\ 
 List of RS-485 channels, which can be configured up to 4 channels.\\ \\  List of RS-485 channels, which can be configured up to 4 channels.\\ \\ 
  
Line 851: Line 963:
     uint16_t wiegandCardMask;​     uint16_t wiegandCardMask;​
     uint8_t wiegandCSNIndex;​     uint8_t wiegandCSNIndex;​
-    uint8_t reserved[27];+    ​uint8_t useWiegandUserID;​ 
 +    ​uint8_t reserved[26];
 } BS2WiegandConfig;​ } BS2WiegandConfig;​
 </​code>​ </​code>​
Line 921: Line 1034:
 **16. //​wiegandCSNIndex//​** \\ **16. //​wiegandCSNIndex//​** \\
 Index that determines in which format the device will send out a wiegand ouput after the card has been read. This field is used only for Mifare and EM devices. Please check the //​useWiegandFormat//​ field of the [[configuration api#​BS2CardConfig]] structure before configuring. \\ \\ Index that determines in which format the device will send out a wiegand ouput after the card has been read. This field is used only for Mifare and EM devices. Please check the //​useWiegandFormat//​ field of the [[configuration api#​BS2CardConfig]] structure before configuring. \\ \\
-**17. //​reserved//​** \\  +**17. //​useWiegandUserID//​** \\ 
-Reserved space\\ \\ +The flag you can select whether card ID or user ID to be sent via Wiegand output. \\ 
 +<WRAP group 50%> 
 +^Value ​ ^Description ​ ^ 
 +|0  |Not use  | 
 +|1  |Card ID  | 
 +|2  |User ID  | 
 +</​WRAP>​ 
 +**18. //​reserved//​** \\  
 +Reserved space.\\ 
  
  
Line 1123: Line 1244:
     uint32_t deviceID;     uint32_t deviceID;
     uint8_t type;     uint8_t type;
-    uint8_t reserved[3];+    uint8_t reserved
 +    uint16_t ignoreSignalTime;
     ​     ​
     union {     union {
Line 1169: Line 1291:
 |3|Schedule trigger| |3|Schedule trigger|
 </​WRAP>​ </​WRAP>​
 +11. //​reserved//​ \\ 
 +Reserved space. \\ \\
 +12. //​ignoreSignalTime//​ \\ 
 +[+2.9.6] This setting is specified in milliseconds and is used to ignore repetitive input signals within a certain time frame. \\
 +In environments where Suprema devices are connected to third-party controllers via Wiegand, \\
 +if the feedback for authentication is repetitively input to the Suprema device from a specific model of the controller, \\
 +this feature allows you to forcibly ignore the input signal for the specified duration. \\ \\
  
 ==== BS2Action ==== ==== BS2Action ====
Line 1326: Line 1455:
 26. //type// \\  26. //type// \\ 
 Action types. \\ Action types. \\
 +<WRAP round important 60%>
 +<wrap em>​[DoorModule-20,​ CoreStation-40]</​wrap>​ \\
 +If the action type is relay or TTL (Output) and the action device is DM20, CS40,
 +Action type should be set only as relay action (6). (TTL setting not possible) \\ \\
 +<wrap em>​[DM20]</​wrap>​ \\
 +  * Action type : Relay
 +  * relay.relayIndex : 0 ~ 3 (RELAY 0 ~ 3)
 +  * relay.relayIndex : 4 ~ 9 (OUTPUT 0 ~ 5)
 +<wrap em>​[CS40]</​wrap>​ \\
 +  * Action type : Relay
 +  * relay.relayIndex : 0 ~ 3 (RELAY 0 ~ 3)
 +  * relay.relayIndex : 4 ~ 11 (OUTPUT 0 ~ 7)
 +</​WRAP>​
 <WRAP group 50%> <WRAP group 50%>
 ^Value ​ ^Description ​ ^ ^Value ​ ^Description ​ ^
Line 1341: Line 1483:
 |11|Led action| |11|Led action|
 |12|Fire alarm input| |12|Fire alarm input|
 +|13|Auth Success(Access granted)|
 +|14|Auth Fail(Access denied)|
 +|15|Lift action|
 </​WRAP>​ </​WRAP>​
 27. //​stopFlag//​ \\  27. //​stopFlag//​ \\ 
Line 1557: Line 1702:
 Reserved space.\\ \\ Reserved space.\\ \\
  
-==== BS2FaceConfig====+==== BS2FaceConfig ====
 <code cpp> <code cpp>
 typedef struct { typedef struct {
Line 1571: Line 1716:
     uint8_t ​      ​previewOption;​     uint8_t ​      ​previewOption;​
     bool          checkDuplicate;​     bool          checkDuplicate;​
-    uint8_t ​      reserved[2];+    uint8_t ​      operationMode;​ 
 +    uint8_t ​      ​maxRotation;
  
-    uint8_t ​      reserved2[26]; +    ​// Deprecated 
 +    struct { 
 +        uint16_t ​ min; 
 +        uint16_t ​ max; 
 +    } faceWidth;​ 
 + 
 +    // Deprecated 
 +    struct { 
 +        uint16_t ​ x; 
 +        uint16_t ​ width; 
 +    } searchRange;​ 
 + 
 +    struct { 
 +        uint8_t min; // 30 ~ 100 
 +        uint8_t max; // 40 ~ 100, 255 
 +    } detectDistance;​ ////<​ 2 bytes 
 +     
 +    BS2_BOOL wideSearch;​ ///<​ 1 byte 
 +    uint8_t unused; 
 +     
 +    uint8_t unableToSaveImageOfVisualFace;​ 
 +    ​uint8_t ​reserved[13];
 } BS2FaceConfig;​ } BS2FaceConfig;​
 </​code>​ </​code>​
Line 1591: Line 1758:
 |1  |Outdoor ​ | |1  |Outdoor ​ |
 |2  |Automatic ​ | |2  |Automatic ​ |
 +|3  |[+ 2.8] Not used  |
 </​WRAP>​ </​WRAP>​
 +[Note]\\
 +FaceStation F2: v1.0.0 - v1.0.5 \\
 +Ambient Brightness: Normal, High, ''​Auto''​ \\
 +FaceStation F2: v1.1.0 or higher version \\ 
 +Light Brightness: Normal, High, ''​Not Used''​ \\
 +
 **3. //​enrollThreshold//​** \\  **3. //​enrollThreshold//​** \\ 
-Threshold of face enrollment.\\ ​+Threshold of face enrollment. ​It determines how much movement of pose is allowed when enrolling the face.  ​\\ 
 <WRAP group 50%> <WRAP group 50%>
 ^Value ​ ^Description ​ ^ ^Value ​ ^Description ​ ^
-|0  |THRESHOLD_0 ​ |+|0  |THRESHOLD_0 ​(Most strict) ​|
 |1  |THRESHOLD_1 | |1  |THRESHOLD_1 |
 |2  |THRESHOLD_2 ​ | |2  |THRESHOLD_2 ​ |
Line 1605: Line 1779:
 |7  |THRESHOLD_7 ​ | |7  |THRESHOLD_7 ​ |
 |8  |THRESHOLD_8 ​ | |8  |THRESHOLD_8 ​ |
-|9  |THRESHOLD_9 ​ |+|9  |THRESHOLD_9 ​(Least strict) ​|
 </​WRAP> ​ </​WRAP> ​
 **4. //​detectSensitivity//​** \\  **4. //​detectSensitivity//​** \\ 
Line 1613: Line 1787:
 |0  |Off  | |0  |Off  |
 |1  |Low  | |1  |Low  |
-|2  |Basic  |+|2  |Medium ​ |
 |3  |High  | |3  |High  |
 </​WRAP>​ </​WRAP>​
 **5. //​enrollTimeout//​** \\  **5. //​enrollTimeout//​** \\ 
-Timeout period of face scanning which is 60 seconds by default.\\ \\+''​IR Face supported''​ : Timeout period of face scanning which is 60 seconds by default.\\ \\ 
 +<WRAP group 60%> 
 +^Value ​ ^Description ​ ^ 
 +|BS2_FACE_ENROLL_TIMEOUT_MIN ​ |30  | 
 +|BS2_FACE_ENROLL_TIMEOUT_MAX ​ |60  | 
 +|BS2_FACE_ENROLL_TIMEOUT_DEFAULT ​ |BS2_FACE_ENROLL_TIMEOUT_MAX ​ | 
 +</​WRAP>​ 
 +''​Visual Face supported''​ : [+ 2.7.1] Face scan wait time, default is 20 seconds. \\  
 +<WRAP group 70%> 
 +^Value ​ ^Description ​ ^ 
 +|BS2_FACE_EX_ENROLL_TIMEOUT_MIN ​ |10  | 
 +|BS2_FACE_EX_ENROLL_TIMEOUT_MAX ​ |20  | 
 +|BS2_FACE_EX_ENROLL_TIMEOUT_DEFAULT ​ |BS2_FACE_EX_ENROLL_TIMEOUT_MAX ​ | 
 +</​WRAP>​ 
 + 
 **6. //​lfdLevel//​** \\ **6. //​lfdLevel//​** \\
-[+ V2.6.3] Configuration for the LFD(Live Face Detection - fake face detection) sensitivity. \\+[+ 2.6.3] Configuration for the LFD(Live Face Detection - fake face detection) sensitivity. \\ 
 +''​IR Face supported''​ : Default is 0. \\ 
 +''​Visual Face supported''​ : [+ 2.7.1] Default is 1. \\
 <WRAP group 50%> <WRAP group 50%>
 ^Value ​ ^Description ​ ^ ^Value ​ ^Description ​ ^
Line 1628: Line 1819:
 </​WRAP>​ </​WRAP>​
 **7. //​quickEnrollment//​** \\ **7. //​quickEnrollment//​** \\
-[+ V2.6.3] Quick face enrollment process. \\+[+ 2.6.3] Quick face enrollment process. \\
 True - Face enrollment process with a single step.\\ True - Face enrollment process with a single step.\\
-False - Face enrollment ​rpcoess ​with 3 steps.\\+False - Face enrollment ​process ​with 3 steps.\\
 Please use false if you want to enroll with a high quality of face templates. \\ \\ Please use false if you want to enroll with a high quality of face templates. \\ \\
 **8. //​previewOption//​** \\ **8. //​previewOption//​** \\
-[+ V2.6.3] IR camera preview option when you authenticate with face. \\+[+ 2.6.3] IR camera preview option when you authenticate with the face. \\
 Only used to ''​FaceLite''​. \\ Only used to ''​FaceLite''​. \\
 <WRAP group 50%> <WRAP group 50%>
 ^Value ​ ^Description ​ ^ ^Value ​ ^Description ​ ^
 |0  |Preview not used  | |0  |Preview not used  |
-|1  |Preview not used at frist of authentication,​ preview at 1/2 stage  |+|1  |Preview not used at first of authentication,​ preview at 1/2 stage  |
 |2  |Preview of all stages on authentication ​ | |2  |Preview of all stages on authentication ​ |
 </​WRAP>​ </​WRAP>​
 **9. //​checkDuplicate//​** \\ **9. //​checkDuplicate//​** \\
-[+ V2.6.4] Check whether the scanned face is duplicated in the device. \\ \\ +[+ 2.6.4] Check whether the scanned face is duplicated in the device. \\ \\ 
-**10. //reserved//** \\  + 
-Reserved space. \\ \\ +**10. //operationMode//** \\  
-**11. //reserved2//** \\  +[+ 2.7.1] ''​FaceStation F2 V1.0.0''​ can be set to the following operation modes, default is Fusion mode. \\  
-Reserved space. \\ \\+<WRAP group 50%> 
 +^Value ​ ^Mode  ^Description ​ ^Default ​ ^ 
 +|0  |Fusion Mode |Visual matching + IR matching |Default | 
 +|1  |Visual Mode |Visual matching | | 
 +|2  |Visual + IR |Visual matching, IR detects only face| | 
 +</​WRAP>​  
 + 
 +''​FaceStation F2 V1.0.1''​ or later versions, ''​Visual Face based''​ are used in the following sense. 
 +<WRAP group 50%> 
 +|0  |Fusion Mode |Visual matching + IR matching |Default | 
 +|1  |Fast Mode |Visual matching | | 
 +</​WRAP>​ 
 + 
 +**11. //​maxRotation//​** ​\\  
 +[+ 2.7.1] ''​Visual Face based''​ When face is recognized normally it's front side. \\ 
 +Still, it is possible to determine how many degrees the image has been rotated from the front when device detects a face. \\ 
 +This enables detection failure in the case of images rotated over a certain angle. \\ 
 +maxRotation represents the maximum allowable value in this case, and the default value is 15 degrees. \\ \\ 
 +[+ 2.9.6] Additional definitions of Angle \\ 
 +<WRAP group 40%> 
 +^Definition ​ ^Value ​ ^ 
 +|BS2_MAX_ROTATION_DEFAULT ​ | 15  | 
 +|BS2_MAX_ROTATION_ANGLE_15 ​ | 15  | 
 +|BS2_MAX_ROTATION_ANGLE_30 ​ | 30  | 
 +|BS2_MAX_ROTATION_ANGLE_45 ​ | 45  | 
 +|BS2_MAX_ROTATION_ANGLE_60 ​ | 60  | 
 +|BS2_MAX_ROTATION_ANGLE_75 ​ | 75  | 
 +|BS2_MAX_ROTATION_ANGLE_90 ​ | 90  | 
 +|BS2_MAX_ROTATION_ANGLE_MAX ​ | 90  | 
 +</​WRAP>​  
 + 
 +**12. //faceWidth//** \\  
 +[+ 2.7.1] ''​Visual Face based''​ This indicates the width of the face image, and you can specify the minimum and maximum values. \\  
 +The default values of min and max are as follows. \\ 
 +<WRAP group 30%> 
 +^  ^Default(min) ​ ^Default(max) ​ ^ 
 +|FSF2  |66  |250  | 
 +|BS3  |130  |350  | 
 +|BEW3  |130  |350  | 
 +</​WRAP>​  
 + 
 +**13. //​searchRange//​** \\ 
 +[+ 2.7.1] ''​Visual Face based''​ Represents the face search range, and you can specify the x value (horizontal coordinate) of the range and the width from the x value point. \\  
 +The default values of x and width are as follows. \\ 
 +<WRAP group 30%> 
 +^  ^Default(x) ​ ^Default(width) ​ ^ 
 +|FSF2  |144  |432  | 
 +|BS3  |90  |540  | 
 +|BEW3  |90  |540  | 
 +</​WRAP>​  
 + 
 +**14. //​detectDistance//​** \\ 
 +[+ 2.8.3] ''​Visual Face based''​ This configures the minimum and maximum detection range for facial recognition. \\ 
 +We no longer support faceWidth to pinpoint the face location using pixel units due to its complexity. \\ 
 +Instead, we set the detection range of the subject(face). The unit is set to cm, and the value must be inputted as a multiple of 10. \\ 
 +<WRAP group 80%> 
 +^  ^Min limit for min detection range  ^Max limit for min detection range  ^Min detection range(Default) ^Min limit for max detection range  ^Max limit for max detection range  ^Max sensing range(No limit) ​ ^Max sensing range(Default) ​ ^ 
 +|FSF2 |30  |130  |30  |40  |130  |255  |130  | 
 +|BS3  |30  |100  |30  |40  |100  |255  |100  | 
 +|BEW3  |30  |100  |30  |40  |100  |255  |100  | 
 +</​WRAP>​  
 + 
 +**15. //​wideSearch//​** \\ 
 +[+ 2.8.3] ''​BioStation 3, BioEntry W3''​ This can increase the detection range for face detection. \\ 
 +We no longer support searchRange to set the x-coordinate and width due to its complexity. \\ 
 +Instead, we set the face detection setting as default(FALSE),​ or a wide area(TRUE). \\ 
 +The details of the settings and protocols for the detection of wide area is set within the device, which the user cannot change. \\ \\ 
 +If this setting is set to TRUE, the camera detects subjects within a large range, and unintentionally detect and authenticate multiple subjects at once. \\ 
 +Therefore, the default setting is at FALSE. \\ \\ 
 + 
 +16. //unused// \\ 
 +Reserved space.\\ \\ 
 +17. //​unableToSaveImageOfVisualFace//​ \\ 
 +[+ 2.9.6] Indicates whether devices that use visual face as a credential will store facial images on the device. \\ 
 +Enabling this setting will immediately delete image information from all users' facial data stored in the device, leaving only the templates. \\ 
 +Additionally,​ even if face information containing user images is obtained through the [[BS2_EnrollUserFaceEx]] API, the device will ignore it. \\ 
 +The default value is false, which means both facial data and images are stored. \\ \\ 
 +18. //​reserved// ​\\ 
 +Reserved space.\\ \\
 ==== BS2Rs485ConfigEX ==== ==== BS2Rs485ConfigEX ====
 <code cpp> <code cpp>
Line 1955: Line 2224:
 8. //​reserved//​ \\ 8. //​reserved//​ \\
 Reserved space. \\  Reserved space. \\ 
 +
 +
 +==== BS2AuthConfigExt ====
 +<code cpp>
 +typedef struct {
 +    uint32_t extAuthSchedule[BS2_MAX_NUM_OF_EXT_AUTH_MODE];​
 +    uint8_t useGlobalAPB;​
 +    uint8_t globalAPBFailAction;​
 +    uint8_t useGroupMatching;​
 +    uint8_t reserved;
 +
 +    uint8_t reserved2[4];​
 +
 +    uint8_t usePrivateAuth;​
 +    uint8_t faceDetectionLevel;​
 +    uint8_t useServerMatching;​
 +    uint8_t useFullAccess;​
 +
 +    uint8_t matchTimeout;​
 +    uint8_t authTimeout;​
 +    uint8_t numOperators;​
 +    uint8_t reserved3[1];​
 +
 +    struct {
 +        char userID[BS2_USER_ID_SIZE];​
 +        uint8_t level;
 +        uint8_t reserved[3];​
 +    } operators[BS2_MAX_OPERATORS];​
 +
 +    uint8_t reserved4[256];​
 +} BS2AuthConfigExt;​
 +</​code>​
 +**1. //​extAuthSchedule//​** \\ 
 +Schedule values to operate when each authentication mode is activated. \\
 +It has the following meanings for each value. \\
 +If the value in the array is greater than 0, the authentication mode is activated. \\
 +In the explanations below, biometric information means fingerprints or faces depending on the device. \\
 +<WRAP group 70%>
 +^Value ^Code  ^Description ​ ^
 +|11  |BS2_EXT_AUTH_MODE_FACE_ONLY ​ |Face |
 +|12  |BS2_EXT_AUTH_MODE_FACE_FINGERPRINT ​ |Face + Fingerprint ​ |
 +|13  |BS2_EXT_AUTH_MODE_FACE_PIN ​ |Face + PIN  |
 +|14  |BS2_EXT_AUTH_MODE_FACE_FINGERPRINT_OR_PIN ​ |Face + Fingerprint/​PIN ​ |
 +|15  |BS2_EXT_AUTH_MODE_FACE_FINGERPRINT_PIN ​ |Face + Fingerprint + PIN  |
 +|16  |BS2_EXT_AUTH_MODE_FINGERPRINT_ONLY ​ |Fingerprint |
 +|17  |BS2_EXT_AUTH_MODE_FINGERPRINT_FACE ​ |Fingerprint + Face |
 +|18  |BS2_EXT_AUTH_MODE_FINGERPRINT_PIN ​ |Fingerprint + PIN  |
 +|19  |BS2_EXT_AUTH_MODE_FINGERPRINT_FACE_OR_PIN ​ |Fingerprint + Face/​PIN ​ |
 +|20  |BS2_EXT_AUTH_MODE_FINGERPRINT_FACE_PIN ​ |Fingerprint + Face + PIN  |
 +|21  |BS2_EXT_AUTH_MODE_CARD_ONLY ​ |Card |
 +|22  |BS2_EXT_AUTH_MODE_CARD_FACE ​ |Cardn + Face  |
 +|23  |BS2_EXT_AUTH_MODE_CARD_FINGERPRINT ​ |Card + Fingerprint ​ |
 +|24  |BS2_EXT_AUTH_MODE_CARD_PIN ​ |Card + PIN  |
 +|25  |BS2_EXT_AUTH_MODE_CARD_FACE_OR_FINGERPRINT ​ |Card + Face/​Fingerprint ​ |
 +|26  |BS2_EXT_AUTH_MODE_CARD_FACE_OR_PIN ​ |Card + Face/​PIN ​ |
 +|27  |BS2_EXT_AUTH_MODE_CARD_FINGERPRINT_OR_PIN ​ |Card + Fingerprint/​PIN ​ |
 +|28  |BS2_EXT_AUTH_MODE_CARD_FACE_OR_FINGERPRINT_OR_PIN ​ |Card + Face/​Fingerprint/​PIN ​ |
 +|29  |BS2_EXT_AUTH_MODE_CARD_FACE_FINGERPRINT ​ |Card + Face + Fingerprint ​ |
 +|30  |BS2_EXT_AUTH_MODE_CARD_FACE_PIN ​ |Card + Face + PIN  |
 +|31  |BS2_EXT_AUTH_MODE_CARD_FINGERPRINT_FACE ​ |Card + Fingerprint + Face  |
 +|32  |BS2_EXT_AUTH_MODE_CARD_FINGERPRINT_PIN ​ |Card + Fingerprint + PIN  |
 +|33  |BS2_EXT_AUTH_MODE_CARD_FACE_OR_FINGERPRINT_PIN ​ |Card + Face/​Fingerprint + PIN  |
 +|34  |BS2_EXT_AUTH_MODE_CARD_FACE_FINGERPRINT_OR_PIN ​ |Card + Face + Fingerprint/​PIN ​ |
 +|35  |BS2_EXT_AUTH_MODE_CARD_FINGERPRINT_FACE_OR_PIN ​ |Card + Fingerprint + Face/​PIN ​ |
 +|36  |BS2_EXT_AUTH_MODE_ID_FACE ​ |ID + Face  |
 +|37  |BS2_EXT_AUTH_MODE_ID_FINGERPRINT ​ |ID + Fingerprint ​ |
 +|38  |BS2_EXT_AUTH_MODE_ID_PIN ​ |ID + PIN  |
 +|39  |BS2_EXT_AUTH_MODE_ID_FACE_OR_FINGERPRINT ​ |ID + Face/​Fingerprint ​ |
 +|40  |BS2_EXT_AUTH_MODE_ID_FACE_OR_PIN ​ |ID + Face/​PIN ​ |
 +|41  |BS2_EXT_AUTH_MODE_ID_FINGERPRINT_OR_PIN ​ |ID + Fingerprint/​PIN ​ |
 +|42  |BS2_EXT_AUTH_MODE_ID_FACE_OR_FINGERPRINT_OR_PIN ​ |ID + Face/​Fingerprint/​PIN ​ |
 +|43  |BS2_EXT_AUTH_MODE_ID_FACE_FINGERPRINT ​ |ID + Face + Fingerprint ​ |
 +|44  |BS2_EXT_AUTH_MODE_ID_FACE_PIN ​ |ID + Face + PIN  |
 +|45  |BS2_EXT_AUTH_MODE_ID_FINGERPRINT_FACE ​ |ID + Fingerprint + Face  |
 +|46  |BS2_EXT_AUTH_MODE_ID_FINGERPRINT_PIN ​ |ID + Fingerprint + PIN  |
 +|47  |BS2_EXT_AUTH_MODE_ID_FACE_OR_FINGERPRINT_PIN ​ |ID + Face/​Fingerprint + PIN  |
 +|48  |BS2_EXT_AUTH_MODE_ID_FACE_FINGERPRINT_OR_PIN ​ |ID + Face + Fingerprint/​PIN ​ |
 +|49  |BS2_EXT_AUTH_MODE_ID_FINGERPRINT_FACE_OR_PIN ​ |ID + Fingerprint + Face/​PIN ​ |
 +</​WRAP>​
 +2. //​useGlobalAPB//​ \\ 
 +This flag determines whether to enable Global APB zone. \\ \\ 
 +3. //​globalAPBFailAction//​ \\ 
 +This is a basic action to be performed when the device cannot query the server for Global APB violation. ​ \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Do not check APB  |
 +|1  |Soft APB  |
 +|2  |Hard APB  |
 +</​WRAP>​
 +4. //​useGroupMatching//​ \\
 +Enables facial group matching. \\ \\
 +5. //​reserved//​ \\ 
 +Reserved space. \\ \\ 
 +6. //​reserved2//​ \\ 
 +Reserved space. \\ \\ 
 +7. //​usePrivateAuth//​ \\ 
 +Enable private authentication mode. \\ \\ 
 +8. //​faceDetectionLevel//​ \\ 
 +This is the face detection level value when authenticating the user in BioStation A2, and if a face is detected at a level lower than the specified level, it is treated as an authentication failure.\\
 +When enabled, the camera view according to Normal/​Strict is displayed, and access is denied if the image log is not recognized as a face when successful authentication. The default is 0. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Do not detect face  |
 +|1  |Normal mode  |
 +|2  |Strict mode  |
 +</​WRAP>​
 +<WRAP info>
 +It is available only in BioStation A2, not available in FaceStation2 or FaceLite. ​
 +</​WRAP>​
 +9. //​useServerMatching//​ \\ 
 +Enable server matching for fingerprint matching or facial matching. \\ \\ 
 +10. //​useFullAccess//​ \\ 
 +This parameter is not in use. \\ \\ 
 +11. //​matchTimeout//​ \\ 
 +The maximum response time in fingerprint or facial matching and the unit is seconds(sec). \\ \\
 +12. //​authTimeout//​ \\ 
 +The maximum response time in user authentication and the unit is seconds(sec). ​ \\ \\
 +13. //​numOperators//​ \\ 
 +The number of operators. \\ \\ 
 +14. //​reserved3//​ \\ 
 +Reserved \\ \\ 
 +15. //userID// \\ 
 +User ID \\ \\ 
 +16. //level// \\ 
 +It specifies the corresponding level of the user when the user is authenticated.\\ ​
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |No level  |
 +|1  |Operator level  |
 +|2  |System configuration level  |
 +|3  |User information level  |
 +</​WRAP>​
 +<WRAP alert>
 +**CAUTION**\\
 +You must specify the number of operators to be added in the field **//​numOperators//​** when adding operators. ​
 +</​WRAP>​
 +17. //​reserved//​ \\ 
 +Reserved \\ 
 +18. //​reserved4//​ \\ 
 +Reserved \\ \\ 
 +
 +
 +==== BS2FaceConfigExt ====
 +<code cpp>
 +typedef struct {
 +    uint8_t thermalCheckMode;​
 +    uint8_t maskCheckMode;​
 +    uint8_t reserved[2];​
 +
 +    uint8_t thermalFormat;​
 +    uint8_t reserved2;
 +
 +    uint16_t thermalThresholdLow;​
 +    uint16_t thermalThresholdHigh;​
 +    uint8_t maskDetectionLevel;​
 +    uint8_t auditTemperature;​
 +
 +    uint8_t useRejectSound;​
 +    uint8_t useOverlapThermal;​
 +    uint8_t useDynamicROI;​
 +    uint8_t faceCheckOrder;​
 +} BS2FaceConfigExt;​
 +</​code>​
 +1. //​thermalCheckMode//​ \\ 
 +Sets the thermal check mode. \\
 +When set to HARD, access is denied if exceeding the thermalThreshold. \\
 +When set to SOFT, access is not affected even if exceeding the thermalThreshold but leaves a related log. \\
 +If thermalCheckMode is set to No use(0), \\
 +The settings of thermalFormat,​ thermalThreshold,​ auditTemperature,​ and useOverlapThermal are ignored. \\
 +And the reject sound due to thermal check by useRejectSound,​ the temperature check by faceCheckOrder is ignored. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^Default ​ ^
 +|0  |No use  |Default ​ |
 +|1  |Thermal Check Mode (HARD) ​ |  |
 +|2  |Thermal Check Mode (SOFT) ​ |  |
 +</​WRAP>​
 +2. //​maskCheckMode//​ \\ 
 +''​Visual Face based''​ Sets the Mask Check Mode. \\ 
 +When set to HARD, access is denied if not detecting any mask on the face based on maskDetectionLevel. \\
 +When set to SOFT, access is not affected even if not detecting any mask on the face based on maskDetectionLevel but leaves a related log. \\
 +If maskCheckMode is set to No use(0), \\
 +The setting of maskDetectionLevel is ignored. \\
 +And the reject sound due to mask detection check by useRejectSound,​ the mask detection check by faceCheckOrder is ignored. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^Default ​ ^
 +|0  |No use  |Default ​ |
 +|1  |Mask Check Mode (HARD) ​ |  |
 +|2  |Mask Check Mode (SOFT) ​ |  |
 +</​WRAP>​
 +3. //​reserved//​ \\ 
 +Reserved \\ \\
 +4. //​thermalFormat//​ \\
 +Represents the temperature unit. You may choose the unit in Fahrenheit or Celsius \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^Default ​ ^
 +|0  |Fahrenheit ​  ​| ​ |
 +|1  |Celsius |Default ​ |
 +</​WRAP>​
 +5. //​reserved2//​ \\ 
 +Reserved \\ \\
 +6. //​thermalThresholdLow//​ \\
 +This is the range value for determining high temperature and must be entered as a value multiplied by 100 of the temperature to be set. \\
 +Also, you can only enter in degrees Celsius. \\
 +This value is the basis for the denial of authentication,​ and the setting range is between 100 (1º) and 4500 (45º). \\
 +The default value is 3200 (32º), and if a value larger or smaller than the setting range is entered, the default value a set to 3200 (32º). \\
 +And you must set a value less than thermalThresholdHigh. \\ \\
 +7. //​thermalThresholdHigh//​ \\
 +This is the range value for determining high temperature and must be entered as a value multiplied by 100 of the temperature to be set. \\
 +Also, you can only enter in degrees Celsius. \\
 +This value is the basis for the denial of authentication,​ and the setting range is between 100 (1º) and 4500 (45º). \\
 +The default value is 3800 (38º), and if a value larger or smaller than the setting range is entered, the default value a set to 3800 (38º). \\
 +And you must set a value greater than thermalThresholdLow. \\ \\
 +8. //​maskDetectionLevel//​ \\
 +''​Visual Face based''​ Sets the mask detection level. The detecting level is based on internal setting value. \\
 +<WRAP group 50%>
 +^Value ^Description ​ ^Default ​ ^
 +|0  |No detection ​ |Default ​ |
 +|1  |Detection level (Normal) ​ |  |
 +|2  |Detection level (High) ​ |  |
 +|3  |Detection level (Very high)  |  |
 +</​WRAP>​
 +9. //​auditTemperature//​ \\ 
 +Decides whether the measured temperature is recorded in the log or not. \\ \\
 +10. //​useRejectSound//​ \\
 +Decides whether it sounds when rejecting a user due to thermalThreshold or maskDetectionLevel. \\ \\
 +11. //​useOverlapThermal//​ \\
 +Displays a thermal image overlaid on the screen. \\ \\
 +12. //​useDynamicROI//​ \\ 
 +When set to true, when measuring temperature,​ the user's forehead is found and measured, not a fixed area. \\ \\
 +13. //​faceCheckOrder//​ \\ 
 +It defines the sequence of thermal check and mask detection and authentication. \\
 +Because the user should touch the device in the case of ID combination authentication or PIN combination authentication,​\\
 +it is important to decide whether the device authenticates before all check modes or afterward especially in a high-risk environment.\\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^Default ​ ^
 +Authentication before Temperature check or Mask detection check 
 +|0  |Check after authentication | Default ​ |
 +|1  |Check before authentication ​ |  |
 +|2  |No authentication,​ check only  |  |
 +</​WRAP>​
 +
 +
 +
 +
 +==== BS2ThermalCameraConfig ====
 +<code cpp>
 +typedef struct {
 +    uint8_t distance;
 +    uint8_t emissionRate;​
 +
 +    struct {
 +        uint16_t x;
 +        uint16_t y;
 +        uint16_t width;
 +        uint16_t height;
 +    } roi;
 +
 +    uint8_t useBodyCompensation;​
 +    int8_t compensationTemperature;​
 +} BS2ThermalCameraConfig;​
 +</​code>​
 +1. //​distance//​ \\ 
 +The distance measured by the thermal imaging camera. The unit is cm, and the default is 100. \\ \\
 +2. //​emissionRate//​ \\
 +The emissivity of the subject reflecting heat. \\
 +It is recommended to enter within the [95/97/98] range. If the subject is a human, 98 is recommended. \\ \\
 +3. //roi// \\
 +ROI (Region of interest) refers to the region of interest. \\
 +It can be specified through coordinates (x, y) and range (width, height) values when measuring temperature on the face. \\ \\
 +4. //​useBodyCompensation//​ \\ 
 +It decides whether to use the compensate the body temperature. \\ \\
 +5. //​compensationTemperature//​ \\
 +There may be a slight difference between the actual body temperature and the body temperature measurement using the camera, and you can correct the difference by setting a value here. \\
 +It must be as the value multiplied by 10 of the temperature to be set. The value is available -50 ~ +50 \\ \\
 +
 +==== BS2BarcodeConfig ====
 +<code cpp>
 +typedef struct {
 +    uint8_t useBarcode;
 +    uint8_t scanTimeout;​
 +    uint8_t bypassData;
 +    uint8_t treatAsCSN;
 +
 +    uint8_t useVisualBarcode;​
 +    uint8_t motionSensitivity;​
 +    uint8_t visualCameraScanTimeout;​
 +    uint8_t reserved[9];​
 +} BS2BarcodeConfig;​
 +</​code>​
 +1. //​useBarcode//​ \\ 
 +''​Supports XS2-QR models only''​
 +Barcode usage flag. \\ \\ 
 +2. //​scanTimeout//​ \\ 
 +Set the Barcode scan time. The unit is in seconds. \\
 +The default is 4 seconds, and can be entered within a range of 4 to 10 seconds. \\ \\
 +<WRAP group 50%>
 +^Value ​ ^Macro ​ ^Description ​ ^
 +|4  |BS2_BARCODE_TIMEOUT_DEFAULT ​ |Default ​ |
 +|4  |BS2_BARCODE_TIMEOUT_MIN ​ |Min Value  |
 +|10  |BS2_BARCODE_TIMEOUT_MAX ​ |Max Value  |
 +</​WRAP>​
 +3. //​bypassData//​ \\ 
 +[+2.8.2] Used to send read barcode information to the server, not processed by the device. \\
 +If the barcode value is stored in the user information structure for user authentication,​ \\
 +There is a size constraint of 32 bytes ([[smartcard_api#​BS2CSNCard|BS2CSNCard data]]) \\
 +Call the [[BS2_SetBarcodeScanListener]],​ use this option to send barcodes up to 512 bytes of size to the server. \\ \\
 +4. //​treatAsCSN//​ \\
 +[+2.8.2] Indicates whether the Barcode should be treated the same as a regular CSN card. \\
 +It is applied from XS2-QR 1.1.3 and in the case of false, it is treated the same as before. \\
 +This allows you to freely specify character sets that can be treated as barcodes from ASCII codes 32 to 126. (See description in [[qr_code_api#​BS2_WriteQRCode|BS2_WriteQRCode]]) \\
 +If set to true, the barcode is treated like a number just like the existing CSN. \\
 +Therefore, if you want to set the bar code card data with special characters and English characters. \\
 +In this case, only the card type may be different, and the CSN card and barcode data may be used in the same value. \\ \\
 +5. //​useVisualBarcode//​ \\
 +[+2.9.1] Visual barcode usage flag. \\
 +<WRAP group 50%>
 +^Supported devices ​ ^Firmware ​ ^
 +|XS2-Finger ​ |V1.2.0 ​ |
 +|XS2-Card ​ |V1.2.0 ​ |
 +|BS3  |V1.1.0 ​ |
 +</​WRAP>​
 +Visual barcode scans QR code with a general visual camera instead of a QR code sensor, \\
 +and a separate license activation is required to use this feature. \\
 +License activation is supported through [[BS2_EnableDeviceLicense]]. \\ \\
 +6. //​motionSensitivity//​ \\
 +[+2.9.1] Set the sensitivity of motion sensor for visual barcode. \\
 +<WRAP group 50%>
 +^Value ​ ^Macro ​ ^Description ​ ^
 +|0  |BS2_MOTION_SENSITIVITY_LOW ​ |Low  |
 +|1  |BS2_MOTION_SENSITIVITY_NORMAL ​ |Normal ​ |
 +|2  |BS2_MOTION_SENSITIVITY_HIGH ​ |High  |
 +</​WRAP>​
 +7. //​visualCameraScanTimeout//​ \\
 +[+2.9.1] Set the scan time for the visual camera. Units are seconds. \\
 +The default is 10 seconds, and can be entered within a range of 3 to 20 seconds. \\
 +<WRAP group 50%>
 +^Value ​ ^Macro ​ ^Description ​ ^
 +|10  |BS2_VISUAL_BARCODE_TIMEOUT_DEFAULT ​ |Default ​ |
 +|3  |BS2_VISUAL_BARCODE_TIMEOUT_MIN ​ |Min Value  |
 +|20  |BS2_VISUAL_BARCODE_TIMEOUT_MAX ​ |Max Value  |
 +</​WRAP>​
 +8. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +
 +==== BS2InputConfigEx ====
 +<code cpp>
 +typedef struct {
 +    uint8_t ​   numInputs;
 +    uint8_t ​   numSupervised;​
 +    uint8_t ​   reserved[18];​
 +
 +    struct {
 +        uint8_t ​   portIndex;
 +        uint8_t ​   switchType;
 +        uint16_t ​  ​duration;​
 +    ​
 +        uint8_t ​   reserved;
 +        uint8_t ​   supervisedResistor;​
 +        uint8_t ​   reserved1[16];​
 +    ​
 +        uint8_t ​   reserved2[26];​
 +    } inputs[BS2_MAX_INPUT_NUM_EX];​
 +
 +    uint8_t ​   reserved2[200];​
 +} BS2InputConfigEx;​
 +</​code>​
 +1. //​​numInputs//​​ \\ 
 +Number of Input port. \\ \\
 +2. //​​numSupervised//​​ \\
 +Number of supervised input port. \\ \\
 +3. //​​reserved//​​ \\
 +Reserved Space. \\ \\
 +4. //​​portIndex//​​ \\ 
 +Input Port Number. \\ \\
 +5. //​switchType//​ \\
 +Input Signal Type. \\ 
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Normally Open  |
 +|1  |Normally Closed ​ |
 +</​WRAP> ​
 +6. //​​duration//​​ \\ 
 +Input Signal Duration Time Measurement is milliseconds(ms). \\ \\
 +7. //​​reserved//​​ \\
 +Reserved Space. \\ \\
 +8. //​​supervisedResistor//​​ \\
 +You can set Supervised input resistance value type or unsupervise it. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |1K Resistance ​ |
 +|1  |2.2K Resistance ​ |
 +|2  |4.7K Resistance ​ |
 +|3  |10K Resistance ​ |
 +|254  |Unsupervised(Default) ​ |
 +</​WRAP> ​
 +9. //​​reserved1//​​ \\
 +Reserved Space. \\ \\
 +10. //​​reserved2//​​ \\
 +Reserved Space. \\ \\
 +11. //​​reserved2//​​ \\
 +Reserved Space. \\ \\
 + 
 +==== BS2RelayActionConfig ====
 +<code cpp>
 +typedef struct {
 +    uint32_t ​       deviceID;​ ///<​ 4 bytes
 +    uint8_t ​        ​reserved[16];​ ///<​ 16 bytes
 +
 +    struct {
 +        uint8_t ​    ​port;​ ///<​ 1 byte (relay port)
 +        uint8_t ​    ​reserved0;​ ///<​ 1 byte
 +        uint8_t ​    ​disconnEnabled;​ ///<​ 1 byte (RS485 disconnection)
 +        uint8_t ​    ​reserved[9];​ ///<​ 9 bytes
 +        ​
 +        struct {
 +            uint8_t port;​ ///<​ 1 byte (input port)
 +            uint8_t type;​ ///<​ 1 byte (linkage/​latching/​release)
 +            uint8_t mask;​ ///<​ 1 byte (alarm/​fault)
 +            uint8_t reserved[9];​ ///<​ 9 bytes
 +        } input[BS2_MAX_RELAY_ACTION_INPUT];​ ///<​ 192 bytes
 +    } relay[BS2_MAX_RELAY_ACTION];​ ///< 816 bytes
 +
 +    uint8_t reserved2[152];​ ///<​ 152 bytes
 +} BS2RelayActionConfig;​
 +</​code>​
 +1. //​​deviceID//​​ \\ 
 +Device Identifier \\ \\
 +2. //​​reserved//​​ \\
 +Reserved Space. \\ \\
 +3. //relay// \\
 +Relay Setting Information \\ \\
 +4. //port// \\ 
 +Relay port Number. \\ \\
 +5. //​​reserved0//​​ \\
 +Reserved Space. \\ \\
 +6. //​​disconnEnabled//​​ \\ 
 +If set to true, a signal is made when RS485 is disconnected. \\ \\
 +7. //​​reserved//​​ \\
 +Reserved Space. \\ \\
 +8. //input// \\
 +Defines to which input ports the relay ports will take action. \\ \\
 +9. //port// \\
 +Input port Identifier. \\ \\
 +10. //type// \\
 +Defines in which input type the input will take action. \\
 +If set to Linkage, signal can be made when alarm is set to mask. \\
 +<WRAP group 50%>
 +^type  ^Value ​ ^Description ​ ^
 +|NONE  |0  |OFF ​ |
 +|LINKAGE ​ |1  |Connect to the relay of the input ​ |
 +|LATCHING ​ |2  |''​​Not Supported''​ ​ |
 +|RELEASE ​ |3  |''​​Not Supported''​ ​ |
 +</​WRAP>​
 +11. //mask// \\
 +Set mask to Input Signal Info. \\
 +<WRAP group 50%>
 +^type  ^Value ​ ^Description ^
 +|NONE  |0  |OFF ​ |
 +|ALARM ​ |1  |Signal Made ​ |
 +|FAULT ​ |2  |Signal Made when disconnected ​ |
 +</​WRAP>​
 +12. //​​reserved//​​ \\
 +Reserved Space. \\ \\
 +13. //​​reserved2//​​ \\
 +Reserved Space. \\ \\
 +
 +==== BS2VoipConfigExt ====
 +<code cpp>
 +typedef struct {
 +    BS2_USER_ID phoneNumber;​
 +    char description[48 * 3];
 +
 +    uint8_t reserved[32];​
 +} BS2ExtensionNumber;​
 +
 +typedef struct {
 +    BS2_BOOL enabled;
 +    BS2_BOOL useOutboundProxy;​
 +    uint16_t registrationDuration;​
 +
 +    BS2_URL address;
 +    BS2_PORT port;
 +
 +    struct {
 +        uint8_t speaker;​ //​ 0 ~ 100
 +        uint8_t mic; // 0 ~ 100
 +    } volume;​ ///<​ 2 bytes
 +
 +    BS2_USER_ID id;
 +    BS2_USER_ID password;
 +    BS2_USER_ID authorizationCode;​
 +
 +    struct {
 +        BS2_URL address;
 +        BS2_PORT port;
 +        uint8_t reserved[2];​
 +    } outboundProxy;​
 +
 +    uint8_t exitButton; ​           /// *, #, 0~9
 +    uint8_t reserved1;
 +    uint8_t numPhoneBook;​
 +    BS2_BOOL showExtensionNumber;​
 +
 +    BS2ExtensionNumber phonebook[128];​
 +
 +    uint8_t reserved2[32]; ​       ///< 32 bytes (reserved)
 +} BS2VoipConfigExt;​
 +</​code>​
 +1. //​phoneNumber//​ \\
 +This is the extension. \\ \\
 +2. //​description//​ \\
 +Display information. \\ \\
 +3. //​reserved//​ \\
 +Reserved space. \\ \\
 +4. //enabled// \\
 +Sets whether the VoIP extension feature is enabled. \\ \\
 +5. //​useOutboundProxy//​ \\
 +Sets whether the Outbound Proxy Server is configured. \\ \\
 +6. //​registrationDuration//​ \\
 +The cycle of updating the relevant information to the SIP server. \\
 +Set in seconds and must be between 60 and 600. \\ \\
 +7. //address// \\
 +Enter the IP address of the SIP server (usually BioStar). \\ \\
 +8. //port// \\
 +Enter the SIP server port. The default port is 5060. \\ \\
 +9. //speaker// \\
 +Enter the speaker volume information for the intercom in the range 0 to 100. The default value is 50. \\ \\
 +10. //mic// \\
 +Enter the microphone volume information for the intercom in the range 0 to 100. The default value is 50. \\ \\
 +11. //id// \\
 +Enter the ID to connect to the SIP server. \\
 +12. //​password//​ \\
 +Specifies the password to connect to the SIP server. \\ \\
 +13. //​authorizationCode//​ \\
 +The authentication code value required to connect to the SIP server. \\ \\
 +14. //​outboundProxy//​ \\
 +Enter Outbound proxy server information. \\ \\
 +15. //address// \\
 +Enter the IP address of the Outbound Proxy Server. \\ \\
 +16. //port// \\
 +Enter the Outbound Proxy Server port. \\ \\
 +17. //​reserved//​ \\
 +Reserved space. \\ \\
 +18. //​exitButton//​ \\
 +Button symbol to be used as a check-out button. \\
 +<WRAP group 50%>
 +^Value ^Description ^
 +|*  |'​*'​ ASCII code 42  |
 +|#  |'#'​ ASCII code 35  |
 +|0~9  |'​0'​~'​9'​ ASCII code (48~57) ​ |
 +</​WRAP> ​
 +19. //​reserved1//​ \\
 +Reserved space. \\ \\
 +20. //​numPhoneBook//​ \\
 +Number of phone books. \\ \\
 +21. //​showExtensionNumber//​ \\
 +Determines whether to show the phone book. \\ \\
 +22. //​phonebook//​ \\
 +You can specify up to 128 extensions in your phone book. \\ \\
 +23. //​reserved2//​ \\
 +Reserved space. \\ \\
 +
 +
 +==== BS2RtspConfig ====
 +<code cpp>
 +typedef struct {
 +    BS2_USER_ID id;
 +    BS2_USER_ID password;
 +
 +    BS2_URL address;
 +
 +    BS2_PORT port;
 +    BS2_BOOL enabled;
 +    uint8_t reserved;
 +
 +    uint8_t reserved2[32];​
 +} BS2RtspConfig;​
 +</​code>​
 +1. //id// \\
 +Account information when connecting to the RTSP server. \\ \\
 +2. //​password//​ \\
 +Password when connecting to the RTSP server. \\ \\
 +3. //address// \\
 +Enter the address of the RTSP server. \\ \\
 +4. //port// \\
 +Enter the RTSP server connection port. The default port is 554. \\ \\
 +5. //enabled// \\
 +Sets whether an RTSP connection is enabled. \\ \\
 +6. //​reserved//​ \\
 +Reserved space. \\ \\
 +7. //​reserved2//​ \\
 +Reserved space. \\ \\
 +
 +
 +==== BS2License ====
 +<code cpp>
 +typedef struct {
 +    uint8_t ​              ​index;​
 +    uint8_t ​              ​hasCapability;​
 +    uint8_t ​              ​enable;​
 +    uint8_t ​              ​reserved;​
 +    BS2_LICENSE_TYPE ​     licenseType;​
 +    BS2_LICENSE_SUB_TYPE ​ licenseSubType;​
 +    uint32_t ​             enableTime;
 +    uint32_t ​             expiredTime;​
 +    uint32_t ​             issueNumber;​
 +    uint8_t ​              ​name[BS2_USER_ID_SIZE];​
 +} BS2License;
 +</​code>​
 +1. //index// \\ 
 +License index. \\ \\  ​
 +2. //​hasCapability//​ \\ 
 +Whether the device supports that license. \\
 +It usually has a value of 1. \\ \\ 
 +3. //enable// \\ 
 +Whether the license is active. \\ \\
 +4. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +5. //​licenseType//​ \\ 
 +The type of license. \\ 
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0x0000 ​ |None  |
 +|0x0001 ​ |Visual QR  |
 +</​WRAP>​
 +6. //​licenseSubType//​ \\ 
 +Detailed form of licenseType \\ \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |None  |
 +|1  |Visual QR (CodeCorp) ​ |
 +</​WRAP>​
 +7. //​enableTime//​ \\ 
 +License activation start time, expressed in POSIX time. \\ \\
 +8. //​expiredTime//​ \\ 
 +License activation end time, 0 means unlimited. \\ \\ 
 +9. //​issueNumber//​ \\ 
 +Issuing unique number. \\ \\
 +10. //name// \\ 
 +License name. \\ \\
 +
 +
 +==== BS2LicenseConfig ====
 +<code cpp>
 +typedef struct {
 +    uint8_t ​        ​version;​
 +    uint8_t ​        ​numOfLicense;​
 +    uint8_t ​        ​reserved[2];​
 +    BS2License ​     license[BS2_MAX_LICENSE_COUNT];​
 +    uint8_t ​        ​reserved1[16];​
 +} BS2LicenseConfig;​
 +</​code>​
 +1. //version// \\ 
 +Version of the license settings information. \\ \\  ​
 +2. //​numOfLicense//​ \\ 
 +Number of licenses registered \\ \\
 +3. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +4. //license// \\ 
 +License information and can be set up to 16. \\ \\
 +5. //​reserved1//​ \\ 
 +Reserved Space. \\ \\
 +
 +
 +==== BS2OsdpStandardConfig ====
 +<code cpp>
 +typedef struct {
 + uint32_t baudRate;​ ///<​ 4 bytes
 + uint8_t channelIndex;​ ///<​ 1 byte
 + uint8_t useRegistance;​ ///<​ 1 byte
 + uint8_t numOfDevices;​ ///<​ 1 byte
 + BS2_OSDP_CHANNEL_TYPE channelType;​ ///<​ 1 byte
 + BS2OsdpStandardDevice slaveDevices[BS2_RS485_MAX_SLAVES_PER_CHANNEL];​ ///<​ 28 * 32 = 896 bytes
 + uint8_t reserved[4];​ ///<​ 4 bytes
 +} BS2OsdpStandardChannel; ​   ///<​ 908 bytes
 +
 +typedef struct {
 +    uint8_t mode[BS2_RS485_MAX_CHANNELS_EX];​ ///<​ 8 byte
 +    uint16_t numOfChannels;​ ///<​ 2 byte
 +    uint8_t reserved[2];​ ///<​ 2 bytes (packing)
 +    uint8_t reserved1[32];​ ///<​ 32 bytes (reserved)
 +    BS2OsdpStandardChannel channels[BS2_RS485_MAX_CHANNELS_EX];​ ///< 908 * 8 bytes  = 7264 bytes
 +} BS2OsdpStandardConfig; ​  ​ ///<​ 7308 bytes
 +</​code>​
 +1. //​baudRate//​ \\ 
 +This is the baud rate of the OSDP device and the range that can be set is as follows. \\
 +<WRAP group 50%>
 +^Value ​ ^
 +|9600  |
 +|19200 ​ |
 +|38400 ​ |
 +|57600 ​ |
 +|115200 ​ |
 +</​WRAP>​
 +2. //​channelIndex//​ \\ 
 +This is the channel number when the OSDP device communicates with RS485. \\ \\
 +3. //​useRegistance//​ \\ 
 +Registance flag - no effect on operation. \\ \\
 +4. //​numOfDevices//​ \\ 
 +Number of slave devices.\\ \\
 +5. //​channelType//​ \\ 
 +Indicates the type to which the device communicating RS485 is connected. \\ 
 +Based on CoreStation40,​ there are 5 assignable channels from 0 to 4, and Suprema devices and OSDP devices cannot be mixed and operated within each channel. \\
 +If no device is connected to a specific channel, it has a 0 indicating that it can be connected even if it is a Suprema device or an OSDP device. \\
 +If a Suprema device is connected to a specific channel, only Suprema devices are allowed to connect to that channel, and channelType has a value of 1. The OSDP device is ignored even if it is connected. \\
 +If an OSDP device is connected to a specific channel, only OSDP devices are allowed to connect to that channel, and channelType has a value of 2. The Suprema device is ignored even if it is connected. \\
 +Each channel of CoreStation40 can be mixed and operated as Suprema device channel and OSDP device channel. \\
 +The maximum number of OSDP devices allowed to connect to a channel is limited to 2, and if the channel is already maxed out, the channelType will be 3, indicating that no more connections are allowed. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Normal ​ |
 +|1  |Suprema Device ​ |
 +|2  |OSDP Device ​ |
 +|3  |OSDP Device FULL  |
 +</​WRAP>​
 +6. //​slaveDevices//​ \\ 
 +Slave device information within the channel. \\ \\
 +7. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +8. //mode// \\ 
 +It is a flag that determines which mode to operate in the RS485 network. As of 2023/1/12, CoreStation40 is the only device that supports Osdp standard config, so it always has a master value. \\ \\  ​
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Not used  |
 +|1  |Master ​ |
 +|2  |Slave ​ |
 +|3  |Standalone (Default) ​ |
 +</​WRAP>​
 +9. //​numOfChannels//​ \\ 
 +Number of channel. CoreStation40 has a total of 5 channels. \\ \\ 
 +10. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +11. //​reserved1//​ \\ 
 +Reserved Space. \\ \\
 +12. //​channels//​ \\ 
 +OSDP device information of each channel. \\
 +You can have up to 8 channel information,​ but since CoreStation40 has 5 channels, only numbers 0 to 4 are valid. \\ \\
 +
 +
 +==== BS2OsdpStandardActionConfig ====
 +<code cpp>
 +typedef struct{
 +    BS2_BOOL ​                          ​use; ​           ///< 1 byte
 +    uint8_t ​                           readerNumber; ​  ///<​ 1 byte
 +    uint8_t ​                           ledNumber; ​     ///< 1 byte
 +
 +    BS2_OSDP_STANDARD_LED_COMMAND ​     tempCommand; ​   ///< 1 byte
 +    uint8_t ​                           tempOnTime; ​    ///<​ 1 byte
 +    uint8_t ​                           tempOffTime; ​   ///< 1 byte
 +    BS2_OSDP_STANDARD_COLOR ​           tempOnColor; ​   ///< 1 byte
 +    BS2_OSDP_STANDARD_COLOR ​           tempOffColor; ​  ///<​ 1 byte
 +    uint16_t ​                          ​tempRunTime; ​   ///< 2 bytes
 +
 +    BS2_OSDP_STANDARD_LED_COMMAND ​     permCommand; ​   ///< 1 byte
 +    uint8_t ​                           permOnTime; ​    ///<​ 1 byte
 +    uint8_t ​                           permOffTime; ​   ///< 1 byte
 +    BS2_OSDP_STANDARD_COLOR ​           permOnColor; ​   ///< 1 byte
 +    BS2_OSDP_STANDARD_COLOR ​           permOffColor; ​  ///<​ 1 byte
 +
 +    uint8_t ​                           reserved; ​      ///<​ 1 byte
 +} BS2OsdpStandardLedAction; ​           ///< 16 bytes
 +
 +typedef struct {
 +    BS2_BOOL ​                   use;            ///< 1 byte
 +    uint8_t ​                    ​readerNumber; ​  ///<​ 1 byte
 +    BS2_OSDP_STANDARD_TONE ​     tone;           ///<​ 1 byte
 +    uint8_t ​                    ​onTime; ​        ///<​ 1 byte
 +    uint8_t ​                    ​offTime; ​       ///< 1 byte
 +    uint8_t ​                    ​numOfCycle; ​    ///<​ 1 byte
 +    uint8_t ​                    ​reserved[2]; ​   ///< 2 bytes
 +} BS2OsdpStandardBuzzerAction; ​                 ///< 8 bytes
 +
 +typedef struct {
 +    BS2_OSDP_STANDARD_ACTION_TYPE ​  ​actionType; ​    ///<​ 1 byte     
 +    uint8_t ​                        ​reserved[3]; ​   ///< 3 bytes
 +    BS2OsdpStandardLedAction ​       led[2]; ​        ///<​ 16 x 2 = 32 bytes
 +    BS2OsdpStandardBuzzerAction ​    ​buzzer; ​        ///<​ 8 bytes
 +} BS2OsdpStandardAction; ​                           ///< 44 bytes
 +
 +typedef struct ​
 +{
 +    uint8_t ​                ​version; ​               ///< 1 byte 
 +    uint8_t ​                ​reserved[3]; ​           ///< 3 byes
 +    BS2OsdpStandardAction ​  ​actions[BS2_OSDP_STANDARD_ACTION_MAX_COUNT];​ ///< 44 x 32  = 1408
 +} BS2OsdpStandardActionConfig; ​                     ///< 1412 bytes
 +</​code>​
 +1. //use// \\ 
 +Indicates whether to use LED action. \\ \\  ​
 +2. //​readerNumber//​ \\
 +The sequence number of the OSDP device. \\ \\
 +3. //​ledNumber//​ \\
 +The LED sequence number of the OSDP device. \\ \\
 +4. //​tempCommand//​ \\
 +Temporary command. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |No Operation ​ |
 +|1  |Cancel ​ |
 +|2  |Set  |
 +</​WRAP>​
 +5. //​tempOnTime//​ \\
 +Indicates the LED on time for Temporary command, set in units of 100 ms. \\
 +For example, enter 20 to keep the LED on for 2 seconds. \\ \\
 +6. //​tempOffTime//​ \\
 +Indicates the LED off time for Temporary command, set in units of 100 ms. \\
 +For example, enter 10 to turn off the LED for 1 second. \\ \\
 +7. //​tempOnColor//​ \\
 +Sets the LED color of the on state for Temporary command. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |BLACK ​ |
 +|1  |RED  |
 +|2  |GREEN ​ |
 +|3  |AMBER ​ |
 +|4  |BLUE  |
 +|5  |MAGENTA ​ |
 +|6  |CYAN  |
 +|7  |WHITE ​ |
 +</​WRAP>​
 +8. //​tempOffColor//​ \\
 +Sets the LED color of the off state for Temporary command. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |BLACK ​ |
 +|1  |RED  |
 +|2  |GREEN ​ |
 +|3  |AMBER ​ |
 +|4  |BLUE  |
 +|5  |MAGENTA ​ |
 +|6  |CYAN  |
 +|7  |WHITE ​ |
 +</​WRAP>​
 +9. //​tempRunTime//​ \\
 +Sets the LED On/Off time for Temporary commands in units of 100 ms. \\
 +It blinks alternately with the color and time set in tempOnTime/​tempOffTime,​ tempOnColor/​tempOffColor,​ and is maintained as long as the value of tempRunTime. \\ \\
 +10. //​permCommand//​ \\
 +Permanent command.
 +11. //​permOnTime//​ \\
 +Indicates the LED on time for Permanent command, set in units of 100 ms.\\ \\
 +12. //​permOffTime//​ \\
 +Indicates the LED off time for Permanent command, set in units of 100 ms. \\ \\
 +13. //​permOnColor//​ \\
 +Sets the LED color of the on state for Permanent command. \\ \\
 +14. //​permOffColor//​ \\
 +Sets the LED color of the off state for Permanent command. \\ \\
 +15. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +16. //use// \\ 
 +Indicates whether to use tone action. \\ \\ 
 +17. //​readerNumber//​
 +The sequence number of the OSDP device. \\ \\
 +18. //tone// \\
 +Set the buzzer. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |None  |
 +|1  |Off  |
 +|2  |On  |
 +</​WRAP>​
 +19. //onTime// \\ 
 +Set the on-state holding time for tone in units of 100 ms. \\ \\ 
 +20. //offTime// \\ 
 +Set the off state holding time for tone in units of 100 ms. \\ \\ 
 +21. //​numOfCycle//​ \\ 
 +Set the number of times to repeat On/Off for tone. When set to 0, it means infinite repetition. \\ \\ 
 +22. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +23. //​actionType//​ \\ 
 +Set the action. \\ 
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |None  |
 +|1  |Success ​ |
 +|2  |Fail  |
 +|3  |Wait input  |
 +</​WRAP>​
 +24. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +25. //led// \\ 
 +LED setting information of OSDP device. \\ \\ 
 +26. //buzzer// \\ 
 +Buzzer setting information of OSDP device. \\ \\ 
 +27. //version// \\ 
 +Version information about Action configuration. Currently it is 0. \\ \\
 +28. //​reserved//​ \\ 
 +Reserved Space. \\ \\
 +29. //actions// \\ 
 +LED/buzzer information for OSDP devices, up to 32 can be designated. \\ \\
 +
 +
 +==== BS2CustomMifareCard ====
 +<code cpp>
 +typedef struct {
 + uint8_t primaryKey[6];​
 + uint8_t reserved1[2];​
 + uint8_t secondaryKey[6];​
 + uint8_t reserved2[2];​
 + uint16_t startBlockIndex;​
 + uint8_t dataSize;
 + uint8_t skipBytes;
 + uint8_t reserved[4];​
 +} BS2CustomMifareCard;​
 +</​code>​
 +1. //​primaryKey//​ \\ 
 +Primary encryption key to access the Mifare card information. \\ \\
 +2. //​reserved1//​ \\ 
 +Reserved space.\\ \\ 
 +3. //​secondaryKey//​ \\ 
 +Secondary encryption key to access the Mifare card information. \\ \\
 +4. //​reserved2//​ \\ 
 +Reserved space.\\ \\ 
 +5. //​startBlockIndex//​ \\ 
 +Start block index on the Mifare data storage.\\ \\ 
 +6. //​dataSize//​ \\ 
 +The size in bytes of the card data. \\ \\
 +7. //​skipBytes//​ \\ 
 +This is where the card data appears. \\
 +This is the starting point to read card data. It is 0 when reading from the starting point, and indicates the number of bytes skipped after the first. \\ \\
 +8. //​reserved//​ \\ 
 +Reserved space.\\ \\
 +
 +
 +==== BS2CustomDesFireCard ====
 +<code cpp>
 +typedef struct {
 + uint8_t primaryKey[16];​
 + uint8_t secondaryKey[16];​
 + uint8_t appID[3];
 + uint8_t fileID;
 + uint8_t encryptionType; ​                // 0: DES/3DES, 1: AES
 + uint8_t operationMode; ​                 // 0: legacy(use picc master key), 1: new mode(use app master, file read, file write key)
 + uint8_t dataSize;
 + uint8_t skipBytes;
 + uint8_t reserved[4];​
 + BS2DesFireAppLevelKey desfireAppKey;​ ///<​52 bytes
 +} BS2CustomDesFireCard; ​                          ///<​96 Bytes
 +</​code>​
 +1. //​primaryKey//​ \\ 
 +Primary encryption key to access the DesFire card information. (General settings) \\ \\
 +2. //​secondaryKey//​ \\ 
 +Secondary encryption key to access the Desfire card information. (General settings) \\ \\
 +3. //appID// \\ 
 +Application Id that is stored inside the DesFire card for user authentication.\\ \\ 
 +4. //fileID// \\ 
 +File ID that is stored inside the DesFire card, which will be used by the application to read and write data.\\ \\ 
 +5. //​encryptionType//​ \\ 
 +Type of data encryption.\\ ​
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |DES/​3DES ​ |
 +|1  |AES  |
 +</​WRAP>​
 +6. //​operationMode//​ \\ 
 +Operation mode. \\ 
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Using general settings (Using PICC master key)  |
 +|1  |Using advanced settings (Using App master key)  |
 +</​WRAP>​
 +7. //​dataSize//​ \\ 
 +The size in bytes of the card data. \\ \\
 +8. //​skipBytes//​ \\ 
 +This is where the card data appears. \\
 +This is the starting point to read card data. It is 0 when reading from the starting point, and indicates the number of bytes skipped after the first. \\ \\
 +9. //​reserved//​ \\ 
 +Reserved space.\\ \\ 
 +10. //​desfireAppKey//​ \\ 
 +Indicates key information to access DesFire card information. (Advanced settings) \\ \\
 +
 +
 +==== BS2CustomCardConfig ====
 +<code cpp>
 +typedef struct {
 + BS2_CARD_DATA_TYPE dataType;
 + BS2_BOOL useSecondaryKey;​
 + uint8_t reserved1[2];​
 +
 + BS2CustomMifareCard mifare;
 + BS2CustomDesFireCard desfire;
 + uint8_t reserved2[24];​
 + uint8_t reserved3[96];​
 +
 + BS2_CARD_BYTE_ORDER smartCardByteOrder;​
 + uint8_t reserved4[3];​
 + BS2_UID formatID;
 + uint8_t reserved5[8];​
 +} BS2CustomCardConfig;​
 +</​code>​
 +1. //​dataType//​ \\ 
 +Type of card data. \\ 
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |Binary ​ |
 +|1  |ASCII ​ |
 +|2  |UTF16 ​ |
 +|3  |BCD  |
 +</​WRAP>​
 +2. //​useSecondaryKey//​ \\ 
 +Decides whether to use the secondary encryption key. \\ \\ 
 +3. //​reserved1//​ \\ 
 +Reserved space. \\ \\ 
 +4. //mifare// \\ 
 +Set the Mifare custom card information. \\ \\ 
 +5. //desfire// \\ 
 +Set the DESFire custom card information. \\ \\ 
 +6. //​reserved2//​ \\ 
 +Reserved space. \\ \\ 
 +7. //​reserved3//​ \\ 
 +Reserved space. \\ \\ 
 +8. //​smartCardByteOrder//​ \\
 +The output method can be selected from MSB or LSB. \\
 +<WRAP group 50%>
 +^Value ​ ^Description ​ ^
 +|0  |MSB  |
 +|1  |LSB  |
 +</​WRAP>​
 +9. //​reserved4//​ \\ 
 +Reserved space. \\ \\
 +10. //​formatID//​ \\ 
 +This is an identifier that can be used when the BioStar 2 application needs to manage the card configuration as a database. \\ \\ 
 +11. //​reserved5//​ \\ 
 +Reserved space. \\ \\