Configuration & Features
Examples for reading and writing reader configuration on rf IDEAS devices.
Get/Set Beeper Volume
- C++
- C#
- Python
// After Init()
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Get current volume
RikProtocol::BeepVolume volume;
reader->GetBeeperVolume(volume);
std::cout << "Volume: " << static_cast<int>(volume) << std::endl;
// Set volume
reader->SetBeeperVolume(RikProtocol::BEEP_VOLUME_HIGH);
using var app = new Reader(readerDef);
app.Init();
// Get current volume
var volume = app.GetBeeperVolume();
Console.WriteLine($"Volume: {volume}");
// Set volume
app.SetBeeperVolume(BeepVolume.High);
with rik.Reader(reader_def) as app:
app.init()
# Get current volume
volume = app.get_beeper_volume()
print(f"Volume: {volume}")
# Set volume
app.set_beeper_volume(BeepVolume.BEEP_VOLUME_HIGH)
Enable/Disable Keystroking
When keystroking is enabled, the reader emulates an HID keyboard and "types" card ID data as keystrokes to the host computer. Disable keystroking when using the SDK to read card data programmatically.
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Disable keystroking (e.g. for SDK-only mode)
reader->EnableKeystroking(false);
// Re-enable keystroking
reader->EnableKeystroking(true);
using var app = new Reader(readerDef);
app.Init();
// Disable keystroking
app.EnableKeystroking(false);
// Re-enable keystroking
app.EnableKeystroking(true);
with rik.Reader(reader_def) as app:
app.init()
# Disable keystroking
app.enable_keystroking(False)
# Re-enable keystroking
app.enable_keystroking(True)
Get/Set LED Configuration
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Read LED config from slot 0
LedConfiguration ledConfig;
reader->GetLedConfiguration(0, ledConfig);
// Modify and write back
reader->SetLedConfiguration(0, ledConfig);
using var app = new Reader(readerDef);
app.Init();
// Read LED config from slot 0
var ledConfig = app.GetLedConfiguration(0);
Console.WriteLine($"Color: {ledConfig.Color}");
Console.WriteLine($"Software Control: {ledConfig.SoftwareControlEnabled}");
// Write LED config
app.SetLedConfiguration(0, ledConfig);
with rik.Reader(reader_def) as app:
app.init()
# Read LED config from slot 0
led_config = app.get_led_configuration(0)
# Write LED config
app.set_led_configuration(0, led_config)
Get/Set Reader Configuration
Read and write the full reader configuration (ReaderConfiguration + ExtendedConfiguration).
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Read configuration from slot 0
RikCommon::ReaderConfiguration config;
RikProtocol::ExtendedConfiguration extConfig;
reader->GetReaderConfiguration(0, config, extConfig);
// Modify and write back
RikProtocol::HashData hashData;
reader->SetReaderConfiguration(0, config, extConfig, hashData);
using var app = new Reader(readerDef);
app.Init();
// Read configuration from slot 0
var (config, extConfig) = app.GetReaderConfiguration(0);
// Modify and write back
app.SetReaderConfiguration(0, config, extConfig, new HashData());
from reader_integration_kit.structures import HashData
with rik.Reader(reader_def) as app:
app.init()
# Read configuration from slot 0
config, ext_config = app.get_reader_configuration(0)
# Modify and write back
hash_data = HashData()
app.set_reader_configuration(0, config, ext_config, hash_data)
Get/Set Module State
Control reader module power (e.g. radio on/off).
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Get current state of the low-frequency radio
RikProtocol::ReaderModuleState state;
reader->GetModuleState(RikProtocol::ReaderModuleId::LowFrequencyRadio, state);
// Power off the low-frequency radio
reader->SetModuleState(
RikProtocol::ReaderModuleId::LowFrequencyRadio,
RikProtocol::ReaderModuleState::PowerOff
);
// Power it back on
reader->SetModuleState(
RikProtocol::ReaderModuleId::LowFrequencyRadio,
RikProtocol::ReaderModuleState::PowerOnNormal
);
using var app = new Reader(readerDef);
app.Init();
// Get current state of the low-frequency radio
var state = app.GetModuleState(ReaderModuleId.LowFrequencyRadio);
Console.WriteLine($"State: {state}");
// Power off the low-frequency radio
app.SetModuleState(ReaderModuleId.LowFrequencyRadio, ReaderModuleState.PowerOff);
// Power it back on
app.SetModuleState(ReaderModuleId.LowFrequencyRadio, ReaderModuleState.PowerOnNormal);
from reader_integration_kit.enum import ReaderModuleId, ReaderModuleState
with rik.Reader(reader_def) as app:
app.init()
# Get current state of the low-frequency radio
state = app.get_module_state(ReaderModuleId.LOW_FREQUENCY_RADIO)
print(f"State: {state}")
# Power off the low-frequency radio
app.set_module_state(
ReaderModuleId.LOW_FREQUENCY_RADIO,
ReaderModuleState.POWER_OFF
)
# Power it back on
app.set_module_state(
ReaderModuleId.LOW_FREQUENCY_RADIO,
ReaderModuleState.POWER_ON_NORMAL
)
Get/Set LUID
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Get LUID
RikProtocol::LuidResponseInformation luidInfo;
reader->GetLuid(luidInfo);
std::cout << "LUID: " << luidInfo.Luid << std::endl;
// Set LUID
reader->SetLuid(42);
using var app = new Reader(readerDef);
app.Init();
// Get LUID
var luidInfo = app.GetLuid();
Console.WriteLine($"LUID: {luidInfo.Luid}");
// Set LUID
app.SetLuid(42);
with rik.Reader(reader_def) as app:
app.init()
# Get LUID
luid_info = app.get_luid()
print(f"LUID: {luid_info.Luid}")
# Set LUID
app.set_luid(42)
Get Supported Card Types
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
std::vector<RikCommon::CardType> cardTypes;
reader->GetSupportedCardTypes(cardTypes);
for (const auto& ct : cardTypes) {
std::cout << "Card Type: " << ct.Name << std::endl;
}
using var app = new Reader(readerDef);
app.Init();
var cardTypes = app.GetSupportedCardTypes();
foreach (var ct in cardTypes)
{
Console.WriteLine($"Card Type: {ct.Name}");
}
with rik.Reader(reader_def) as app:
app.init()
card_types = app.get_supported_card_types()
for ct in card_types:
print(f"Card Type: {ct}")
Read/Write BLE Configuration
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Read BLE configuration to file
reader->ReadBleConfigurationFromReader(
RikCommon::BleDataType::Data, "ble_backup.hwg+");
// Write BLE configuration from file
reader->WriteBleConfigurationToReader(
RikCommon::BleDataType::Data, "ble_config.hwg+");
using var app = new Reader(readerDef);
app.Init();
// Read BLE configuration to file
app.ReadBleConfigurationFromReader(BleDataType.Data, "ble_backup.hwg+");
// Write BLE configuration from file
app.WriteBleConfigurationToReader(BleDataType.Data, "ble_config.hwg+");
from reader_integration_kit.enum import BleDataType
with rik.Reader(reader_def) as app:
app.init()
# Read BLE configuration to file
app.read_ble_configuration_from_reader(BleDataType.DATA, "ble_backup.hwg+")
# Write BLE configuration from file
app.write_ble_configuration_to_reader(BleDataType.DATA, "ble_config.hwg+")
note
BLE configuration operations require a reader with Bluetooth capability. Check the reader's capability profile before calling these methods.
Reset to Factory / User Defaults
- C++
- C#
- Python
auto* reader = dynamic_cast<Reader*>(
AbstractReader::GetInstance(handle)
);
// Reset to factory defaults
reader->ResetReaderConfiguration(CheckpointType::FactoryDefaults);
// Or reset to user defaults
reader->ResetReaderConfiguration(CheckpointType::UserDefaults);
// Save current config as user defaults
reader->WriteUserDefaultsToReader();
using var app = new Reader(readerDef);
app.Init();
// Reset to factory defaults
app.ResetReaderConfiguration(CheckpointType.FactoryDefaults);
// Or reset to user defaults
app.ResetReaderConfiguration(CheckpointType.UserDefaults);
from reader_integration_kit.enum import CheckpointType
with rik.Reader(reader_def) as app:
app.init()
# Reset to factory defaults
app.reset_reader_configuration(CheckpointType.FACTORY_DEFAULTS)
# Or reset to user defaults
app.reset_reader_configuration(CheckpointType.USER_DEFAULTS)
warning
Resetting to factory defaults erases all custom configuration. Consider backing up the configuration with ReadHwgFileFromReader first.