Barcode Reader Device Class Interface - Programmer's Reference
Barcode Reader Device Class Interface - Programmer's Reference
CWA 16926-17
WORKSHOP August 2015
AGREEMENT
English version
This CEN Workshop Agreement has been drafted and approved by a Workshop of representatives of interested parties, the constitution of
which is indicated in the foreword of this Workshop Agreement.
The formal process followed by the Workshop in the development of this Workshop Agreement has been endorsed by the National
Members of CEN but neither the National Members of CEN nor the CEN-CENELEC Management Centre can be held accountable for the
technical content of this CEN Workshop Agreement or possible conflicts with standards or legislation.
This CEN Workshop Agreement can in no way be held as being an official standard developed by CEN and its Members.
This CEN Workshop Agreement is publicly available as a reference document from the CEN Members National Standard Bodies.
CEN members are the national standards bodies of Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia,
Finland, Former Yugoslav Republic of Macedonia, France, Germany, Greece, Hungary, Iceland, Ireland, Italy, Latvia, Lithuania,
Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and United
Kingdom.
© 2015 CEN All rights of exploitation in any form and by any means reserved worldwide for CEN national Members.
Table of Contents
1. Introduction....................................................................................................................... 6
1.1 Background to Release 3.30................................................................................................ 6
1.2 XFS Service-Specific Programming.................................................................................... 6
2. Barcode Readers............................................................................................................. 8
3. References ........................................................................................................................ 9
4. Info Commands.............................................................................................................. 10
4.1 WFS_INF_BCR_STATUS .................................................................................................... 10
4.2 WFS_INF_BCR_CAPABILITIES .......................................................................................... 13
6. Events............................................................................................................................... 23
6.1 WFS_SRVE_BCR_DEVICEPOSITION .................................................................................. 23
6.2 WFS_SRVE_BCR_POWER_SAVE_CHANGE ....................................................................... 24
2
CWA 16926-17:2015 (E)
European foreword
3
CWA 16926-17:2015 (E)
Part 38: XFS MIB Device Specific Definitions - Camera Device Class
Part 39: XFS MIB Device Specific Definitions - Alarm Device Class
Part 40: XFS MIB Device Specific Definitions - Card Embossing Unit Class
Part 41: XFS MIB Device Specific Definitions - Cash-In Module Device Class
Part 42: Reserved for future use.
Part 43: XFS MIB Device Specific Definitions - Vendor Dependent Mode Device Class
Part 44: XFS MIB Application Management
Part 45: XFS MIB Device Specific Definitions - Card Dispenser Device Class
Part 46: XFS MIB Device Specific Definitions - Barcode Reader Device Class
Part 47: XFS MIB Device Specific Definitions - Item Processing Module Device Class
Parts 48 - 60 are reserved for future use.
Part 61: Application Programming Interface (API) - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Service Provider Interface (SPI) - Programmer's Reference
Part 62: Printer and Scanning Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 63: Identification Card Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 64: Cash Dispenser Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 65: PIN Keypad Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this CWA) -
Programmer's Reference
Part 66: Check Reader/Scanner Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30
(this CWA) - Programmer's Reference
Part 67: Depository Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this CWA) -
Programmer's Reference
Part 68: Text Terminal Unit Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 69: Sensors and Indicators Unit Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version
3.30 (this CWA) - Programmer's Reference
Part 70: Vendor Dependent Mode Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30
(this CWA) - Programmer's Reference
Part 71: Camera Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this CWA) -
Programmer's Reference
Part 72: Alarm Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this CWA) -
Programmer's Reference
Part 73: Card Embossing Unit Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 74: Cash-In Module Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 75: Card Dispenser Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 76: Barcode Reader Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30 (this
CWA) - Programmer's Reference
Part 77: Item Processing Module Device Class Interface - Migration from Version 3.20 (CWA 16374) to Version 3.30
(this CWA) - Programmer's Reference
4
CWA 16926-17:2015 (E)
In addition to these Programmer's Reference specifications, the reader of this CWA is also referred to a
complementary document, called Release Notes. The Release Notes contain clarifications and explanations on the
CWA specifications, which are not requiring functional changes. The current version of the Release Notes is
available online from http://www.cen.eu/work/areas/ict/ebusiness/pages/ws-xfs.aspx.
The information in this document represents the Workshop's current views on the issues discussed as of the date of
publication. It is furnished for informational purposes only and is subject to change without notice. CEN makes no
warranty, express or implied, with respect to this document.
The formal process followed by the Workshop in the development of the CEN Workshop Agreement has been
endorsed by the National Members of CEN but neither the National Members of CEN nor the CEN-CENELEC
Management Centre can be held accountable for the technical content of the CEN Workshop Agreement or possible
conflict with standards or legislation. This CEN Workshop Agreement can in no way be held as being an official
standard developed by CEN and its members.
The final review/endorsement round for this CWA was started on 2015-01-16 and was successfully closed on 2015-
03-19. The final text of this CWA was submitted to CEN for publication on 2015-06-19. The specification is
continuously reviewed and commented in the CEN Workshop on XFS. It is therefore expected that an update of the
specification will be published in due time as a CWA, superseding this revision 3.30.
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights.
CEN [and/or CENELEC] shall not be held responsible for identifying any or all such patent rights.
According to the CEN-CENELEC Internal Regulations, the national standards organizations of the following
countries are bound to implement this European Standard: Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech
Republic, Denmark, Estonia, Finland, Former Yugoslav Republic of Macedonia, France, Germany, Greece, Hungary,
Iceland, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania,
Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and the United Kingdom.
Comments or suggestions from the users of the CEN Workshop Agreement are welcome and should be addressed to
the CEN-CENELEC Management Centre.
Revision History:
3.10 November 29, 2007 Initial release.
3.20 March 2, 2011 For a description of changes from version 3.10 to version 3.20 see
the BCR 3.20 Migration document.
3.30 March 19, 2015 For a description of changes from version 3.20 to version 3.30 see
the BCR 3.30 Migration document.
5
CWA 16926-17:2015 (E)
1. Introduction
The CEN/XFS Workshop aims to promote a clear and unambiguous specification defining a multi-vendor software
interface to financial peripheral devices. The XFS (eXtensions for Financial Services) specifications are developed
within the CEN (European Committee for Standardization/Information Society Standardization System) Workshop
environment. CEN/XFS Workshops aim to arrive at a European consensus on an issue that can be published as a
CEN Workshop Agreement (CWA).
The CEN/XFS Workshop encourages the participation of both banks and vendors in the deliberations required to
create an industry standard. The CEN/XFS Workshop achieves its goals by focused sub-groups working
electronically and meeting quarterly.
Release 3.30 of the XFS specification is based on a C API and is delivered with the continued promise for the
protection of technical investment for existing applications. This release of the specification extends the
functionality and capabilities of the existing devices covered by the specification, but it does not include any new
device classes. Notable enhancements include:
• Enhanced reporting of Shutter Jammed Status and a new Shutter Status event for CDM, CIM and
IPM.
• Addition of a Synchronize command for all device classes, in order to allow synchronized action
where necessary.
• Directional Guidance Light support.
• Addition of a CIM Deplete Command.
• Support for EMV Intelligent Contactless Readers.
• Support in PIN for Encrypting Touch Screen.
• PIN Authentication functionality.
• New PIN Encryption Protocols added for Chinese market.
• PIN TR34 standard supported.
The service classes are defined by their service-specific commands and the associated data structures, error codes,
messages, etc. These commands are used to request functions that are specific to one or more classes of Service
Providers, but not all of them, and therefore are not included in the common API for basic or administration
functions.
When a service-specific command is common among two or more classes of Service Providers, the syntax of the
command is as similar as possible across all services, since a major objective of the XFS is to standardize function
codes and structures for the broadest variety of services. For example, using the WFSExecute function, the
commands to read data from various services are as similar as possible to each other in their syntax and data
structures.
In general, the specific command set for a service class is defined as a superset of the specific capabilities likely to
be provided by the developers of the services of that class; thus any particular device will normally support only a
subset of the defined command set.
There are three cases in which a Service Provider may receive a service-specific command that it does not support:
The requested capability is defined for the class of Service Providers by the XFS specification, the particular vendor
implementation of that service does not support it, and the unsupported capability is not considered to be
fundamental to the service. In this case, the Service Provider returns a successful completion, but does no operation.
An example would be a request from an application to turn on a control indicator on a passbook printer; the Service
Provider recognizes the command, but since the passbook printer it is managing does not include that indicator, the
Service Provider does no operation and returns a successful completion to the application.
6
CWA 16926-17:2015 (E)
The requested capability is defined for the class of Service Providers by the XFS specification, the particular vendor
implementation of that service does not support it, and the unsupported capability is considered to be fundamental
to the service. In this case, a WFS_ERR_UNSUPP_COMMAND error is returned to the calling application. An
example would be a request from an application to a cash dispenser to dispense coins; the Service Provider
recognizes the command but, since the cash dispenser it is managing dispenses only notes, returns this error.
The requested capability is not defined for the class of Service Providers by the XFS specification. In this case, a
WFS_ERR_INVALID_COMMAND error is returned to the calling application.
This design allows implementation of applications that can be used with a range of services that provide differing
subsets of the functionalities that are defined for their service class. Applications may use the WFSGetInfo and
WFSAsyncGetInfo commands to inquire about the capabilities of the service they are about to use, and modify their
behavior accordingly, or they may use functions and then deal with WFS_ERR_UNSUPP_COMMAND error returns
to make decisions as to how to use the service.
7
CWA 16926-17:2015 (E)
2. Barcode Readers
This specification describes the functionality of a Barcode Reader (BCR) Service Provider. It defines the service-
specific commands that can be issued to the Service Provider using the WFSGetInfo, WFSAsyncGetInfo,
WFSExecute and WFSAsyncExecute functions.
Persistent values are maintained through power failures, open sessions, close session and system resets.
This extension to XFS specifications defines the functionality of BCR service.
A Barcode Reader scans barcodes using any scanning technology. The device logic converts light signals or image
recognition into application data and transmits it to the host system.
The basic operation of the Barcode Reader is managed using WFSExecute/WFSAsyncExecute functions.
When an application wants to read a barcode, it issues a WFS_CMD_BCR_READ command to prepare the scanner
to read any barcode presented to it. When a document is presented to the BCR and a barcode type is recognized, a
completion event is received which contains the barcode data that has been read.
8
CWA 16926-17:2015 (E)
3. References
1. XFS Application Programming Interface (API)/Service Provider Interface ( SPI), Programmer’s Reference Revision
3.30
9
CWA 16926-17:2015 (E)
4. Info Commands
4.1 WFS_INF_BCR_STATUS
Description This command is used to request status information for the device.
Input Param None.
Output Param LPWFSBCRSTATUS lpStatus;
typedef struct _wfs_bcr_status
{
WORD fwDevice;
WORD fwBCRScanner;
DWORD dwGuidLights[WFS_BCR_GUIDLIGHTS_SIZE];
LPSTR lpszExtra;
WORD wDevicePosition;
USHORT usPowerSaveRecoveryTime;
WORD wAntiFraudModule;
} WFSBCRSTATUS, *LPWFSBCRSTATUS;
fwDevice
Specifies the state of the BCR device as one of the following flags:
Value Meaning
WFS_BCR_DEVONLINE The device is online (i.e. powered on and
operable).
WFS_BCR_DEVOFFLINE The device is offline (e.g. the operator has
taken the device offline by turning a switch).
WFS_BCR_DEVPOWEROFF The device is powered off or physically not
connected.
WFS_BCR_DEVNODEVICE There is no device intended to be there; e.g.
this type of self service machine does not
contain such a device or it is internally not
configured.
WFS_BCR_DEVHWERROR The device is inoperable due to a hardware
error.
WFS_BCR_DEVUSERERROR The device is present but a person is
preventing proper device operation.
WFS_BCR_DEVBUSY The device is busy and unable to process an
execute command at this time.
WFS_BCR_DEVFRAUDATTEMPT The device is present but is inoperable
because it has detected a fraud attempt.
WFS_BCR_DEVPOTENTIALFRAUD The device has detected a potential fraud
attempt and is capable of remaining in
service. In this case the application should
make the decision as to whether to take the
device offline.
fwBCRScanner
Specifies the scanner status (laser, camera or other technology) as one of the following flags:
Value Meaning
WFS_BCR_SCANNERON Scanner is enabled for reading.
WFS_BCR_SCANNEROFF Scanner is disabled.
WFS_BCR_SCANNERINOP Scanner is inoperative due to a hardware
error.
WFS_BCR_SCANNERUNKNOWN Scanner status cannot be determined.
dwGuidLights [...]
Specifies the state of the guidance light indicators. A number of guidance light types are defined
below. Vendor specific guidance lights are defined starting from the end of the array. The maximum
guidance light index is WFS_BCR_GUIDLIGHTS_MAX.
10
CWA 16926-17:2015 (E)
11
CWA 16926-17:2015 (E)
12
CWA 16926-17:2015 (E)
4.2 WFS_INF_BCR_CAPABILITIES
Description This command is used to retrieve the capabilities of the BCR unit.
Input Param None.
Output Param LPWFSBCRCAPS lpCaps;
typedef struct _wfs_bcr_caps
{
WORD wClass;
BOOL bCompound;
BOOL bCanFilterSymbologies;
LPWORD lpwSymbologies;
DWORD dwGuidLights[WFS_BCR_GUIDLIGHTS_SIZE];
LPSTR lpszExtra;
BOOL bPowerSaveControl;
BOOL bAntiFraudModule;
LPDWORD lpdwSynchronizableCommands;
} WFSBCRCAPS, *LPWFSBCRCAPS;
wClass
Specifies the logical service class as WFS_SERVICE_CLASS_BCR.
bCompound
Specifies whether the logical device is part of a compound physical device.
bCanFilterSymbologies
Specifies whether the device is capable of discriminating between the presented barcode
symbologies such that only the desired symbologies are recognized/reported.
lpwSymbologies
Pointer to an array of WORDs. This list specifies the barcode symbologies readable by the
scanner. The array is terminated with a zero value. lpwSymbologies is a NULL pointer if the
supported barcode symbologies can not be determined.
Value Meaning
WFS_BCR_SYM_EAN128 GS1-128
WFS_BCR_SYM_EAN8 EAN-8
WFS_BCR_SYM_EAN8_2 EAN-8 with 2 digit add-on
WFS_BCR_SYM_EAN8_5 EAN-8 with 5 digit add-on
WFS_BCR_SYM_EAN13 EAN13
WFS_BCR_SYM_EAN13_2 EAN-13 with 2 digit add-on
WFS_BCR_SYM_EAN13_5 EAN-13 with 5 digit add-on
WFS_BCR_SYM_JAN13 JAN-13
WFS_BCR_SYM_UPCA UPC-A
WFS_BCR_SYM_UPCE0 UPC-E
WFS_BCR_SYM_UPCE0_2 UPC-E with 2 digit add-on
WFS_BCR_SYM_UPCE0_5 UPC-E with 5 digit add-on
WFS_BCR_SYM_UPCE1 UPC-E with leading 1
WFS_BCR_SYM_UPCE1_2 UPC-E with leading 1and 2 digit add-on
WFS_BCR_SYM_UPCE1_5 UPC-E with leading 1and 5 digit add-on
WFS_BCR_SYM_UPCA_2 UPC-A with2 digit add-on
WFS_BCR_SYM_UPCA_5 UPC-A with 5 digit add-on
WFS_BCR_SYM_CODABAR CODABAR (NW-7)
WFS_BCR_SYM_ITF Interleaved 2 of 5 (ITF)
WFS_BCR_SYM_11 CODE 11 (USD-8)
WFS_BCR_SYM_39 CODE 39
WFS_BCR_SYM_49 CODE 49
WFS_BCR_SYM_93 CODE 93
WFS_BCR_SYM_128 CODE 128
WFS_BCR_SYM_MSI MSI
WFS_BCR_SYM_PLESSEY PLESSEY
13
CWA 16926-17:2015 (E)
14
CWA 16926-17:2015 (E)
15
CWA 16926-17:2015 (E)
5. Execute Commands
5.1 WFS_CMD_BCR_READ
Description This command enables the barcode reader. The barcode reader will scan for barcodes and when it
successfully manages to read one or more barcodes the command will complete. The completion
event for this command contains the scanned barcode data.
Input Param LPWFSBCRREADINPUT lpReadInput;
typedef struct _wfs_bcr_read_input
{
LPWORD lpwSymbologies;
} WFSBCRREADINPUT, *LPWFSBCRREADINPUT;
lpwSymbologies
Array specifying a list that contains the sub-set of bar code symbologies that the application
wants to be accepted for this command. The array is terminated with a zero value.
In some cases the Service Provider can discriminate between barcode symbologies and return the
data only if the presented symbology matches with one of the desired symbologies. See the
bCanFilterSymbologies capability to determine if the Service Provider supports this feature. If the
Service Provider does not support this feature then this parameter is ignored. If all symbologies
should be accepted then lpwSymbologies should be set to NULL.
Output Param LPWFSBCRREADOUTPUT *lppReadOutput;
Pointer to a NULL terminated array of pointers to WFSBCRREADOUTPUT structures. There is
one array element for each barcode read during the scan.
typedef struct _wfs_bcr_read_output
{
WORD wSymbology;
LPWFSBCRXDATA lpxBarcodeData;
LPSTR lpszSymbologyName;
} WFSBCRREADOUTPUT, *LPWFSBCRREADOUTPUT;
wSymbology
Specifies the barcode symbology recognized. This contains one of the values returned in the
lpwSymbologies field of the WFS_INF_BCR_CAPABILITIES command. If the barcode reader is
unable to recognize the symbology as one of the values reported via the device capabilities then
the value for this field will be WFS_BCR_SYM_UNKNOWN.
lpxBarcodeData
Contains the barcode data read from the barcode reader. The format of the data will depend on the
barcode symbology read. In most cases this will be an array of bytes containing ASCII numeric
digits. However, the format of the data in this field depends entirely on the symbology read, e.g. it
may contain 8 bit character values where the symbol is dependent on the codepage used to
encode the barcode, may contain UNICODE data, or may be a binary block of data. The application
is responsible for checking the completeness and validity of the data.
lpszSymbologyName
A vendor dependent symbology identifier for the symbology recognized.
Error Codes In addition to the generic error codes defined in [Ref. 1], the following error codes can be
generated by this command:
Value Meaning
WFS_ERR_BCR_BARCODEINVALID The read operation could not be completed
successfully. The barcode presented was
defective or was wrongly read.
Events Only the generic events defined in [Ref. 1] can be generated by this command.
Comments The device waits for the period of time specified by the dwTimeOut parameter in the WFSExecute
call for one of the enabled symbologies to be presented, unless the hardware has a fixed timeout
16
CWA 16926-17:2015 (E)
period that is less than the value passed in the WFSExecute command.
The data type LPWFSBCRXDATA is used to return the barcode data.
typedef struct _wfs_bcr_hex_data
{
USHORT usLength;
LPBYTE lpbData;
} WFSBCRXDATA, *LPWFSBCRXDATA;
usLength
Length of the byte stream pointed to by lpbData.
lpbData
Pointer to the data stream.
17
CWA 16926-17:2015 (E)
5.2 WFS_CMD_BCR_RESET
Description This command is used to reset the device. The scanner returns to power-on initial status and
remains disabled for any barcode label reading.
Input Param None.
Output Param None.
Error Codes Only the generic errors codes defined in [Ref. 1] can be generated by this command.
Events Only the generic events defined in [Ref. 1] can be generated by this command.
Comments None.
18
CWA 16926-17:2015 (E)
5.3 WFS_CMD_BCR_SET_GUIDANCE_LIGHT
Description This command is used to set the status of the BCR guidance lights. This includes defining the
flash rate, the color and the direction. When an application tries to use a color or direction that is
not supported then the Service Provider will return the generic error WFS_ERR_UNSUPP_DATA.
Input Param LPWFSBCRSETGUIDLIGHT lpSetGuidLight;
typedef struct _wfs_bcr_set_guidlight
{
WORD wGuidLight;
DWORD dwCommand;
} WFSBCRSETGUIDLIGHT, *LPWFSBCRSETGUIDLIGHT;
wGuidLight
Specifies the index of the guidance light to set as one of the values defined within the capabilities
section.
dwCommand
Specifies the state of the guidance light indicator as WFS_BCR_GUIDANCE_OFF or a
combination of the following flags consisting of one type B, optionally one type C and optionally
one type D. If no value of type C is specified then the default color is used. The Service Provider
determines which color is used as the default color.
Value Meaning Type
WFS_BCR_GUIDANCE_OFF The light indicator is turned off. A
WFS_BCR_GUIDANCE_SLOW_FLASH The light indicator is set to flash B
slowly.
WFS_BCR_GUIDANCE_MEDIUM_FLASH The light indicator is set to flash B
medium frequency.
WFS_BCR_GUIDANCE_QUICK_FLASH The light indicator is set to flash B
quickly.
WFS_BCR_GUIDANCE_CONTINUOUS The light indicator is turned on B
continuously (steady).
WFS_BCR_GUIDANCE_RED The light indicator color is set C
to red.
WFS_BCR_GUIDANCE_GREEN The light indicator color is set C
to green.
WFS_BCR_GUIDANCE_YELLOW The light indicator color is set C
to yellow.
WFS_BCR_GUIDANCE_BLUE The light indicator color is set C
to blue.
WFS_BCR_GUIDANCE_CYAN The light indicator color is set C
to cyan.
WFS_BCR_GUIDANCE_MAGENTA The light indicator color is set C
to magenta.
WFS_BCR_GUIDANCE_WHITE The light indicator color is set C
to white.
WFS_BCR_GUIDANCE_ENTRY The light indicator is set D
to the entry state.
WFS_BCR_GUIDANCE_EXIT The light indicator is set D
to the exit state.
Output Param None.
Error Codes In addition to the generic error codes defined in [Ref. 1], the following error codes can be
generated by this command:
Value Meaning
WFS_ERR_BCR_INVALID_PORT An attempt to set a guidance light to a new
value was invalid because the guidance light
does not exist.
19
CWA 16926-17:2015 (E)
Events Only the generic events defined in [Ref. 1] can be generated by this command.
Comments The slow and medium flash rates must not be greater than 2.0 Hz. It should be noted that in order
to comply with American Disabilities Act guidelines only a slow or medium flash rate must be
used.
20
CWA 16926-17:2015 (E)
5.4 WFS_CMD_BCR_POWER_SAVE_CONTROL
usMaxPowerSaveRecoveryTime
Specifies the maximum number of seconds in which the device must be able to return to its normal
operating state when exiting power save mode. The device will be set to the highest possible
power save mode within this constraint. If usMaxPowerSaveRecoveryTime is set to zero then the
device will exit the power saving mode.
Output Param None.
Error Codes In addition to the generic error codes defined in [Ref. 1], the following error codes can be
generated by this command:
Value Meaning
WFS_ERR_BCR_POWERSAVETOOSHORT The power saving mode has not been
activated because the device is not able to
resume from the power saving mode within
the specified
usMaxPowerSaveRecoveryTime value.
Events In addition to the generic events defined in [Ref. 1], the following events can be generated by this
command:
Value Meaning
WFS_SRVE_BCR_POWER_SAVE_CHANGE The power save recovery time has changed.
Comments None.
21
CWA 16926-17:2015 (E)
5.5 WFS_CMD_BCR_SYNCHRONIZE_COMMAND
Description This command is used to reduce response time of a command (e.g. for synchronization with
display) as well as to synchronize actions of the different device classes. This command is
intended to be used only on hardware which is capable of synchronizing functionality within a
single device class or with other device classes.
The list of execute commands which this command supports for synchronization is retrieved in the
lpdwSynchronizableCommands parameter of the WFS_INF_BCR_CAPABILITIES.
This command is optional, i.e, any other command can be called without having to call it in
advance. Any preparation that occurs by calling this command will not affect any other
subsequent command. However, any subsequent execute command other than the one that was
specified in the dwCommand input parameter will execute normally and may invalidate the pending
synchronization. In this case the application should call the
WFS_CMD_BCR_SYNCHRONIZE_COMMAND again in order to start a synchronization.
Input Param LPWFSBCRSYNCHRONIZECOMMAND lpSynchronizeCommand;
typedef struct _wfs_bcr_synchronize_command
{
DWORD dwCommand;
LPVOID lpCmdData;
} WFSBCRSYNCHRONIZECOMMAND, *LPWFSBCRSYNCHRONIZECOMMAND;
dwCommand
The command ID of the command to be synchronized and executed next.
lpCmdData
Pointer to data or a data structure that represents the parameter that is normally associated with
the command that is specified in dwCommand. For example, if dwCommand is
WFS_CMD_BCR_READ then lpCmdData will point to a WFSBCRREADOUTPUT structure. This
parameter can be NULL if no command input parameter is needed or if this detail is not needed to
synchronize for the command.
It will be device-dependent whether the synchronization is effective or not in the case where the
application synchronizes for a command with this command specifying a parameter but
subsequently executes the synchronized command with a different parameter. This case should
not result in an error; however, the preparation effect could be different from what the application
expects. The application should, therefore, make sure to use the same parameter between
lpCmdData of this command and the subsequent corresponding execute command.
Output Param None.
Error Codes In addition to the generic error codes defined in [Ref. 1], the following error codes can be
generated by this command:
Value Meaning
WFS_ERR_BCR_COMMANDUNSUPP The command specified in the dwCommand
field is not supported by the Service
Provider.
WFS_ERR_BCR_SYNCHRONIZEUNSUPP The preparation for the command specified in
the dwCommand with the parameter
specified in the lpCmdData is not supported
by the Service Provider.
Events Only the generic events defined in [Ref. 1] can be generated by this command.
Comments For sample flows of this synchronization see the [Ref 1] Appendix C.
22
CWA 16926-17:2015 (E)
6. Events
6.1 WFS_SRVE_BCR_DEVICEPOSITION
Description This service event reports that the device has changed its position status.
Event Param LPWFSBCRDEVICEPOSITION lpDevicePosition;
typedef struct _wfs_bcr_device_position
{
WORD wPosition;
} WFSBCRDEVICEPOSITION, *LPWFSBCRDEVICEPOSITION;
wPosition
Position of the device as one of the following values:
Value Meaning
WFS_BCR_DEVICEINPOSITION The device is in its normal operating
position.
WFS_BCR_DEVICENOTINPOSITION The device has been removed from its normal
operating position.
WFS_BCR_DEVICEPOSUNKNOWN The position of the device cannot be
determined.
Comments None.
23
CWA 16926-17:2015 (E)
6.2 WFS_SRVE_BCR_POWER_SAVE_CHANGE
Description This service event specifies that the power save recovery time has changed.
Event Param LPWFSBCRPOWERSAVECHANGE lpPowerSaveChange;
typedef struct _wfs_bcr_power_save_change
{
USHORT usPowerSaveRecoveryTime;
} WFSBCRPOWERSAVECHANGE, *LPWFSBCRPOWERSAVECHANGE;
usPowerSaveRecoveryTime
Specifies the actual number of seconds required by the device to resume its normal operational
state. This value is zero if the device exited the power saving mode.
Comments If another device class compounded with this device enters into a power saving mode this device
will automatically enter into the same power saving mode and this event will be generated.
24
CWA 16926-17:2015 (E)
7. C - Header file
/******************************************************************************
* *
* xfsbcr.h XFS - Barcode Reader (BCR) definitions *
* *
* Version 3.30 (March 19 2015) *
* *
******************************************************************************/
#ifndef __INC_XFSBCR__H
#define __INC_XFSBCR__H
#ifdef __cplusplus
extern "C" {
#endif
#include <xfsapi.h>
/* be aware of alignment */
#pragma pack (push, 1)
/* values of WFSBCRCAPS.wClass */
/* BCR Messages */
/* values of WFSBCRSTATUS.fwDevice */
/* values of WFSBCRSTATUS.fwBCRScanner */
25
CWA 16926-17:2015 (E)
/* values of WFSBCRSTATUS.wDevicePosition
WFSBCRDEVICEPOSITION.wPosition */
/* values of WFSBCRCAPS.lpwSymbologies
WFSBCRREADINPUT.lpwSymbologies
WFSBCRREADOUTPUT.wSymbology */
26
CWA 16926-17:2015 (E)
/* values of WFSBCRSTATUS.wAntiFraudModule */
/*=================================================================*/
/* BCR Info Command Structures */
/*=================================================================*/
27
CWA 16926-17:2015 (E)
/*=================================================================*/
/* BCR Execute Command Structures */
/*=================================================================*/
typedef struct _wfs_bcr_hex_data
{
USHORT usLength;
LPBYTE lpbData;
} WFSBCRXDATA, * LPWFSBCRXDATA;
/*=================================================================*/
/* BCR Message Structures */
28
CWA 16926-17:2015 (E)
/*=================================================================*/
/* restore alignment */
#pragma pack(pop)
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /* __INC_XFSBCR__H */
29