OpenSRX 0.1.0
C++ library for interfacing with Keyence SR series barcode readers
Loading...
Searching...
No Matches
OpenSRX::Scanner Class Reference

High-level interface to a KEYENCE SR-X series barcode scanner. More...

#include <Scanner.hpp>

Classes

struct  SavedImageDests
 Previous SAVE_DEST values saved by startImageServer, restored on stop. More...
 

Public Member Functions

 Scanner (ICommInterface &comm)
 Connect to a scanner on the given communication interface.
 
 ~Scanner ()=default
 
Code startReading ()
 Start a blocking read operation.
 
Code startReading (int bank)
 Start a blocking read operation on a specific bank.
 
void stopReading ()
 Cancel an in-progress read operation.
 
void startQuickSetupCodeReading ()
 Enter quick-setup code reading mode (RCON).
 
void finishQuickSetupCodeReading ()
 Exit quick-setup code reading mode (RCOFF).
 
std::string checkQuickSetupCodeResult ()
 Check the result of a quick-setup code reading.
 
void readingRateTest ()
 Start a reading rate test on all banks.
 
void readingRateTest (int bank)
 Start a reading rate test on a specific bank.
 
void readTimeTest ()
 Start a read time test on all banks.
 
void readTimeTest (int bank)
 Start a read time test on a specific bank.
 
void quitTestMode ()
 Quit test mode (reading rate or read time).
 
bool getInputTerminalState (int terminalNumber)
 Get the state of an input terminal.
 
void turnOnOutputTerminal (int terminalNumber)
 Turn on a specific output terminal.
 
void turnOffOutputTerminal (int terminalNumber)
 Turn off a specific output terminal.
 
void turnOnAllOutputTerminals ()
 Turn on all output terminals.
 
void turnOffAllOutputTerminals ()
 Turn off all output terminals.
 
void reset ()
 Reset the scanner.
 
void clearSendBuffer ()
 Clear the scanner's send buffer.
 
std::string captureImage (int bank)
 Capture an image and return the remote file path.
 
void adjustFocus ()
 Run auto-focus adjustment (blocks until complete).
 
std::tuple< bool, TuningAdvice, TuningFailureReasonstartTuning (int bank)
 Start tuning on a specific bank (blocks until complete).
 
void stopTuning ()
 Cancel an in-progress tuning operation.
 
std::string getModel () const
 Get the scanner model string (e.g. "SR-X300").
 
std::string getFirmwareVersion () const
 Get the scanner firmware version string.
 
std::string getMacAddress () const
 Get the scanner MAC address string.
 
void enablePointer ()
 Enable the laser aiming pointer.
 
void disablePointer ()
 Disable the laser aiming pointer.
 
void setTime (const Timestamp &timestamp)
 Set the scanner's internal clock.
 
Timestamp getTime ()
 Read the scanner's internal clock.
 
CommandStatus getCommandStatus ()
 Query the scanner's command processing status.
 
ErrorStatus getErrorStatus ()
 Query the scanner's error status.
 
BusyStatus getBusyStatus ()
 Query the scanner's busy status.
 
void copyBankConfiguration (int sourceBank, int targetBank)
 Copy configuration from one bank to another.
 
void saveSettings ()
 Save all current settings to non-volatile memory.
 
void loadSavedSettings ()
 Load settings from non-volatile memory.
 
void resetToFactorySettings ()
 Reset all settings to factory defaults.
 
void saveBackupSettings (int backupNumber)
 Save settings to a backup slot.
 
void loadBackupSettings (int backupNumber)
 Load settings from a backup slot.
 
void clearFTPCommsError ()
 Clear the FTP communication error flag.
 
void clearPLCLinkError ()
 Clear the PLC link error flag.
 
void startImageServer (const std::string &localIP, ImageSaveConfig saveConfig={}, uint16_t port=0, const std::string &username="opensrx", const std::string &password="opensrx")
 Start an embedded FTP server and configure the scanner to send images to it.
 
void stopImageServer ()
 
Image waitForImage ()
 Block until the scanner delivers an image via FTP, decode it, and return the raw pixel data.
 
bool tryGetImage (Image &image)
 Return the next image if one is available, without blocking.
 
std::deque< ImagegetImages ()
 Return all images currently queued.
 
void setImageCallback (std::function< void(const Image &)> cb)
 Set a callback invoked on the watcher thread each time a new image is decoded.
 
ImageServergetImageServer ()
 Access the underlying ImageServer (nullptr if not started).
 
template<BankParam P>
auto getParam (int bank) -> ParamCppT< paramType(P)>
 Read a bank parameter.
 
template<BankParam P>
void setParam (int bank, const ParamCppT< paramType(P)> &value)
 Write a bank parameter.
 
template<TuningParam P>
auto getParam () -> ParamCppT< paramType(P)>
 Read a tuning parameter.
 
template<TuningParam P>
void setParam (const ParamCppT< paramType(P)> &value)
 Write a tuning parameter.
 
template<OperationParam P>
auto getParam () -> ParamCppT< paramType(P)>
 Read an operation parameter.
 
template<OperationParam P>
void setParam (const ParamCppT< paramType(P)> &value)
 Write an operation parameter.
 
template<CommParam P>
auto getParam () -> ParamCppT< paramType(P)>
 Read a communication parameter.
 
template<CommParam P>
void setParam (const ParamCppT< paramType(P)> &value)
 Write a communication parameter.
 

Private Member Functions

Code parseReadResult (const std::string &raw)
 Parse a raw read-result string into a Code struct.
 
std::string checkResponse (const std::string &response)
 Parse and validate a scanner response string.
 

Private Attributes

ICommInterfacecomm
 Communication interface to the scanner.
 
std::string model
 Scanner model string.
 
std::string firmwareVersion
 Scanner firmware version string.
 
std::string macAddress
 Scanner MAC address string.
 
std::unique_ptr< ImageServerimageServer
 Embedded FTP image server (if started).
 
std::unique_ptr< SavedImageDestssavedImageDests
 

Friends

class TestScanner
 

Detailed Description

High-level interface to a KEYENCE SR-X series barcode scanner.

Wraps an ICommInterface and exposes typed methods for every scanner command: reading, tuning, I/O control, status queries, settings management, and parameter get/set. Also provides an integrated FTP image server for receiving captured images.

Constructor & Destructor Documentation

◆ Scanner()

OpenSRX::Scanner::Scanner ( ICommInterface & comm)

Connect to a scanner on the given communication interface.

Sends the KEYENCE handshake and EMAC commands to obtain the model, firmware version, and MAC address.

Parameters
commA previously-opened communication interface.
Exceptions
std::runtime_erroron handshake failure.

◆ ~Scanner()

OpenSRX::Scanner::~Scanner ( )
default

Member Function Documentation

◆ adjustFocus()

void OpenSRX::Scanner::adjustFocus ( )

Run auto-focus adjustment (blocks until complete).

◆ captureImage()

std::string OpenSRX::Scanner::captureImage ( int bank)

Capture an image and return the remote file path.

Parameters
bankBank number (1–16).
Returns
The path to the captured image file on the scanner.

◆ checkQuickSetupCodeResult()

std::string OpenSRX::Scanner::checkQuickSetupCodeResult ( )

Check the result of a quick-setup code reading.

Returns
The result data string.

◆ checkResponse()

std::string OpenSRX::Scanner::checkResponse ( const std::string & response)
private

Parse and validate a scanner response string.

Extracts the value from an "OK,CMD,value" response, or throws on an "ER,CMD,code" error response.

Parameters
responseThe raw response string from the scanner.
Returns
The extracted value portion of the response.
Exceptions
std::invalid_argument,std::out_of_range,std::runtime_errordepending on the error code.

◆ clearFTPCommsError()

void OpenSRX::Scanner::clearFTPCommsError ( )

Clear the FTP communication error flag.

◆ clearPLCLinkError()

void OpenSRX::Scanner::clearPLCLinkError ( )

Clear the PLC link error flag.

◆ clearSendBuffer()

void OpenSRX::Scanner::clearSendBuffer ( )

Clear the scanner's send buffer.

◆ copyBankConfiguration()

void OpenSRX::Scanner::copyBankConfiguration ( int sourceBank,
int targetBank )

Copy configuration from one bank to another.

Parameters
sourceBankSource bank number (1–16).
targetBankTarget bank number (1–16).

◆ disablePointer()

void OpenSRX::Scanner::disablePointer ( )

Disable the laser aiming pointer.

◆ enablePointer()

void OpenSRX::Scanner::enablePointer ( )

Enable the laser aiming pointer.

◆ finishQuickSetupCodeReading()

void OpenSRX::Scanner::finishQuickSetupCodeReading ( )

Exit quick-setup code reading mode (RCOFF).

◆ getBusyStatus()

BusyStatus OpenSRX::Scanner::getBusyStatus ( )

Query the scanner's busy status.

Returns
The current BusyStatus.

◆ getCommandStatus()

CommandStatus OpenSRX::Scanner::getCommandStatus ( )

Query the scanner's command processing status.

Returns
The current CommandStatus.

◆ getErrorStatus()

ErrorStatus OpenSRX::Scanner::getErrorStatus ( )

Query the scanner's error status.

Returns
The current ErrorStatus.

◆ getFirmwareVersion()

std::string OpenSRX::Scanner::getFirmwareVersion ( ) const
inline

Get the scanner firmware version string.

◆ getImages()

std::deque< Image > OpenSRX::Scanner::getImages ( )

Return all images currently queued.

◆ getImageServer()

ImageServer * OpenSRX::Scanner::getImageServer ( )
inline

Access the underlying ImageServer (nullptr if not started).

◆ getInputTerminalState()

bool OpenSRX::Scanner::getInputTerminalState ( int terminalNumber)

Get the state of an input terminal.

Parameters
terminalNumberInput terminal number.
Returns
true if the terminal is ON.

◆ getMacAddress()

std::string OpenSRX::Scanner::getMacAddress ( ) const
inline

Get the scanner MAC address string.

◆ getModel()

std::string OpenSRX::Scanner::getModel ( ) const
inline

Get the scanner model string (e.g. "SR-X300").

◆ getParam() [1/4]

template<TuningParam P>
auto OpenSRX::Scanner::getParam ( ) -> ParamCppT<paramType(P)>
inline

Read a tuning parameter.

Template Parameters
PThe TuningParam enumerator.
Returns
The parameter value in its natural C++ type.

◆ getParam() [2/4]

template<OperationParam P>
auto OpenSRX::Scanner::getParam ( ) -> ParamCppT<paramType(P)>
inline

Read an operation parameter.

Template Parameters
PThe OperationParam enumerator.
Returns
The parameter value in its natural C++ type.

◆ getParam() [3/4]

template<CommParam P>
auto OpenSRX::Scanner::getParam ( ) -> ParamCppT<paramType(P)>
inline

Read a communication parameter.

Template Parameters
PThe CommParam enumerator.
Returns
The parameter value in its natural C++ type.

◆ getParam() [4/4]

template<BankParam P>
auto OpenSRX::Scanner::getParam ( int bank) -> ParamCppT<paramType(P)>
inline

Read a bank parameter.

Template Parameters
PThe BankParam enumerator (determines the return type).
Parameters
bankBank number (1–16).
Returns
The parameter value in its natural C++ type.

◆ getTime()

Timestamp OpenSRX::Scanner::getTime ( )

Read the scanner's internal clock.

Returns
The current Timestamp.

◆ loadBackupSettings()

void OpenSRX::Scanner::loadBackupSettings ( int backupNumber)

Load settings from a backup slot.

Parameters
backupNumberBackup slot number.

◆ loadSavedSettings()

void OpenSRX::Scanner::loadSavedSettings ( )

Load settings from non-volatile memory.

◆ parseReadResult()

Code OpenSRX::Scanner::parseReadResult ( const std::string & raw)
private

Parse a raw read-result string into a Code struct.

Splits the result by the inter-delimiter and populates optional fields based on which OperationParam appending settings are enabled.

Parameters
rawThe raw string returned by LON (barcode + appended fields).
Returns
A populated Code struct.

◆ quitTestMode()

void OpenSRX::Scanner::quitTestMode ( )

Quit test mode (reading rate or read time).

◆ readingRateTest() [1/2]

void OpenSRX::Scanner::readingRateTest ( )

Start a reading rate test on all banks.

◆ readingRateTest() [2/2]

void OpenSRX::Scanner::readingRateTest ( int bank)

Start a reading rate test on a specific bank.

Parameters
bankBank number (1–16).

◆ readTimeTest() [1/2]

void OpenSRX::Scanner::readTimeTest ( )

Start a read time test on all banks.

◆ readTimeTest() [2/2]

void OpenSRX::Scanner::readTimeTest ( int bank)

Start a read time test on a specific bank.

Parameters
bankBank number (1–16).

◆ reset()

void OpenSRX::Scanner::reset ( )

Reset the scanner.

◆ resetToFactorySettings()

void OpenSRX::Scanner::resetToFactorySettings ( )

Reset all settings to factory defaults.

◆ saveBackupSettings()

void OpenSRX::Scanner::saveBackupSettings ( int backupNumber)

Save settings to a backup slot.

Parameters
backupNumberBackup slot number.

◆ saveSettings()

void OpenSRX::Scanner::saveSettings ( )

Save all current settings to non-volatile memory.

◆ setImageCallback()

void OpenSRX::Scanner::setImageCallback ( std::function< void(const Image &)> cb)

Set a callback invoked on the watcher thread each time a new image is decoded.

◆ setParam() [1/4]

template<TuningParam P>
void OpenSRX::Scanner::setParam ( const ParamCppT< paramType(P)> & value)
inline

Write a tuning parameter.

Template Parameters
PThe TuningParam enumerator.
Parameters
valueThe value to set.

◆ setParam() [2/4]

template<OperationParam P>
void OpenSRX::Scanner::setParam ( const ParamCppT< paramType(P)> & value)
inline

Write an operation parameter.

Template Parameters
PThe OperationParam enumerator.
Parameters
valueThe value to set.

◆ setParam() [3/4]

template<CommParam P>
void OpenSRX::Scanner::setParam ( const ParamCppT< paramType(P)> & value)
inline

Write a communication parameter.

Template Parameters
PThe CommParam enumerator.
Parameters
valueThe value to set.

◆ setParam() [4/4]

template<BankParam P>
void OpenSRX::Scanner::setParam ( int bank,
const ParamCppT< paramType(P)> & value )
inline

Write a bank parameter.

Template Parameters
PThe BankParam enumerator (determines the value type).
Parameters
bankBank number (1–16).
valueThe value to set.

◆ setTime()

void OpenSRX::Scanner::setTime ( const Timestamp & timestamp)

Set the scanner's internal clock.

Parameters
timestampThe date/time to set.

◆ startImageServer()

void OpenSRX::Scanner::startImageServer ( const std::string & localIP,
ImageSaveConfig saveConfig = {},
uint16_t port = 0,
const std::string & username = "opensrx",
const std::string & password = "opensrx" )

Start an embedded FTP server and configure the scanner to send images to it.

The server listens on a free port by default. The scanner's FTP IP, username, password, and port parameters are written automatically. Image saving destinations selected in saveConfig are set to SEND_BY_FTP; they are restored to their previous values when stopImageServer() is called.

Parameters
localIPThe IP address of this machine as reachable from the scanner (e.g. "192.168.1.100").
saveConfigWhich image types to send via FTP (default: read OK only).
portFTP port (0 = OS picks a free port).
usernameFTP username.
passwordFTP password.

◆ startQuickSetupCodeReading()

void OpenSRX::Scanner::startQuickSetupCodeReading ( )

Enter quick-setup code reading mode (RCON).

◆ startReading() [1/2]

Code OpenSRX::Scanner::startReading ( )

Start a blocking read operation.

Blocks until a code is read or the read times out. Uses an unlocked send so that stopReading() can be called from another thread.

Returns
A Code struct with the decoded data and any appended metadata.
Exceptions
std::runtime_erroron read timeout or failure.

◆ startReading() [2/2]

Code OpenSRX::Scanner::startReading ( int bank)

Start a blocking read operation on a specific bank.

Parameters
bankBank number (1–16).
Returns
A Code struct with the decoded data and any appended metadata.
Exceptions
std::runtime_erroron read timeout or failure.

◆ startTuning()

std::tuple< bool, TuningAdvice, TuningFailureReason > OpenSRX::Scanner::startTuning ( int bank)

Start tuning on a specific bank (blocks until complete).

Uses an unlocked send so that stopTuning() can be called from another thread.

Parameters
bankBank number (1–16).
Returns
A tuple of (succeeded, advice, failureReason).

◆ stopImageServer()

void OpenSRX::Scanner::stopImageServer ( )

Stop the embedded FTP image server.

◆ stopReading()

void OpenSRX::Scanner::stopReading ( )

Cancel an in-progress read operation.

◆ stopTuning()

void OpenSRX::Scanner::stopTuning ( )

Cancel an in-progress tuning operation.

◆ tryGetImage()

bool OpenSRX::Scanner::tryGetImage ( Image & image)

Return the next image if one is available, without blocking.

Parameters
[out]imageFilled on success.
Returns
true if an image was available.

◆ turnOffAllOutputTerminals()

void OpenSRX::Scanner::turnOffAllOutputTerminals ( )

Turn off all output terminals.

◆ turnOffOutputTerminal()

void OpenSRX::Scanner::turnOffOutputTerminal ( int terminalNumber)

Turn off a specific output terminal.

Parameters
terminalNumberOutput terminal number.

◆ turnOnAllOutputTerminals()

void OpenSRX::Scanner::turnOnAllOutputTerminals ( )

Turn on all output terminals.

◆ turnOnOutputTerminal()

void OpenSRX::Scanner::turnOnOutputTerminal ( int terminalNumber)

Turn on a specific output terminal.

Parameters
terminalNumberOutput terminal number.

◆ waitForImage()

Image OpenSRX::Scanner::waitForImage ( )

Block until the scanner delivers an image via FTP, decode it, and return the raw pixel data.

Requires startImageServer() to have been called first.

Friends And Related Symbol Documentation

◆ TestScanner

friend class TestScanner
friend

Member Data Documentation

◆ comm

ICommInterface& OpenSRX::Scanner::comm
private

Communication interface to the scanner.

◆ firmwareVersion

std::string OpenSRX::Scanner::firmwareVersion
private

Scanner firmware version string.

◆ imageServer

std::unique_ptr<ImageServer> OpenSRX::Scanner::imageServer
private

Embedded FTP image server (if started).

◆ macAddress

std::string OpenSRX::Scanner::macAddress
private

Scanner MAC address string.

◆ model

std::string OpenSRX::Scanner::model
private

Scanner model string.

◆ savedImageDests

std::unique_ptr<SavedImageDests> OpenSRX::Scanner::savedImageDests
private

The documentation for this class was generated from the following file: