VHL without reader configuration
This mode covers the same use case as the standard VHL implementation. However, the following restriction applies:
- You cannot work with complex card structures, e.g. where the data you want to access is distributed across multiple files or blocks.
We only recommend this mode if:
- You don't want to configure the readers.
- You don't want to specify the card structure (i.e. the parameters to access the card) before putting readers in operation, but control the parameters flexibly during reader operation.
What is VHL?
VHL stands for Very High Level card access. It's a simplistic macro command set that is independent of a specific card type (learn more).
How it works
This approach is similar to the standard VHL implementation. The only difference: You don't configure readers in advance. Instead, you configure them temporarily at runtime via the host.
Exceptional cases requiring a configuration
In the vast majority of cases, you won't need to configure the reader. You only need to create a configuration if one or both of the following applies:
- Your host protocol isn't enabled in the factory settings.
You want to control access permissions and set up authenticated and encrypted communication. In this case, you need to configure Authentication and Encryption.
- USB HID (recommended with the SDK)
- USB virtual COM port (recommended when not using the SDK, required for RDP)
Ethernet (host as client only)
For implementation as a server, please use VHL & Autoread.
Set up SDK
The easiest way to use VHL is the BALTECH SDK, available for Windows, macOS, and Linux.
My platform's not supported
To set up the SDK:
- Download the SDK from our website.
- Get familiar with its components. We recommend you get started by trying out the app notes.
- Integrate the SDK into your application.
- Set up a protocol stack to be able to run commands.
Run VHL.Select to scan for cards.
Set AcceptConfCard = false
Readers without a preinstalled configuration are vulnerable to attacks with tampered ConfigCards. To prevent this, set the parameter AcceptConfCard = false, so readers will ignore any ConfigCard presented to them.
With this command you dynamically create a "VHL file". This is a description of the card's data structure. It's needed to configure the reader for subsequent commands.
Run the VHL command(s) required for your operations. Here are the most important ones:
With VHL.GetSnr, you can request the UID of the selected card.
This won't work if the card returns a random ID.
Set Id = 0xFF
VHL.Read and VHL.Write have a parameter Id to reference the VHL file you want to use. To reference the dynamic VHL file created with VHL.Setup, set Id = 0xFF.
Mixing dynamic and static VHL files
In principle, it is possible to mix dynamic VHL files (created with VHL.Setup) and static VHL files (as part of the reader configuration for the standard VHL implementation). However, please note that the dynamic VHL file is lost as soon as you run VHL.Read or VHL.Write with a static VHL file. Thus, if you later want to run VHL.Read or VHL.Write with the VHL file again (i.e. with Id = 0xFF), you first need to rerun VHL.Setup to recreate the dynamic VHL file.
Reader hardware control
There are various commands to control the reader hardware. You can control reader feedback (e.g. LED and beeper), reboot the reader, check its firmware version, etc.
That's it for the development part. You can now install the readers (and, if necessary, deploy the configuration) as described here.
Troubleshooting & support
Got stuck somewhere along the way? Don't worry, we'll help you troubleshoot: