NEO 2 Interface Developer’s Guide Table of Contents 1. INTRODUCTION ..............................15 1.1. T ................................15 ERMINOLOGY 1.2. D ................................15 EVICE ODES 1.3. U SDK ................................ 15 NIVERSAL 1.4. O ..........................16 RGANIZATION OF THIS UIDE 1.5. N ............................. 16 OTATIONAL ONVENTIONS 1.6.
Page 4
NEO 2 Interface Developer’s Guide 3.3. B ................................51 URST 3.3.1. ViVOpay Burst Mode Frames ..............................52 3.4. CRC C ..............................60 ALCULATION 4. TAG AND DATA SET CONFIGURATION ......................63 4.1. C ......................... 64 ONFIGURABLE S AND ROUPS 4.1.1. System AIDs ......................................66 4.1.2.
Page 6
NEO 2 Interface Developer’s Guide 8.3.6. Delete Configurable Group (04-05) ........................... 157 8.3.7. Get All AIDs (03-05) ..................................157 8.3.8. Get All Groups (03-07) ................................158 8.4. T ....................159 RANSACTION ELATED OMMANDS ONTACT 8.4.1. Setting transaction parameters ............................159 8.4.2.
Page 7
NEO 2 Interface Developer’s Guide 8.6.4. Data Exchange Request (02-58) Command and Data Exchange Response (02-09) ..... 246 8.7. K ........................... 246 ANAGEMENT OMMANDS 8.7.1. Get CA Public Key (D0-01) ............................... 247 8.7.2. Get CA Public Key Hash (D0-02) ............................248 8.7.3.
Page 8
NEO 2 Interface Developer’s Guide 8.15.2. PCD Single Command Exchange (2C-04) Protocol 2 ..................285 8.15.3. High-level Halt Command (2C-09) ..........................289 8.15.4. Enhanced Pass-Through Command (2C-0B) ......................290 8.15.5. Single Shot Commands ................................294 8.15.1. Poll for Token with ATS (2C-0E) ............................297 8.15.2.
Page 9
NEO 2 Interface Developer’s Guide 8.22.6. Get Data Encryption Key Variant Type (C7-30) ...................... 334 8.22.7. Set DUKPT Key Encryption Type (C7-32) ........................334 8.22.8. Get DUKPT Key Encryption Type (C7-33) ........................335 8.22.9. Set Data Encryption Enable Flag (C7-36) ........................336 8.22.10.
Page 10
NEO 2 Interface Developer’s Guide 8.29.1. Get USB Sleep Configuration (F0-07) ..........................375 8.29.2. Wake-Up Notification (F1-00) ............................376 8.30. USB P ....................376 OWER USPEND ONFIGURATION 8.30.1. Set USB Power Mode Suspend Configuration (F0-08) ..................376 8.30.2. Get USB Power Mode Suspend Configuration (F0-09) ..................377 8.31.
Page 11
NEO 2 Interface Developer’s Guide 18.3. S (63-03) ..........................435 ESSION 18.4. S ID (63-04) ............................436 18.5. G ID (63-05) ............................436 18.6. G (63-06) ......................... 437 ENERATE 18.7. G L100 F (70-03) ......................437 IRMWARE ERSION 19. APPENDIX A.7: VP6800 COMMANDS ....................... 439 19.1.
Page 12
NEO 2 Interface Developer’s Guide 19.3.38. QR Code Scan Start (61-41) ............................. 477 19.3.39. QR Code Scan Stop (61-42) .............................. 480 19.3.40. Camera Take Photo Start (61-43) ..........................480 19.3.41. Camera Take Photo Stop (61-44) ..........................483 19.4. A VP6800 I .........................
Page 13
NEO 2 Interface Developer’s Guide List of Tables Table 1: Hardware Cross Reference ..............................17 Table 2: Commands Sorted by Command Name ..........................18 Table 3: Commands Sorted by Command Number .......................... 22 Table 4: Pass-Through Command Table ............................. 26 Table 5: EMV Key Management –...
Page 14
NEO 2 Interface Developer’s Guide Table 50: EMV Key Manager Status Codes – Protocol 2 ......................247 Table 51: Language Version Information ............................261 Table 52: Exception List Record Format ............................271 Table 53: Get PCD and PICC Parameters Data Field ........................274 Table 54: Poll for Token Data Field for Command Frame ......................
NEO 2 Interface Developer’s Guide 1. Introduction This document provides application developers and integrators with the detailed information necessary to integrate ID TECH's ViVOpay readers with point of sale terminals (POS). It specifies the low-level (firmware) commands and responses that host systems can use to communicate with a ViVOpay reader to carry out contactless EMV transactions.
NEO 2 Interface Developer’s Guide To obtain the Universal SDK, go to the ID TECH Knowledge Base, select the product of interest, and click through to the appropriate tools. The Universal SDK is available free of charge to all ID TECH customers and is available on demand. 1.4.
NEO 2 Interface Developer’s Guide download the P/N 80000503-001 TLV Tag Reference Guide, available free of charge on the TECH Knowledge Base. In this guide, hexadecimal numbers are expressed in one of two ways: With an “h” after the number; for example, 2Ah •...
NEO 2 Interface Developer’s Guide 2. Quick Reference This section contains tables for looking up commands, status codes, and error codes. 2.1. Command Tables The tables in this section organize the commands by their names and by their command number. 2.1.1.
Page 19
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Contact Set Terminal Data Contact Start Transaction Contact Get ICS Identification Contact Remove Transaction Amount Log Contact Set ICS Identification Control User Interface Data Exchange Request √ Data Exchange Response √...
Page 20
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Get Contact EMV L2 Kernel Version Detail √ Get Contact EMV L2 Terminal Configuration Checksum √ Get Discretionary Data White List √ Get DRL Reader Risk Parameters √ Get DUKPT Key Serial Number Extended √...
Page 21
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Peer To Peer Receive A Message √ Play Audio Poll for Token with ATS QR Code Scan Start QR Code Scan Stop Reset Torn Transaction Log √ Retrieve Log RTC Get Date √...
NEO 2 Interface Developer’s Guide 2.1.2. Commands Sorted by Command Number Commands Sorted by Command Number Command C’less or Notes C’less + MSR Set Poll Mode √ Control User Interface Set/Get Source for RTC/LCD/Buzzer/LED √ Set Switches Notifications Configuration Get Switches Notifications Conifiguration Activate Transaction Command √...
Page 23
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Flush Track Data √ Set RF Error Reporting √ Get Full Track Data √ Ping √ Set CA Public Key √ Delete CA Public Key √ Delete All CA Public Keys √...
Page 24
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Set Temporary Baud Rate √ Initialize/De-initialize Logger Set Logger Level Get/Set Logger Size Enable/Disable Logger Save/Delete Log Retrieve Log Contact Retrieve Application Data Contact Remove Application Data Contact Set Application Data Contact Retrieve Terminal Data Contact Remove Terminal Data Contact Set Terminal Data...
Page 25
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR Get and Set MAC Verification Option (for data output) Get EMV Revocation Log Status √ Add Entry to EMV Revocation List √ Delete All Entries for Single Index in EMV Revocation List √...
NEO 2 Interface Developer’s Guide Command C’less or Notes C’less + MSR LCD Display Line 1 Message Command LCD Display Line 2 Message Command Buzzer On/Off Command Wake-Up Notification Switches Notification a ViVOpay Vendi reader only c Not in Global Reader Lite (GRL) d Real Time Clock only e Only applies to devices with USB VP6300-specific Commands...
NEO 2 Interface Developer’s Guide 2.1.5. Status Codes Status Codes for Protocol 2 Status Code Status Incorrect Header Tag Unknown Command Unknown Sub-Command CRC Error in Frame Incorrect Parameter Parameter Not Supported Mal-formatted Data Timeout Failed / NACK Command not Allowed Sub-Command not Allowed Buffer Overflow (Data Length too large for reader buffer) User Interface Event...
Page 29
NEO 2 Interface Developer’s Guide Status Code Status ViVOcomm activate transaction card type (ViVOcomm) Version Information Mismatch (ILM) Not sending commands in correct index message index (ILM) Time out or next expected message not received (ILM) ILM languages not available for viewing (ILM) Other language not supported (ILM) No SCRP Default Pairing Key Status Error...
NEO 2 Interface Developer’s Guide 2.1.6. Status Codes for Protocol 1 Protocol 1 Status Codes Status Code Status Incorrect Frame Tag Incorrect Frame Type Unknown Frame Type Unknown Command Unknown Sub-Command CRC Error Failed Timeout Incorrect Parameter Command Not Supported Sub-Command Not Supported Parameter Not Supported / Status Abort Command Command not Allowed...
NEO 2 Interface Developer’s Guide 2.2. Error Codes Error Codes Error Description Reason for Error and Suggested Error Handling Code No Error None. Out of Sequence Reader did not receive commands in the correct order. Correct the terminal Command application to send serial commands in the correct sequence. The contactless transaction failed.
Page 32
NEO 2 Interface Developer’s Guide Error Description Reason for Error and Suggested Error Handling Code If RF State Code = PUT DATA (Ticket): The terminal can retry the transaction or abandon it. If RF State Code = GEN AC: For credit transactions: The terminal can retry the transaction or abandon it.
Page 33
NEO 2 Interface Developer’s Guide Error Description Reason for Error and Suggested Error Handling Code Card Generated The card declined the transaction by sending an AAC instead of a TC. Card Generated This error code is returned if the card generated an ARQC and the terminal/reader ARQC was configured as “Offline Only”;...
NEO 2 Interface Developer’s Guide Error Description Reason for Error and Suggested Error Handling Code This is a generic or general error that is reported when a more specific reason for the Generic Error error is not known. Torn Transaction An error occurred while attempting to clean the torn transaction log.
Page 35
NEO 2 Interface Developer’s Guide State Code RF State Description Error occurred during CCC command Error occurred during IA command Error occurred during SDA processing Error occurred during DDA processing Error occurred during CDA processing Error occurred during TAA processing UPDATE RECORD Error occurred during UPDATE RECORD command NEGOTIATE...
NEO 2 Interface Developer’s Guide 2.4. EMV Result Codes (Tag DFEE25) For contact EMV transactions, a two-byte result code may be returned in DFEE25. Check the contents of tag DFEE25, when it occurs, and interpret the results as follows. NOTE: The result code is always two bytes long. The bottom two bits of the first byte are flags. If the zero bit is set, it means there was "advice."...
NEO 2 Interface Developer’s Guide Command Data Field Data Field Length (bytes) Description Name Var to 26 ASCII, must end with 0x00 Old Password New Password Response Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Data Data...
NEO 2 Interface Developer’s Guide 2.6.3. Get Bluetooth Local information (77-83) This command retrieves Bluetooth local information for the module version and bluetooth address. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 14+n Byte 15+n Header Tag &...
NEO 2 Interface Developer’s Guide DTR Control Disabled RTS Control Disabled XON/XOFF Disabled Flow Control None 2.7.2. Basic Communication The ViVOpay reader and the POS terminal communicate by exchanging command-response frames. The terminal always initiates communication by sending a command frame and ViVOpay responds by sending a response frame.
Page 41
NEO 2 Interface Developer’s Guide There are four defined report IDs used in this protocol: 1, 2, 3, and 4. Undefined report IDs are silently ignored. 2.8.1.1. Report ID 1 ID 1 frames are used when a complete command or response is 63 bytes or less. As soon as the host or device receives a report ID 1 frame, it should parse the report data to extract the command or response.
NEO 2 Interface Developer’s Guide 2.8.2. Sample Single Report Command and Response Ping Command Report “V” “i” “V” “O” “t” “e” “c” “h” “2” Ping Response Report “V” “i” “V” “O” “t” “e” “c” “h” “2” The serial port version of this command and response would be (data bytes in hex format): Command: 56 69 56 4F 74 65 63 68 32 00 18 01 00 00 B3 CD Response:...
Page 43
NEO 2 Interface Developer’s Guide Get Configuration response reports 1st Response Report “V” “i” “V” “O” “t” “e” “c” “h” “2” 2nd Response Report 3rd Response Report and Final Response Report Note: The response to this command changes each time the command is sent since it includes the current time and date.
NEO 2 Interface Developer’s Guide 2.8.5. Error Handling at Report Level 1. Any report with ID of 1 is processed as soon as it is received. All other unprocessed reports are discarded. 2. Any report with an ID of 2 causes all other unprocessed reports to be discarded. 3.
NEO 2 Interface Developer’s Guide 3. ViVOpay Communication Protocols There are two main types of protocols: Protocol 1 (now deprecated), and Protocol 2. Protocol 2 is the preferred method of communicating between the terminal/POS and a ViVOpay reader. Protocol 1 is retained for backward compatibility with older terminal/POS applications. In addition to the two main protocols, there are modes of communication that are extensions of the protocols.
NEO 2 Interface Developer’s Guide Note: Pass-through commands could only be executed in Pass-Through Mode. Other commands (non-Pass-Through) will return an error in Pass-Through Mode with the exception of Ping, Get Version, and Get Serial Number commands. 3.2.1. Basic Pass-Through Operation Pass-through mode allows a terminal to communicate directly with an ISO 14443 Type A or Type B proximity integrated circuit card (PICC) without the ViVOpay firmware knowing the specifics of the application or data present on the PICC.
NEO 2 Interface Developer’s Guide After a card is detected, the terminal may use one of the Pass-Through commands to communicate with the card at the application level and read the data. Additional Pass-Through commands allow a terminal to use low-level features provided by the ViVOpay reader, such as controlling the RF antenna (field).
NEO 2 Interface Developer’s Guide 3.2.4.1. For ISO 14443-4 Compliant Type A or Type B Cards Use the Exchange Contactless Data command to communicate with the Card at the application level. 3.2.4.2. For ISO I4443 Type A or Type B Cards that are not ISO 14443-4 Compliant (such as ISO 14443-3 Compliant Cards), Mifare Type A, and Mifare Ultralight Type A Low-level commands: Use the...
Page 49
NEO 2 Interface Developer’s Guide If the auto-switch feature is enabled, the reader switches to Pass-Through Mode under the following conditions: Card application is not recognized – global auto-switch is enabled • Card AID is not recognized – global auto-switch is enabled •...
Page 50
NEO 2 Interface Developer’s Guide Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Length Data Length & Protocol Command Status Code Data CRC (MSB) (MSB) (LSB) (LSB) Version Status...
NEO 2 Interface Developer’s Guide The response frame is returned asynchronously if the reader is in auto poll. After auto-switch is invoked the reader remains in Pass-Through Mode with the RF antenna on. The POS application must handle error recovery and exit Pass-Through Mode when done with the Pass-Through Mode Start/Stop command (2C-01).
NEO 2 Interface Developer’s Guide Burst Mode is not allowed when MSR/MSD or EMV encryption is enabled and a data encryption key exists. When MSR/MSD or EMV encryption is enabled and a data encryption key exists, Burst Mode is always OFF. In this condition, the reader will turn Burst Mode OFF automatically. If Burst Mode is set to ON/AUTO EXIT through the Set Configuration (04-00) command, the reader will keep Burst Mode OFF.
Page 53
NEO 2 Interface Developer’s Guide Example 3: Payload, Card Read Successfully, Application Type AmEx, Only Track 1 Present [01] [00] [03] %B1234567^ABCDEF^12345678? <CRC1><CRC2> Example 4: Payload, Card Read Successfully, Application Type Unknown, Both Track 1 and Track 2 Present [01] [00] [00] %B123456789^ABCDEF^12345678?;123456=12345? <CRC1><CRC2>...
Page 54
NEO 2 Interface Developer’s Guide Data Item Length (bytes) Description TLV DE 055 (Clearing Variable DE 055 data (if available) as a TLV data object encoded with Tag ‘E1’. The Record) ISO-8583 DE 055 data is the same data as is included in the Clearing Record.
Page 55
NEO 2 Interface Developer’s Guide Data Item Length (bytes) Description TLV Auth Code Authorization code as a TLV object Tag: E300 Format: b8 TLV Track 2 Equivalent Track 2 equivalent data as a TLV object. Data This field is present only if the DE 055 object is present or authorization code is present.
Page 56
NEO 2 Interface Developer’s Guide 3.3.1.3. NACK Frame If the terminal fails to receive the card payload data, it can send a NACK frame and request the ViVOpay reader to resend the card payload data. To ensure that the reader resends the card payload data, the NACK frame must be received by the reader within 500ms after it sends the original card payload.
Page 57
NEO 2 Interface Developer’s Guide Example 2: Reader receives NACK frame from terminal after 500ms of sending the original payload data, the reader does not resend the card payload data. Terminal ViVOpay Reader Original Payload ◄--------------------------------------------------------------------- | Time: 0 NACK sent at 700ms (after 500ms) --------------------------------------------------------------------►...
Page 58
NEO 2 Interface Developer’s Guide Asynchronous UI Message Event Component UI Type UI Status Definition Higher nibble: LED # 00: LED0 01: LED1 02: LED2 03: LED3 FF: all Lower nibble: 00: Off 01: On 11: No change Buzzer Higher nibble: 1: short beeps 2: long beeps Lower nibble, short beep:...
Page 59
NEO 2 Interface Developer’s Guide Application Type Application type is a 1 byte code that indicates the application type detected. This can have any value from 0 to 255. Asynchronous UI message Event Application Type Application Type Value Unknown MasterCard Visa American Express Discover...
Page 61
NEO 2 Interface Developer’s Guide Some test values that can be used to test an implementation of this algorithm are given below. Data String (ASCII Text): 123456789 CRC: 29B1h Data (Hex): [01h] [02h] [03h] [04h] [05h] CRC: 9304h Data (Hex): [56] [69] [56] [4F] [74] [65] [63] [68] [00] [43] [18] [00] [00] [00] CRC: A1F5h Implementation Example The following code snippet is an example of the CRC Calculation.
NEO 2 Interface Developer’s Guide 4. Tag and Data Set Configuration Tags are configured in the ViVOpay reader ahead of time so that when a card is selected, a “data set” (or group) may be instantiated for use in a transaction. The following illustration shows the basic approach to instantiating the tag database for a transaction.
NEO 2 Interface Developer’s Guide 4.1. Configurable AIDs and Groups This section explains how to can create and modify application identifiers (AIDs) and associate them with TLV Groups in the reader’s memory for specific types of transaction handling. Detailed descriptions of the configurable application identifier (CONAID) commands are also included.
Page 65
NEO 2 Interface Developer’s Guide To create a new configurable AID, send to the reader both: the AID in question. • the TLV Group to associate with it. • If the AID already exists in the reader’s memory, it will modify the AID accordingly. When sent a new AID, the reader creates and saves the new AID.
NEO 2 Interface Developer’s Guide Ten System AIDs have been disabled and four User AIDs and three new TLV Groups • have been configured. The new AID User AID – 1 has been linked to the Reader Default Configuration (TLV •...
NEO 2 Interface Developer’s Guide 4.1.2. User AIDs A User AID is an optional AID that is added and/or configured by the user. These AIDs are used for servicing transactions that are not defined by one of the System AIDs. This determination needs to be made by the integrator.
NEO 2 Interface Developer’s Guide Unlike all other groups, the TLVs in the Default TLV Group (TLV Group 0) are constant. The reader ALWAYS uses the latest copy of the TLV. If a user issues a Set Configurable Group command that only updates some TLVs in TLV Group 0, the reader continues to use older versions of the TLVs that were not updated.
NEO 2 Interface Developer’s Guide For American Express: Transaction limit (FFF1) • CVM limit (FFF5) • Floor limit(9F1B) • For Discover: Transaction limit (FFF1) • CVM limit (FFF5) • Floor limit (9F1B) • Risk flags (FFF4) • If user-defined TLV Group is used, user should set these above TLVs in the user-defined Group.
NEO 2 Interface Developer’s Guide created by individual payment associations and reader manufacturers for specific functions. Proprietary TLVs must be handled in a manner that isolates them from other proprietary TLVs. For a complete listing of all ID TECH proprietary tags and their meanings, you should consult the document P/N 80000503-001, ID TECH TLV Tag Reference Guide.pdf, available on the TECH Knowledge Base.
NEO 2 Interface Developer’s Guide 4.3.1. Group Configuration Tags The following table contains TLVs that are configurable using the Set Configuration (04-00) command. These TLVs are global within in the reader. If a Group does not define some of these TLVs, the values in Group 0 will be used. Group Configuration TLVs Length Data Object Name and Description...
Page 72
NEO 2 Interface Developer’s Guide Length Data Object Name and Description Format Default Value (Bytes) Transaction Category Code This is a data object defined by MasterCard which indicates 9F53 the type of transaction being performed, and which may be used in card risk management. Terminal Transaction Qualifier (TTQ) Determine the type of transaction (MSD, qVSDC, and 9F66...
Page 73
NEO 2 Interface Developer’s Guide Visa Reader Risk Flags Byte 1 Meaning (0 = disable, enable) Status Check Byte 2: Meaning (0 = disable, 1 = enable) Transaction Limit Check Required Limit Test Terminal Floor Limit Check Cash Transaction Reader Risk (RR) DFEE35...
Page 74
NEO 2 Interface Developer’s Guide Length Data Object Name and Description Format Default Value (Bytes) amount check enabled) perform zero amount check For example: 0x00 = Zero Amount check disabled. 0x01 = Zero Amount check is disabled and online cryptogram required bit will not be checked. (default) 0x02 = Zero Amount check enabled.
Page 75
NEO 2 Interface Developer’s Guide Length Data Object Name and Description Format Default Value (Bytes) Application Capability (1:Support,0:Not Support) Byte 1: (Leftmost) Meaning (0 = disable, enable) Normal J/Speedy support ViVOpay Mifare for NFC Interac support support Google SmartTap Byte 2: Meaning (0 DFEE44 95 FF...
Page 76
NEO 2 Interface Developer’s Guide Length Data Object Name and Description Format Default Value (Bytes) DFEE73 Merchant Category Code 00 00 DFEE74 Discover Optional Features Poll Mode DFED18 Value = 00: Auto-Poll Value = 01: Poll on Demand Burst Mode Value = 00: Disable Burst Mode DFEE7E Value = 01: Enable Burst Mode...
NEO 2 Interface Developer’s Guide 4.3.2. Master Group Configuration TLVs Master use Group 80 as default Group. The Set Configurable Group command should be used to set the TLVs in this section. The following table in this section shows TLVs in American Express Configuration Group.
Page 78
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 80 Interface Device Serial Number 30 30 30 30 30 This is intended to be the serial number of the 9F1E terminal/POS. It is configured by the POS and is unique 30 30 to the terminal.
Page 79
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 80 Reader Contactless Transaction Limit - No On-Device 00 00 00 03 00 DF8124 When there is no on-device CVM available (for example, with a phone), then this is the transaction limit that will be used.
Page 80
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 80 Terminal Type Indicates the environment of the terminal, its 9F35 communications capability, and its operational control. UI Scheme Value = 00:ViVOpay User Interface (default) Value = 02:Visa Wave User Interface Value = 03:EMEA User Interface Note: LCD Messages need to be configured separately.
NEO 2 Interface Developer’s Guide Phone Message Table – Hard-Coded Default Value in Kernel PCI Mask PCII Value Message Identifier Status 000800 000800 20 (SEE PHONE) 00 (NOT READY) 000400 000400 20 (SEE PHONE) 00 (NOT READY) 000100 000100 20 (SEE PHONE) 00 (NOT READY) 000200 000200...
Page 82
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 2 Transaction Currency Code Indicates the currency code of the transaction according to ISO 4217. 5F2A 08 40 Make sure to use the same Transaction Currency Code for all configurable AIDs (default = US Dollars).
Page 83
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 2 Terminal Type Indicates the environment of the terminal, its communications capability, and its operational control. Environment Operational Control Provided By: Financial Merchant Cardholder Institution Attended Online only 9F35 Offline with online...
NEO 2 Interface Developer’s Guide These objects use proprietary tags. The use of these tags should be restricted to the serial interface. After the reader has returned an OK response frame, the terminal application should dispose of the tags to avoid conflicts with other proprietary TLVs. . IMPORTANT NOTE: Many two-bytes tags that begin 'FF' have been superseded with BER-legal three-byte tags.
Page 85
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 2 00 00 00 00 00 9F02 Amount Authorized (Numeric) 00 00 00 00 00 9F03 Amount Other (Numeric) 9F09 Application Version Number 01 00 Terminal Country Code 9F1A Indicates the country code of the terminal, 08 40...
Page 86
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 2 Transaction Currency Code Indicates the currency code of the transaction according to ISO 4217. 5F2A 08 40 Make sure to use the same transaction currency code for all configurable AIDs (default = US Dollars).
NEO 2 Interface Developer’s Guide 4.3.3. Interac Group Configuration TLVs Interac use Group C0 as default Group. The Set Configurable Group command should be used to set the TLVs in this section. The following table in this section shows TLVs in Interac Configuration Group.
Page 88
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 4 Terminal Type Indicates the environment of the terminal, its communications capability, and its operational control. Environment Operational Control Provided By: Financial Merchant Cardholder Institution Attended Online only 9F35 Offline with online...
Page 89
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 4 Reader Contactless Transaction Limit - No On-Device 00 00 00 01 00 DF8124 When there is no on-device CVM available (for example, with a phone), then this is the transaction limit that will be used.
NEO 2 Interface Developer’s Guide Default Value in Description Format Length Group 4 Terminal Capabilities Indicates the card data input, CVM, and security capabilities of the terminal Default = 9F33 00 48 E8 • No CVM required • SDA supported •...
Page 91
NEO 2 Interface Developer’s Guide AID Configuration TLVs Data Object Usage Description Format Length Name Identifies the application as described in Application 9F06 MAND ISO/IEC 7816-5. 5 – 16 Identifier (AID) This must be the 2 TLV in the data field. Automatically switch to Pass-Through Mode when PICC is unknown.
Page 92
NEO 2 Interface Developer’s Guide The TLV Group number that contains the characteristics for this AID This must be the 1 TLV in Data Field. For MasterCard PayPass and any applications TLV Group that use the combined selection feature, this FFE4 MAND Number...
Page 93
NEO 2 Interface Developer’s Guide This kernel identifier will be used if the card does not supply a valid Kernel ID (9F2A). If this tag is not provided, then default kernel identifiers will be used depending on the application: Configurable Card Application Default KID FFEA...
Page 94
NEO 2 Interface Developer’s Guide Name Length Value (Hex) Application (Hex) Name Kernel ID Transaction FFE9/DFEE54 02 00 80 02 01 80 02 09 80 02 17 80 02 Type Group List 20 80 Configurable Kernel FFEA/DFEE59 Identifier APPLICATION FFE2/DFEE4C Group FFE4/DFEE2D 9F06...
Page 95
NEO 2 Interface Developer’s Guide Name Length Value (Hex) Application (Hex) Name Kernel ID Transaction FFE9/DFEE54 05 00 D0 05 01 D0 05 09 D0 05 20 D0 Type Group List Configurable Kernel FFEA/DFEE59 Identifier APPLICATION FFE2/DFEE4C Group FFE4/DFEE2D 9F06 A0 00 00 03 24 10 10 Discover Expresspay Partial Selection...
NEO 2 Interface Developer’s Guide Name Length Value (Hex) Application (Hex) Name Exclude from FFE8/DFEE53 Processing APPLICATION FFE2/DFEE4C 4.4. 2-byte tags vs. 3-byte tags Some older versions of NEO firmware support the use of certain tags that are not compliant with BER-TLV format (the non-compliant tags are 2-byte tags that begin with 'FF').
Page 97
NEO 2 Interface Developer’s Guide 2-byte tag 3-byte tag Description FFF8 DFEE37 UI Scheme: Value = 00: ViVOtech User Interface Value = 02: Visa Wave User Interface Value = 03: EMEA User Interface. FFF9 DFEE1C LCD Font Size. FFFA DFEF29 LCD delay time(ms).
Page 98
NEO 2 Interface Developer’s Guide 2-byte tag 3-byte tag Description FFE9 DFEE54 Kernel ID transaction type Group List. Defines a Kernel ID, a transaction type and a group number (triplet). This TLV uses variable length data, three bytes at a time up to 24 bytes.
NEO 2 Interface Developer’s Guide 5. Card Application Selection 5.1. Combined Selection The selection of a card application may be based on a Kernel ID, transaction type, and other requirements. The Selection Features tag (FFE3 or DFEE4D) directs the flow through the selection logic in the firmware.
NEO 2 Interface Developer’s Guide 5.2. Partial Selection (FFE1 or DFEE4B) For some applications, an AID on the card may be longer than an AID configured in the reader. If partial selection is allowed, the AID will be considered a match if all of the AID configured in the reader matches the first portion of an AID in the card.
NEO 2 Interface Developer’s Guide 5.4. Terminal AID List (DFEF2C) The Terminal AID List Tag DFEF2C is associated with each Terminal AID set by the Load AID (04-02) command. This tag can control which Terminal AID is sent to the card if: the Select AID Command (with PPSE) returns a “Select AID Failed”...
NEO 2 Interface Developer’s Guide 6. Card Application Specific Behavior This section contains information specific to a particular card application. 6.1. MasterCard PayPass M/Chip The implementation of MasterCard M/Chip 3.0 follows the EMV mode transaction flow. This includes support for magstripe, but does not include data exchange functionality. The M/Chip 3.0 implementation incorporates new functionality for: Balance reading before and after GenAC •...
NEO 2 Interface Developer’s Guide 6.1.3. Torn Transaction Recovery A method exists for saving data from a torn transaction and matching up that transaction with a card that re-appears in the field to complete the transaction. Due to space limitations, a reader can retain a maximum number of two torn transaction records.
Page 104
NEO 2 Interface Developer’s Guide 6.1.7.2. SDA Transactions The combined length of the following data objects personalized to the card cannot be greater than 2400 bytes. Signed static application data • Static data used in data authentication (2048 bytes maximum) •...
NEO 2 Interface Developer’s Guide 7. Protocol Command Reference: Protocol 1 NOTE: Protocol 1 is deprecated. This section is provided for reference only and will eventually be eliminated. Protocol 2 is now the supported default protocol. For currently supported commands in Protocol 2, see Command Reference: Protocol 7.1.
Page 106
NEO 2 Interface Developer’s Guide Response Frame (ACK) Byte 0-8 Byte 9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Frame Tag Frame Type Command Status Data1 Data2 (MSB) (LSB) Tracks/ ViVOtech\0 ‘A’ Status DataLen Error Code Byte 12 is used for tracks or error codes, depending on the value of the status in Byte 1.
Page 107
NEO 2 Interface Developer’s Guide If the host fails to receive the track data, it can send a NACK frame to request the reader to resend the track data. To ensure that the reader resends the track data, the NACK frame must be received within 500ms after it sends the original track data.
NEO 2 Interface Developer’s Guide Status: OK (see Status Code Protocol DataLen: Number of data bytes in the data frame to follow. This does not include the frame tag, frame type and checksum bytes. Data Frame from ViVOpay Reader to PC (If the reader sent an ACK) Byte 0-8 Byte 9 Byte 10 …...
Page 110
NEO 2 Interface Developer’s Guide ViVOpay reader is receiving multiple data frames it expects each successive byte to arrive within the inter-frame timeout (see table below). If the data is not received within the timeout period listed, the ViVOpay reader times out and a timeout failure response is sent. Serial Commands Inter-Byte Inter-Frame...
NEO 2 Interface Developer’s Guide 7.2.1. Set CA Public Key (24-01) Protocol 1 Use this command to send data related to a CA public key to the ViVOpay reader for storing in a secure environment (Crypto Chip memory). The public key is uniquely identified by the <RID, Key Index>...
Page 112
NEO 2 Interface Developer’s Guide ACK Frame from ViVOpay Reader Byte 0-8 Byte 9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Frame Tag Frame Type Command Status Data1 Data2 CRC (LSB) (MSB) ViVOtech\0 ‘A’ Status Status: OK (or see Status Code Protocol NACK from ViVOpay Reader...
Page 113
NEO 2 Interface Developer’s Guide Digital signature algorithm to be used with CA CaPublicKeyAlgoIndicator Binary public key. Valid values: 01h: RSA 8-27 CaPublicKeyChecksum Binary CA public key checksum CA public key exponent. Value can be 3 (Len=1 Byte) or +1=65537=010001h (Len=3 Bytes). (PICC-based 28-31 CaPublicKeyExponent...
NEO 2 Interface Developer’s Guide Where p = DataLen2 > 0 If the second data frame is sent, then the data field in this frame contains the remaining CA public key related data. On receiving valid data, the reader sends it to the Crypto Chip for secure storage. The Crypto Chip checks the data and stores it in its memory.
NEO 2 Interface Developer’s Guide 7.2.3. Delete All CA Public Keys (24-03) Protocol 1 Use this command to instruct the ViVOpay reader to delete all previously set CA public keys from within secure storage in the Crypto Chip. The keys are deleted regardless of the <RID, Key Index>...
NEO 2 Interface Developer’s Guide 7.3. Miscellaneous Protocol 1 Commands 7.3.1. Set RF Error Reporting (17-03) This command allows the POS application to enable or disable RF error code reporting for the Get Full Track Data command. When RF error code reporting is enabled, any RF error codes are reported to the POS application through the ACK frame for the Get Full Track Data command.
NEO 2 Interface Developer’s Guide 8. Protocol Command Reference: Protocol 2 8.1. RTC (Real Time Clock) Commands 8.1.1. Set/Get 24-hr Self-Check Time (25-07) The Set/Get 24-hr Self-Check Time command instructs the ViVOpay reader to set a specific time for 24-hr self-check in Coordinated Universal Time. NOTE: If this command sets the 24-hr self-check time successfully, the device reboots after responding.
NEO 2 Interface Developer’s Guide 8.2.2. Get DRS Info (C7-3A) The Get DRS Info command retrieves information about hardware-related abnormal status and "tamper state" causes. Command Frame Byte 14 … Byte Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n-1 14+n...
Page 121
NEO 2 Interface Developer’s Guide Item SourceID SourceLen SourceData Tamper Switch 0x11 Bit 0: Tamper Switch 0 (0-Normal, 1-Error) Bit 1: Tamper Switch 1 (0- Normal, 1-Error) Bit 2: Tamper Switch 2 (0- Normal, 1-Error) Bit 3: Tamper Switch 3 (0- Normal, 1-Error) Bit 4: Tamper Switch 4 (0- Normal, 1-Error) Bit 5: Tamper Switch 5 (0- Normal, 1-Error) Bit 6: Tamper Switch 6 (0- Normal;...
NEO 2 Interface Developer’s Guide In Auto Poll Mode, the RF field is always active and the reader continuously polls for the presence of a contactless transaction. There is no requirement for the terminal to initiate a transaction. When a supported contactless MAGSTRIPE card is detected, the track data can be sent out on the magstripe interface (if the ViVOpay unit supports it) or retrieved using the Transaction Result (03-00 and 03-40) command.
Page 124
NEO 2 Interface Developer’s Guide There are three cases depending on the LCD Message index number: Indexes 00h to 07h correspond to messages that automatically display on the reader. • In most cases, the terminal does not trigger these messages. Indexes 08h to 0Bh are messages triggered by the terminal.
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) 07h: One long beep of 600 ms 08h: One long beep of 800 ms 00h: LED 0 (Power LED) 01h: LED 1 02h: LED 2 03h: LED 3 LED Number FFh: All LEDs Where the LEDs are numbered 0, 1, 2, 3 counting from the left.
NEO 2 Interface Developer’s Guide Command Frame (Set Source) Byte 15 Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 16 Header Tag Data Data Sub- Data Data & Protocol Command Length Length Command Byte1 Byte2 (LSB) (MSB)
Page 127
NEO 2 Interface Developer’s Guide Bit3 Bit2 Description Don’t use LCD Use LCD from ViVOpay reader Use LCD from external source Use LCD from both reader and external source Bit5 Bit4 Description Don’t use RTC Use RTC from ViVOpay reader Not allowed Not allowed Data Byte2 Definition:...
NEO 2 Interface Developer’s Guide If configured to use internal power LEDs, the ViVOpay reader’s power LEDs are used to indicate the reader’s power state. If configured to use external power LEDs, the power LEDs on the terminal are used. Note: Users can attempt to control the Power LED, but other UI behavior takes control, so attempting to manipulate the Power LED in non-Pass-Through Mode has no effect.
NEO 2 Interface Developer’s Guide Baud rate ( tag FE 02) • Boot up Message Enable (tag FE 03) • Serial Number (tag DF 89 1A) • UI Source Config (tag FE 05) • Analog parameters (tag FE FE) • 8.2.7.
NEO 2 Interface Developer’s Guide memory. If a TLV data object is incorrectly formatted, the reader stops processing the object. A single command may contain more than one TLV data object. The Set Configuration (04-00) command is the only mechanism for setting the values of global configuration parameters.
NEO 2 Interface Developer’s Guide When the reader receives this command, it returns the current values for all the parameters that can be set using the Set Configuration command. Each parameter is returned as a TLV data object. Floor limits for different AIDs are preceded by the TLV of the specific AID associated with that object.
NEO 2 Interface Developer’s Guide 8.2.11. Get Product Full Information (29-01) The Get Product Full Information command retrieves all module information for NEO 2.0 products, including Contact and Contactless card modules. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte14 Byte 15...
NEO 2 Interface Developer’s Guide Insert Card Counter Last 4: Remove Card Counter 8.2.19. Get Health Data from SCRP (29-30) The Get Health Data from SCRP command retrieves Health Data from SCRP Only. This command is always valid in SCRP. Command Frame Byte 0-9 Byte 10...
NEO 2 Interface Developer’s Guide 8.2.20. Set Baud Rate (30-01) The Set Baud Rate command instructs the reader to change its baud rate to the specified value. If the command frame is valid and the ViVOpay reader supports the specified baud rate, it returns an OK response and then switches to the specified baud rate.
NEO 2 Interface Developer’s Guide Note: If the new baud rate is set by sending the Set Temporary Baud Rate command, then after power up, the baud rate will return to the previous value. If the new baud rate is set by sending the Set Baud Rate command the baud rate will still be the new value then power Command Frame Byte 0-9...
Page 141
NEO 2 Interface Developer’s Guide Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 14+n Byte 15+n Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (LSB) CRC (MSB) Command Version (MSB) (LSB) ViVOtech2\0...
NEO 2 Interface Developer’s Guide 8.2.23. Set Cable Type (32-02) The Set Cable Type command sets the type of cable the reader uses; some readers have two types of cable, a so-called "long cable" and a "short cable." Some parameter calibrations differ according to cable type.
NEO 2 Interface Developer’s Guide 8.2.25. Get Serial Number (12-01) Note: This command can only be used after the reader has completed a Set Serial Number command. The Get Serial Number command instructs the ViVOpay reader to return the 15-digit serial number stored in its non-volatile memory.
Status ViVOtech2/0 Varies Varies Code Table Notes: Wi-Fi works as a TCP Server, port number 1025. Example: Set Wi-Fi configuration as: AP SSID: idtech-ShangHai-1 • AP Password: id64954196 • IP Address: 192.168.6.119 • Net mask: 255.255.255.0 • Gateway: 192.168.6.1 •...
NEO 2 Interface Developer’s Guide 8.2.34. Set System Language (D1-27) The Set System Language command sets the system language for NEO 2 products and currently supports English and Japanese. Command Frame Byte 14 – Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 18...
NEO 2 Interface Developer’s Guide Data Objects Data Field Length (bytes) Description 0x00: Bootup notification is disabled. Status 0x01: Bootup notification (raw) is enabled. 0x02: Bootup notification (frame) is enabled. If bootup notification is enabled, the firmware transmits its platform info string one time at the end of bootup.
NEO 2 Interface Developer’s Guide In addition to the above requirements: All AIDs must reference a TLV Group (in the TLV Group Number TLV) that already exists • Any AID with a Partial Select TLV must also include the Max AID Length TLV •...
NEO 2 Interface Developer’s Guide For M/Chip 3.0, Group 0 is not used. If you are configuring a group for M/Chip PayPass, then you should refer to the PayPass Group Tags. Otherwise, refer to the Group Configuration Tags. Command Frame Byte 14 …...
Page 154
NEO 2 Interface Developer’s Guide Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (LSB) CRC (MSB) Command Version (MSB)
NEO 2 Interface Developer’s Guide 8.3.4. Get Configurable Group (03-06) Use this command to return all TLVs associated the specified Configurable Group. A configurable Group Tag must be included as the ONLY TLV in this command. The response should contain all of the Tags associated with this configurable Group. Command Frame Byte 14 …...
NEO 2 Interface Developer’s Guide Note: For a PayPass group, if a TLV data item is not present in the Group then it will not be present in the data returned by this command. However, this does not mean that there is no value for this particular TLV in order to perform a transaction.
NEO 2 Interface Developer’s Guide 8.3.6. Delete Configurable Group (04-05) Use this command to delete a configurable Group. This means that this Group can no longer be used to load the parameters for a transaction. Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11...
NEO 2 Interface Developer’s Guide The only Data Objects that should be returned from the GAG command are Group Tags. These are the same as those itemized in the Group Configuration Tags table. The reader sends one or more frames with all the Group TLVs in it. Each Group begins with the Group Number TLV for the Group in question.
NEO 2 Interface Developer’s Guide 8.4.3. Contact Retrieve Application Data (60-01) This command returns the User AID parameters. The host must send AID in the command. The reader then returns all tags associated with that User AID in response. Command Frame Byte 14 …...
NEO 2 Interface Developer’s Guide Note: If a <TLV> format was error, status code is 0x05. • If AID List has full (MAX is 16), status code is 0x61. • Application Data List Example Data Value name Length Data (Byte) 9F01 Acquirer Identifier 56 49 53 41 30 30...
NEO 2 Interface Developer’s Guide 8.4.8. Contact Set Terminal Data (60-06) This command creates new terminal data according to the TLVs passed in. The terminal data is mandatory and seldom changes. It represents configuration data that usually gets set one time, in pre-production, and never changes thereafter.
NEO 2 Interface Developer’s Guide 9F35 Terminal Type Environment Financial Merchant Cardholder Change Institution Attended Major Online only Offline with online capability Offline only Unattended Major Online only Offline with online capability Offline only 9F40 Additional Terminal Capabilities Byte 1 Meaning Change Cash...
NEO 2 Interface Developer’s Guide Cardholder confirmation Major Preferred display order Multi language EMV language selection method Default DDOL Major Byte 3 Meaning Change Major (Revocation of Issuer Public Key Certificate (DF26)) Manual action when CA PK loading Major fails CA PK verified with check sum Major Bypass PIN Entry...
NEO 2 Interface Developer’s Guide TAC/IAC default process when Major unable to go online (Normal) Byte 6 Meaning Change Forced Online support Major Forced acceptance support Major Advices support Major Issuer referrals support Major Batch data capture Major Online data capture Major Default TDOL Major...
NEO 2 Interface Developer’s Guide 8.4.9. Contact Retrieve AID List (60-07) Use this command to return all AIDs list in the reader. This command may be used to verify configured AIDs in the reader. Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12...
NEO 2 Interface Developer’s Guide Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (LSB) CRC (MSB) Command Version (MSB) (LSB)
Page 179
NEO 2 Interface Developer’s Guide <TimeOut2> (2 bytes, unit is Second). Waiting time till “Authenticate Transaction” • command. <App Data> format is <TLV1> <TLV2> … <TLVn>. Refer to Transaction Data. • Transaction Data List (start command parameters) Data ID Value name Length (Byte) 9F02 Amount, Authorized(Numeric)
Page 180
NEO 2 Interface Developer’s Guide First Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data & Protocol Command Status Code Length Length Data CRC (MSB) (LSB) Version (MSB)
Page 181
NEO 2 Interface Developer’s Guide Data Item Length (bytes) Description Code (DFEE25) TLV Data Variable Output default Start Transaction Output TLV data list. If set tag DFEE1A, The TLV data will be follow list. TLV (DF30) Variable Track Data Source. (ViVOpay This tag is embedded in the ViVOpay Group tag.
Page 182
NEO 2 Interface Developer’s Guide Data Item Length (bytes) Description 0 1 0 0 = Visa FPE 0 1 0 1 = Verifone FPE 0 1 1 0 = TransArmor TDES-DUKPT Bits 4 to 6: Reserved Bit 7: 0 = No MAC Verification Data 1 = Has MAC Verification Data MSR Data Objects Length...
Page 183
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) TLV Encrypt Variable Encryption and Data Capture Information. Information Length: 1 or 2 (variable) (DFEE26) Values: Byte 1: Same as “Attribution” byte definition. Namely: Bits 4/3/0: Captured Data Type 0 0 0 = Contact Transaction 0 0 1 = Contactless Transaction / EMV 1 0 1 = Contactless Transaction / MSD 0 1 x = MSR Card...
NEO 2 Interface Developer’s Guide Default Start Transaction Output TLV Data List Data ID Value name Length (Byte) Track2 Equivalent Data <=19 <=10 5F34 PAN Sequence Number 5F20 Cardholder Name 2~26 5F24 Application Expire Date 9F20 Track2 Discretionary Data Var. 5F25 Application Effective Date 5F2D...
Page 186
NEO 2 Interface Developer’s Guide Data Objects <GoOnline><TimeOut> <Output Data List>-. <GoOnline>(1byte). 0x01 means force the transaction to go online, 0x00 means do not • force online (allow normal processing to occur via Terminal Action Analysis). <TimeOut> (2 byte, unit is Second).means terminal waiting time for host response •...
Page 187
NEO 2 Interface Developer’s Guide Second Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data & Protocol Command Status Code Length Length Data CRC (MSB) (LSB) Version (MSB)
Page 188
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) 0 1 1 0 = TransArmor TDES-DUKPT Bits 4 to 6: Reserved Bit 7: 0 = No MAC Verification Data 1 = Has MAC Verification Data TLV KSN Variable If encrypt disable, this tag is not present. (DFEE12) Contact Response Variable...
NEO 2 Interface Developer’s Guide 9F03 Amount, Other (Numeric) 9F07 Application Usage Control 9F08, 9F09 Application Version Number (Kernel) 9F0D, 9F0E, 9F0F Issuer Action Codes 9F0B Cardholder Name (Extended) 27 to 45 9F10 Issuer Application Data Var. up to 32 9F11 Issuer Code Table Index 9F12...
Page 190
NEO 2 Interface Developer’s Guide Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (LSB) CRC (MSB) Command Version (MSB)
Page 191
NEO 2 Interface Developer’s Guide Second Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data & Protocol Command Status Code Length Length Data CRC (MSB) (LSB) Version (MSB)
Page 192
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) 0 1 0 1 = Verifone FPE 0 1 1 0 = TransArmor TDES-DUKPT Bits 4 to 6: Reserved Bit 7: 0 = No MAC Verification Data 1 = Has MAC Verification Data TLV KSN Variable If encryption is not enabled, this tag is not present.
NEO 2 Interface Developer’s Guide 8.4.21. Contact Retrieve Transaction Result (60-13) After a contact EMV transaction is completed, you can use this command to get other TLVs. Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n...
Page 194
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) 0 1 = AES 1 x = Refer to "Extended Encryption Mode" further below. Bit 5: Attribution Byte Extension. 0 = Length of tag is 1 byte 1 = Length of tag is 2 bytes Bits 6/7: Encryption Status 0 0 = EMV off, MSR/MSD off 0 1 = EMV off , MSR/MSD on...
NEO 2 Interface Developer’s Guide 8.4.23. Contact Get ICS Identification (60-15) Contact Common EMV L2 approved configurations of certification are 1C, 2C, 3C, and 4C. This command can get identification of ICS terminal configuration in reader. Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11...
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) Variable If Online PIN DUKPT, PIN_DUKPT_KEY KSN – 10 bytes If Offline PIN, PIN_PAIRING_DUKPT_KEY KSN. This field is not present in the following cases: if device does not implement Pairing function, Offline PIN is Plaintext.
NEO 2 Interface Developer’s Guide 8.4.29. Reserve Commands for SCRP (19-10, 19-11, 19-12, 19-13) Commands 19-10 through 19-13 are used to Create Secure Channels for SCRP. 8.4.30. CVMApp Get Nonce from SCRP for Refresh Token (19-15) Use this command to get random numbers from ViVOpay SCRP. In SCRP, this command could be used as a first step of refresh secure enablement token.
NEO 2 Interface Developer’s Guide 8.5. Transaction Related Commands: Contactless 8.5.1. Activate Transaction Command (02-01 and 02-40) NOTE: 02-01 is a legacy command, applicable to non-encrypted transactions only. When EMV mode encryption is ON or MSR/MSD encryption is ON, if Data encryption Key is loaded, 02-01 will be disabled.
Page 209
NEO 2 Interface Developer’s Guide Note that in products that support multiple presentation modes (dip, tap, swipe), the 02-40 command can be used to kick off a transaction in any desired mode, with or without fallback support. To control the behavior, use the DFEF37 and DFEF3C tags, as follows: Length Description Example...
Page 210
NEO 2 Interface Developer’s Guide Activate Transaction Command Frame Data Format Length Data Item Description (bytes) Timeout Time in seconds that the reader waits for a card to be presented before timing out and returning an Error response. The reader will continue to poll for this amount of time if no card is found.
Page 211
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) 9F1A Terminal Country Code. (Typically, this has been configured in the reader – refer to Group Configuration Tags.) 9F21 Deprecated. NOTE: Do not attempt to use this tag in SRED devices. It may still work in non-SRED older products, but support for this tag in Activate Transaction will be dropped in future versions of firmware.
Page 212
NEO 2 Interface Developer’s Guide If the transaction cannot be completed successfully, the response contains an appropriate status code. The Response Frame contains more error information in the data field, for certain status codes. Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12...
Page 213
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) DE055 (Clearing If a Clearing Record (DE 055) field is available, then this field is 01h. Record) Present.) If there is no Clearing Record (DE 055) field, then this field is 00h. For MasterCard transactions, this field is always 0.
Page 214
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) Online PIN Block Transaction Date. Local date that the transaction was performed. (YYMMDD) Transaction Status Information. Transaction Type. Indicates the type of financial transaction, represented by the first two digits of ISO 8583:1993 Processing Code. 5F20 Cardholder Name.
Page 215
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) 9F1E Interface Device Serial Number. Unique and permanent serial number assigned to the IFD by the manufacturer. (Typically, this has been configured in the reader – refer to Group Configuration Tags.) 9F21 Transaction Time.
Page 216
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) 9F5D Available Offline Spending Amount (Balance). 9F6B Track 2 Data. Contains the data objects of the track 2 according to ISO/IEC <=19 7813, excluding start sentinel, end sentinel and LRC. 9F6C Card Transaction Qualifiers (Visa transactions only).
Page 217
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) DF8115 Error Indication. (MasterCard) Flags defining the error conditions from the transaction. Refer to the M/Chip PayPass specification. DF8129 Outcome Parameter Set (MasterCard). Contains the result of the transaction. Refer to the M/Chip PayPass specification.
Page 218
NEO 2 Interface Developer’s Guide Length Description Format (in bytes) 0 0 1 0 = TransArmor Algorithm 0 0 1 1 = Voltage Algorithm 0 1 0 0 = Visa FPE 0 1 0 1 = Verifone FPE 0 1 1 0 = TransArmor TDES-DUKPT Bits 4 to 6: Reserved Bit 7: 0 = No MAC Verification Data...
Page 219
NEO 2 Interface Developer’s Guide Activate Transaction Clearing Record TLVs Data Element Name Format Origin DE 055 Clearing Record (group tag) Binary, var Application Label ans1…16 var Card Application Interchange Profile Card DF name Card Terminal Verification Results: Reader Indicates results of various transaction processes. Transaction Date Terminal Transaction Status Information...
Page 220
NEO 2 Interface Developer’s Guide Data Element Name Format Origin 9F6E Form Factor Indicator Reader PayPass Third Party Data b5-32 var Reader 9F74 VLP Issuer Authentication Code Terminal 9F7C Customer Exclusive Data b1-32 var Reader DF30 Track Data Source Reader 0x0C –...
Page 221
NEO 2 Interface Developer’s Guide Data Field Length (bytes) Description Value of SW1 returned by the Card (SW1SW2 is 0000 if SW1 SW2 not available) Value of SW2 returned by the Card (SW1SW2 is 0000 if SW1 SW2 not available) RF State Code RF State Code indicating exactly where the error occurred in the Reader-Card transaction flow.
NEO 2 Interface Developer’s Guide If the Status Code being returned in the Response Frame is "Request Online PIN", the reponse data has the following format. Length Data Item Description (bytes) TLV Application PAN Variable up Application Primary Account Number (PAN) as a TLV object. to 12 Tag: 5A Format: cn variable length up to 19(10 bytes) 8.5.2.
Page 223
NEO 2 Interface Developer’s Guide Special Flow Record Format Byte # Field Application Flow Code This is the card application for which this special flow entry is being defined. This can be any of the Application Flows defined for the ViVOtech2 “Set Configurable AID” such as Discover D-PAS.
Page 224
NEO 2 Interface Developer’s Guide Steps to do Issuer Update Processing for Discover D-PAS: 1. Set TTQ Byte3 Bit8 “Issuer Update Processing supported” to be 1 2. Use “Activate Transaction Command (02-01)” to do normal Discover D-PAS transaction and reader will response transaction result and data. 3.
Page 225
NEO 2 Interface Developer’s Guide Data Field Length Outcome Parameter Set DF8129 Data Record (if any) FF8105 var. Discretionary Data FF8106 var. User Interface Request Data (if any) DF8116 According to reference [1], all objects listed below are to be added to the output buffer if they are present.
Page 226
NEO 2 Interface Developer’s Guide DF Name Issuer Code Table Index 9F11 Track 1 Data Track 2 Data 9F6B Discretionary Data is always included in an OUT signal. Discretionary Data for an EMV transaction may include the following objects, with a possible maximum length of 1009 bytes (61 TL, 948 V), ignoring the Data Storage elements.
Page 227
NEO 2 Interface Developer’s Guide Discretionary Data for a Mag-Stripe transaction may include the following objects, with a possible maximum length of 117 bytes (15 TL, 102 V): FF8106 Discretionary Data DF812A DD Card (Track 1) DF812B DD Card (Track 2) DF8115 Error Indication 9F6E...
NEO 2 Interface Developer’s Guide 8.5.3. Activate Transaction Response Frame Data Format For additional information on how data portions are encrypted, see “80000502-001, ID Tech Encrypted Data Output Formats” for details; available for download on the ID TECH Knowledge Base. Mode/Transaction Output Format Matrix—Non-SRED Device Contactless transaction Note: When MSR/MSD or EMV Encryption is enabled and Data encryption Key exists, Burst Mode is disabled (always OFF)
Page 229
NEO 2 Interface Developer’s Guide Poll Mode Encrypt Mode Burst Mode Command Output Format Poll On 02-01 Not Allow Demond 02-40 02-40 encrypted 03-00 Not Allow 02-01 Not Allow Auto Poll 03-40 02-40 encrypted 02-40 02-40 encrypted Success Transaction--Plaintext data field format (02-01) Length Data Item Description...
Page 230
NEO 2 Interface Developer’s Guide Successful Transaction -- Plaintext and Encrypted data field format for Contactless transaction (02-40) Length Data Item Description (bytes) Attribution Bit 4/3/0: Captured Data Type 0 0 0 = Contact Transaction 0 0 1 = Contactless Transaction / EMV 1 0 1 = Contactless Transaction / MSD 0 1 x = MSR Card Bit 2/1: Encryption Mode...
Page 231
NEO 2 Interface Developer’s Guide Success Transaction -- Plaintext and Encrypted data field format for MSR card (02-40) Length Data Item Description (bytes) Attribution Bit 4/3/0: Captured Data Type 0 0 0 = Contact Transaction 0 0 1 = Contactless Transaction / EMV 1 0 1 = Contactless Transaction / MSD 0 1 x = MSR Card Bit 2/1: Encryption Mode...
Page 232
NEO 2 Interface Developer’s Guide Failed Transaction-- Plaintext and Encrypted data field format (02-40) Length Data Item Description (bytes) Attribution Bit 4/3/0: Captured Data Type 0 0 0 = Contact Transaction 0 0 1 = Contactless Transaction / EMV 1 0 1 = Contactless Transaction / MSD 0 1 x = MSR Card Bit 2/1: Encryption Mode 0 0 = TDES...
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) Attribution Bit 4/3/0: Captured Data Type 0 0 0 = Contact Transaction 0 0 1 = Contactless Transaction / EMV 1 0 1 = Contactless Transaction / MSD 0 1 x = MSR Card Bit 2/1: Encryption Mode 0 0 = TDES 0 1 = AES...
Page 234
NEO 2 Interface Developer’s Guide always in Auto Poll Mode. When it detects a card, it carries out a transaction with the card. If the card is a supported contactless MagStripe card, the reader does not need any parameters from the terminal. If the card is a supported contactless EMV Card, then the reader uses the default terminal parameters (Group 0 TLVs) in the reader.
Page 235
NEO 2 Interface Developer’s Guide Note: ViVOcomm and DesFire cards return raw track data only. If there was an error in the Command Frame received then the response contains an appropriate status code. Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12...
Page 236
NEO 2 Interface Developer’s Guide If the Status Code is OK the response is different depending on the card application: Card Application Return Data PayPass MagStripe Track1/Track2 PayPass M/Chip Chip data plus other tags JCB QuicPay TLV Auth code and Track2 Equivalent data VSDC online application Track1/Trakc2 and VLP Issuer Auth code VSDC offline and qVSDC...
Page 237
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) TLV Track 2 Data Variable TDES/AES Encrypted Track 2 Data (if available) with Padding (0x00). If (MagStripe card) Track 2 is not available, this field is not present Tag: FFEE14 Format: ASCII (no null terminator) For MasterCard transactions, this field is not present.
Page 238
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) TLV MSR Variable Refer to “Enhanced Encrypted MSR Data Output Format” section of document Data 80000502-001, Encrypted Data Output Formats. This tag will wrap an entire MSR data (DFEE23) block. Consult “80000502-001, ID Tech Encrypted Data Output Formats” for details; available for download on the ID TECH Knowledge Base.
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) Bit 5: Attribution Byte Extension. 0 = Length of tag is 1 byte 1 = Length of tag is 2 bytes Bits 6/7: Encryption Status 0 0 = EMV off, MSR/MSD off 0 1 = EMV off , MSR/MSD on 1 0 = EMV on, MSR/MSD off 1 1 = EMV on, MSR/MSD on...
Page 240
NEO 2 Interface Developer’s Guide Command Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (LSB) CRC (MSB) Command Version (MSB)
Page 241
NEO 2 Interface Developer’s Guide Update Balance Format and Contents Length Data Item Description (bytes) Status Code 00: OK 01: NOT OK 02: (ARC response 89 for Interac) TLV Auth_Code Authorization Code as a TLV object. Tag: E300 Format: b8 TLV Transaction Deprecated.
NEO 2 Interface Developer’s Guide Update Balance Format and Contents When Status Not OK Data Field Length (bytes) Description Error Code Error Code giving the reason for the failure. See sub-section on Error Codes Value of SW1 returned by the Card (SW1SW2 is 0000 if SW1 SW2 not available) Value of SW2 returned by the Card (SW1SW2 is 0000 if SW1 SW2 not available)
NEO 2 Interface Developer’s Guide 8.6.2. Reset Torn Transaction Log (84-0E) The Reset Torn Transaction Log effectively erases the content of the torn transaction log and sets it back to an “empty” state. Normally, this function will only be used in certification scenarios where the torn transaction log must be put into a known state before performing a test.
Page 245
NEO 2 Interface Developer’s Guide Response Frame Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14-N Byte N + 1 N + 2 Header Tag & Data Data Comman Data Protocol Status Length Length (LSB) (MSB) Version (MSB) (LSB)
NEO 2 Interface Developer’s Guide 8.6.4. Data Exchange Request (02-58) Command and Data Exchange Response (02- These commands are used to do data exchange for MasterCard (MCL). Data Exchange Request command (02-58) is sent by device to the host, while Data Exchange Response command (02-09) is sent by the host to the device.
NEO 2 Interface Developer’s Guide EMV Key Manager Status Codes – Protocol 2 Status Code Status Operation was successful SAM Transceiver error – problem communicating with the SAM (see note below) Length error in data returned from the SAM Unknown Error from SAM Invalid data detected by SAM Incomplete data detected by SAM Reserved...
NEO 2 Interface Developer’s Guide When the status is successful (00h), the data field contains: Key Hash Algorithm (1 Byte) - 01h = SHA-1 • Key Encryption Algorithm (1 Byte) – 01h = RSA • Checksum – This Checksum is calculated with a concatenation of: •...
NEO 2 Interface Developer’s Guide Key Data is as follows: (all binary) Byte Name Length Description (bytes) Hash Algorithm The only algorithm supported is SHA-1. The value is set to 01h Public Key The encryption algorithm in which this key is used. Currently support Algorithm only one type: RSA.
NEO 2 Interface Developer’s Guide 8.7.5. Delete All CA Public Keys (D0-05) This command deletes all of the CA public keys. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Protocol Length Length Version...
NEO 2 Interface Developer’s Guide 8.7.7. List CA Public Key IDs or RID (D0-07) The following command retrieves a list of key indices that are installed for this RID. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 –...
Page 252
NEO 2 Interface Developer’s Guide The following subcommands are available for the Module Version command: Sub-command Description Get Processor Type Get Hardware Information Get Module Version Information Note: All other sub-commands for the Module version command have been deprecated. However, a 0x00 in the sub-command field will return the same result as a 20h sub- command.
NEO 2 Interface Developer’s Guide 8.8.1. Get Product Type (09-01) This command returns a "product type" value in a proprietary TLV. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Data Data Sub- Header Tag Command Length...
NEO 2 Interface Developer’s Guide If there is an error, the appropriate Status Code will be returned with an empty Data field (Data Length = 0000h). The format for module version information returned is “human readable”, consisting of fields that are separated by commas, and lines separated by carriage return and line feed characters: <module type>,<module name and spec.
NEO 2 Interface Developer’s Guide Four core language options are built in. Some of these are font-based; the others are ideogram-based. The ideogram language options are stored in flash as bitmaps. The other languages use fonts that have been stored in flash. For example, an English message is composed of multiple small bitmaps that represent different characters (for example, a “Thank You”...
NEO 2 Interface Developer’s Guide 8.9.2. Bitmap Conversion Completed by POS The reader expects to load a simplified version of the monochrome bitmap. While data is the same as in a standard bitmap, it must be converted to a format that the LCD hardware can use.
NEO 2 Interface Developer’s Guide The language module specifies both the language name and the Country Code. This is done because there are a number of languages (English, French, Spanish, and others) shared by multiple nations but the reader is intended to be operate in a particular country (such as Canada).
NEO 2 Interface Developer’s Guide POS. The intent is to facilitate automated updating through the POS. The POS can examine the existing language module currently stored, and then make appropriate decisions as to its use (for example, updating the module). How the Language Version Information is used by the customer cannot be defined or enforced.
NEO 2 Interface Developer’s Guide The data field is formatted as follows: Length Offset Data Description (bytes) Number of records returned Number of records remaining in the file Record size varies Revocation list records Each record is formatted as follows: Length Example Offset...
NEO 2 Interface Developer’s Guide Exception List Record Format Offset Field Length (bytes) PAN Length (Logical) PAN (right-padded with F if required) PAN Sequence Number An example of an exception list records returned by this serial command is given below (only the data section of the response is given), along with an explanation.
NEO 2 Interface Developer’s Guide 0x6014 • The following commands only work in Generic passthrough mode. To use them, first run 2C-01: Pass- Through Mode Start/Stop. • 0x0A02 • 0x0A03 • 0x0B01 0x0B02 • 0x2C02 • • 0x2C03 • 0x2C04 •...
NEO 2 Interface Developer’s Guide If the Command Frame contains any errors, or an error occurred while retrieving the parameters, then the reader sends a Response Frame with an appropriate Status. No data is returned in this case. Data Fields for the Response Frame (if Status = OK) Get PCD and PICC Parameters Data Field Data Length...
NEO 2 Interface Developer’s Guide The Data field contains data only if the Status Code is OK. Poll for Token Data Field for Response Frame (Status Code is OK) Data Field Length (bytes) Description Card Type of Card Found (or No Card Found). 00h None (Card Not Detected or Could not Activate) 01h ISO 14443-4 Type A 02h ISO 14443-4 Type B...
NEO 2 Interface Developer’s Guide To date, the only such supported dual application card is Card Type ‘07’, supporting ISO 14443 Type A, Mifare. For normal ViVOpay transactions (those not in Pass-Through Mode), these cards are automatically handled as ISO 14443 applications. In Pass-Through Mode, the POS controls the polling mechanism.
NEO 2 Interface Developer’s Guide Together Timeout1 & Timeout2 are used by the ViVOpay reader to calculate the Timeout (the time to wait for a PICC). Example: Enhanced Poll for Token Timeout Timeout1 Timeout2 Transaction Type Timeout Not Allowed 00 01 Timeout error 0 Seconds, 200 ms 00 01...
NEO 2 Interface Developer’s Guide ISO 14443 Type B (Does not support ISO 14443-4 protocol) ISO 14443 Type A and Mifare (NFC phone) Serial 0 or Variable Serial number (or the UID) of the PICC. Length depends on the card detected. If no Number card was detected, then a serial number is not returned.
NEO 2 Interface Developer’s Guide 8.13. Pass-through UI Control 8.13.1. LED Control (0A-02) This command switches the specified ViVOpay LEDs off or on only when ViVOpay is in Pass- Through Mode. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14,15 Byte 16...
NEO 2 Interface Developer’s Guide Sub-Command N Short Beeps • Single Long Beep of Specified Duration • Buzzer Control Data Field Data Field Length (bytes) Description Buzzer Parameter If Sub-Command is Short Beeps … Num Beeps = One Short Beep = 02h Two Short Beeps = 03h...
NEO 2 Interface Developer’s Guide If a valid Command Frame is received from the terminal, ViVOpay sends the APDU data to the PICC and receives its response. ViVOpay treats the PICC response as unknown data and does not try to interpret it. If the operation was successful, ViVOpay returns a Response Frame with an OK status and the response received from the PICC (APDU response).
NEO 2 Interface Developer’s Guide PCD Single Command Exchange Data Field Protocol 2 Data Field Length Description (bytes) PCD Command This is the command that is sent to the PCD Reader IC on the ViVOpay board. It tells the PCD what to do with the data sent with the command. The PCD commands supported and their values are given in the “PCD Cmd”...
NEO 2 Interface Developer’s Guide PCD Command Flags Table Bit# Flag Value Meaning When response from PICC Card has been received, end of response is signaled regardless of errors. Disable DF When response from PICC Card has been received, if there are (DF=Disturbance errors then the data received is flushed and we continue to Filter)
NEO 2 Interface Developer’s Guide If a valid Command Frame is received from the terminal, ViVOpay sends the data to the PICC (or carries out the appropriate action) and receives the PICC response. The ViVOpay reader treats the response as unknown data and does not try to interpret it. If there is no error, the reader returns a Response Frame with OK Status and the Data received from the PICC (if any).
NEO 2 Interface Developer’s Guide There are three cases depending on the LCD Message index number: Index 00h to 07h messages are directly display by the reader. Normally these • messages are not set through this command. Index 08h to 0Bh messages can be set by the terminal. •...
Page 292
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) 08: Insert or Swipe card (Use Chip & PIN) 09: Try Again(Tap Again) 0A: Indicate the custom to present only one card (Present 1 card only) 0B: Indicate the custom to wait for authentication/authorization (Wait) 80 MASK –...
Page 293
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) and LCD String2 Message are included, then the reserved field must be included, with LCD String1 Message appearing immediately after it. Note: The string must be null terminated (00) to indicate the end of the string.
NEO 2 Interface Developer’s Guide If the interface is Contactless Transaction, the response is as follows: If Poll for Token bit is disabled, no data is returned in the response. It is the same for the beep indicator. If Poll for Token bit is enabled, the response is the same as Poll for Token (2C-02) command..
Page 295
NEO 2 Interface Developer’s Guide 8.15.5.4. Use Independent Buzzer If the Use Independent Buzzer bit is set, the reader checks the Beep Indicator byte and calls the standard Buzzer Command (0B 01). If the bit is cleared, the reader checks the Buzzer byte and follows the Set Message Buzzer command (01 02).
NEO 2 Interface Developer’s Guide In this first call of the Enhanced Pass-Through command: Byte 0 instructs the reader to single-shot the Turn Antenna On Poll for Token • commands Byte 1 instructs the reader to display message #1 on the display •...
Page 298
NEO 2 Interface Developer’s Guide Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14,15 Byte 16 Byte 17 Header Tag Data Data Sub- & Protocol Command Length Length Data CRC (MSB) CRC (LSB) Command Version (MSB) (LSB) ViVOtech2\0...
NEO 2 Interface Developer’s Guide The Data field contains data only if the Status Code is OK. Table 6: Poll for Token Data Field for Response Frame (Status Code is OK) Data Field Length Description (bytes) Card Type of Card Found (or No Card Found). None (Card Not Detected or Could not Activate) ISO 14443 Type A (Supports ISO 14443-4 Protocol)
NEO 2 Interface Developer’s Guide NOTE: If Voltage Select value is 0, return value will contain an error code. • Default power could be all voltages. (Pass a value of 0x07.) • If do EMV L1 test, this value need change to 5V only. (0x01) •...
NEO 2 Interface Developer’s Guide 8.16.1. Mifare Authenticate Block (2C-06) This command allows the terminal to instruct the ViVOpay reader to authenticate the Mifare Card sector containing the specified block of data. The Key to be used is also specified by the terminal.
NEO 2 Interface Developer’s Guide 8.16.2. Mifare Read Blocks (2C-07) Use this command to read data from one or more blocks on the Mifare Card. The terminal can instruct the reader to read up to 15 blocks using this command. If more than one block is defined, then the reader automatically reads the starting block and the blocks that follow.
Page 306
NEO 2 Interface Developer’s Guide The values for these card types are defined in the “Poll for Token” command (consider only the lower 4 bits). Block Count: [Bit 3..0] This is the number of 16-byte blocks that are read. The Block Count cannot be greater than 15. This count does not include the skipped blocks if the card is a Mifare Standard card.
NEO 2 Interface Developer’s Guide a read is requested starting at Block 3 and Block Count is 2 then 16*2=32 bytes of data are returned consisting of Page # 3, 4, 5, 6, 7, 8, 9, and 10. Typically, Mifare Ultralight Cards are read by the ViVOpay reader, but are not written. This is because they are typically used for disposable applications such as ticketing.
NEO 2 Interface Developer’s Guide Mifare Write Block Data Field Data Field Length Description (bytes) Card & Block Count Card Type: [Bit 7..4] This can only indicate the following cards Mifare Type A (Standard) Mifare Type A (Ultralight) The values for these card types are defined in the “Poll for Token” command (consider only the lower 4 bits).
NEO 2 Interface Developer’s Guide ePurse Value Block Format A Debit function subtracts a given amount from a Mifare value block and stores the result in the same block. A Credit function adds a given amount to a Mifare value block and stores the result in the same block.
NEO 2 Interface Developer’s Guide Mifare ePurse Data Field for Backup Function Block Data Field Length (bytes) Description Backup Block Number Number of destination value block to be used for backup. Command Length Set to 01h or 08h, depending on whether a key type and key are supplied.
Page 313
NEO 2 Interface Developer’s Guide Return Code Length Description Block Number 00h-FFh 01h:Function block Authenticate fails 02h:Function block Read/Write fails Error Code 10h:Backup block Authenticate fails 20h:Backup block Read/Write fails Examples Application: Perform a Debit operation. Subtract 2000 from value block number 20H using last key specified.
Page 316
NEO 2 Interface Developer’s Guide Data[0]: 12h Tag1 Static Read a Byte Data[1]: Address of the data Data[0]: 13h Tag1 Static Write a Byte Data[1]: Address of the data Data[2]: Data to be written Data[0]: 14h Tag1 Static Write a Byte NE Data[1]: Address of the data Data[2]: Data to be written Tag1 Dynamic Read a...
NEO 2 Interface Developer’s Guide NFC Command Set Response Data List Command Response Data length Command Response Data Field Description Poll for a NFC Tag variable Data[0]: Card type 00h None (Card Not Detected or Could not Active) ISO 14443 Type A (Supports ISO 14443-4 Protocol) ISO 14443 Type B (Supports ISO 14443-4 Protocol) Mifare Type A (Standard) Mifare Type A (Ultralight)
NEO 2 Interface Developer’s Guide Individial commands in Felica command set are distingushed as to parameters in Data field. Felica Command Set List Command Data length Command Data Field Description Data[0]: 06h Data[1]: Number of services, value n. Read without Encryption variable Data[2]~Data[2n+1]: Service code list Data[2n+2]: Number of blocks, value m.
NEO 2 Interface Developer’s Guide For details on these fields, refer to the relevant Felica Lite/Lite-S Specifications. After receiving the Command Frame, the ViVOpay reader verifies the data and if the data is valid, it interacts with the Felica Lite/Lite-S card to do authentication. If this operation is successful, the ViVOpay reader sends a Response Frame with an OK Status.
Page 320
NEO 2 Interface Developer’s Guide Data[1]: Block number to be written Data[2]~Data[17]: Data to be written to Block After receiving the Command Frame the ViVOpay reader verifies the parameters. If the parameters are valid, then it reads/writes the data from/to the card. If the read operation is successful, the ViVOpay reader sends a Response Frame containing a Status of OK and the data that was read.
NEO 2 Interface Developer’s Guide 8.19.2. Entry Motor Boot Mode (2C-71) This command is used to set the boot mode or application mode of the motor board. (VP5300M Only) Command Frame Byte 14… Byte Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte14+n-1...
NEO 2 Interface Developer’s Guide If a BIN is found in a track data TLV or track data structure, that is also in the White List, all data for that transaction will be shown in clear text regardless of whether it is sensitive financial data or not.
NEO 2 Interface Developer’s Guide 8.20.4. Accessing SAMs in Pass- Thru Mode In Secure Pass-Thru SAM access is always clear data. The SAM will never contain sensitive financial data. Pass-Thru Commands Needing to be parsed for sensitive financial data: Cmd-Sub Name 2C-03 Exchange APDU...
NEO 2 Interface Developer’s Guide 8.20.7. Get Discretionary Data White List (2C-53) This command retrieves the Discretionary Data White List. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14,15 Byte 16 Byte 17 Header Tag Data Data Sub-...
NEO 2 Interface Developer’s Guide Only statically-declared log strings can be retrieved. Strings in the buffer declared as local variables cannot be retrieved. The host utility neolog.exe supports only serial and USB communication. 8.21.1. Initialize/De-initialize Logger (4C-01) Use this command to allocate a log count * 16 bytes memory for logger ring buffer. Command Frame Byte 0-9 Byte 10...
NEO 2 Interface Developer’s Guide 8.21.2. Set Logger Level (4C-02) Use this command to set the level that the log with equal or higher level shall be recorded in the logger ring buffer. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14...
NEO 2 Interface Developer’s Guide 8.21.6. Retrieve Log (4C-06) Use this command to output log saved in file and ring buffer. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Sub- Data Length Data Length...
NEO 2 Interface Developer’s Guide 8.22. Secure Communication Special Considerations for Secure Communications Take time to familiarize yourself with certain key differences in device usage that come into play when secure communications are required (as described below). 8.22.1. Burst Mode Burst Mode is not allowed when MSR/MSD or EMV encryption is enabled and Data encryption Key exists.
NEO 2 Interface Developer’s Guide 8.22.5. Padding of Data Fields Padding is usually required for the Cipher Block Chaining (CBC) algorithm, because Triple DES will require that data blocks be a multiple of 8 bytes long (whereas AES will require data blocks to be a multiple of 16 bytes).
Page 337
NEO 2 Interface Developer’s Guide Response Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Data Data length Protocol Command Status length CRC(MSB) CRC(LSB) (LSB) Version (MSB) See Status Code ViVOtech2\0 Table When Data Encryption is disabled, device will always respond plaintext data When Data Encryption is enabled, device will output data as follows:...
NEO 2 Interface Developer’s Guide 8.22.10. Get Data Encryption Enable Flag (C7-37) Note: This command is only supported in Non-SRED version devices, not supported in SRED version devices. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte15 Data...
NEO 2 Interface Developer’s Guide MSR Secure Parameters TLV objects Data Object Name Description Format Length DFEF04 MSR Encryption Option Encryption Option (Forced encryption or not) Bit 0: T1 force encrypt Bit 1: T2 force encrypt Bit 2: T3 force encrypt Bit 3: T3 force encrypt when card type is Bit 4: Hash option for non-PCI products;...
NEO 2 Interface Developer’s Guide MSR Secure Parameters TLV objects Data Object Name Description Format Length DFEF04 MSR Encryption Option Encryption Option (Forced encryption or not) Bit 0: T1 force encrypt Bit 1: T2 force encrypt Bit 2: T3 force encrypt Bit 3: T3 force encrypt when card type is Default value is 0x10.
NEO 2 Interface Developer’s Guide 8.23. Key Injection and Related Commands 8.23.1. Get DUKPT Key KSN Extended (81-0B) Use this command to get DUKPT Key KSN (Extended) according to Key Name Index and Key Slot. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13...
NEO 2 Interface Developer’s Guide Response Data Field Length Data Field Description (bytes) Key State Key State for the DUKPT key associated with the slot. Possible values for the key state are: 00h: Unused (Slot is supported but no key injected) 01h: Valid (A valid key is available in this slot) 02h: End of life (The key on their slot has reached end of life) FFh: Not Available (This slot is not supported)
NEO 2 Interface Developer’s Guide If the status code is other than 0x00 or 0x0A, such as 0x08 (timeout) or 0x0C (operation is not allowed), the Data Field shall be empty. 8.24.3. Status Codes Most commands have an immediate response, and a secondary response. If timeout occurs, the Second Response Status Code is 0x08 and the Data Field is empty.
NEO 2 Interface Developer’s Guide 8.24.5. Display Message and Get Encrypted PIN (62-01) For devices that allow PIN entry (such as VP3600), use this command to get encrypted PIN from device. NOTE: only one PIN attempt is allowed per 30-seconds for MKSK. Command Frame Byte 14 …...
Page 349
NEO 2 Interface Developer’s Guide First Response Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Data Data Protocol Command Status Code Length Length CRC (LSB) (MSB) Version (MSB) (LSB) See Status ViVOtech2\0 Codes After device receives this command, it will send ACK as the first response.
NEO 2 Interface Developer’s Guide Response Data Field Length Data Field Description (bytes) State State of get encrypted PIN process See “State Code in PIN and Key Entry Commands” PIN DUKPT Key KSN 20 or 24 If State byte isn’t 00h, this field is not present If MKSK mode, this field is not present Length is 20 bytes ASCII code to indicate TDES PIN DUKPT Key Length is 24 bytes ASCII code to indicate AES PIN DUKPT Key...
NEO 2 Interface Developer’s Guide Response Data Field Length Data Field Description (bytes) State State of get function key process See “State Code in PIN and Key Entry Commands” Function Key Value 1 or 2 If State byte isn’t 00h, this field is not present ASCII code Length of “B”, “C”, “E”, “*”...
Page 352
NEO 2 Interface Developer’s Guide Length Data Field Description (bytes) Display Message Display message signed by Private Key of Secure Message Certificate Signature using RSAPSS algorithm. Algorithm: Calculate 32 bytes Hash for “< Display Flag >< Key Max Length >< Key Min Length >< Display Message >” Using RSAPSS algorithm calculate the Hash to be 256 bytes Raw Data Using Private Key of Secure Message Certificate to sign the...
NEO 2 Interface Developer’s Guide 16 bytes Numeric Key Value is ASCII Code, padding with 0x46 (‘F’). <Key0><Key1><Key2>……<Key15>. Example: enter 7 numeric keys: 2 5 7 8 9 0 6, response data field is 16 bytes, padded with 0x46: 0x32 0x35 0x37 0x38 0x39 0x30 0x36 0x46 0x46 0x46 0x46 0x46 0x46 0x46 0x46 0x46.
Page 354
NEO 2 Interface Developer’s Guide Length Data Field Description (bytes) Display Message Signature Display message signed by Private Key of Secure Message Certificate using RSAPSS algorithm. Algorithm: Calculate 32 bytes Hash for “< Display Flag >< Amount Max Length >< Amount Min Length >< Display Message >”...
NEO 2 Interface Developer’s Guide 16 bytes Numeric Key Value is ASCII Code, padding with 0x46. <Key0><Key1><Key2>……<Key14>. Example: enter 7 numeric keys: 2 5 7 8 9 0 6, amount is 25789.06, response data field is 0x32 0x35 0x37 0x38 0x39 0x30 0x36 0x46 0x46 0x46 0x46 0x46 0x46 0x46 0x46 0x46.
Page 356
NEO 2 Interface Developer’s Guide Command Data Field Length Data Field Description (bytes) Function Flag 0x00 - Display numeric for numeric key on LCD 0x01 - Display “*” for numeric key on LCD 0x02 - Display numeric first and then masked by “*” on LCD 0x10 - Enable MSR &...
Page 357
NEO 2 Interface Developer’s Guide Second Response Frame Byte 14 … Byte Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 13+n 14+n 15+n Header Tag & Data Data Status Protocol Command Length Length Data CRC (LSB) Code (MSB) Version...
NEO 2 Interface Developer’s Guide Per 20 Seconds, if the Numeric length was not 0, the Numeric would be clear and will • display cursor on LCD. While you press numeric key, Device will increase display numeric on LCD if key length is •...
Page 359
NEO 2 Interface Developer’s Guide Byte No. Bit No. Flag Value Meaning Exp Date Do not request Exp Date Request Exp Date Do not request CSC Request CSC Request PAN Special processing flag. Standard processing. Special for Customer: 1. Encrypted PAN Only 2.
NEO 2 Interface Developer’s Guide 8.25. Improved Collision Detection 8.25.1. Issues with Standard Collision Detection This firmware supports the EMV Contactless Communication Protocol Specification. While the EMV specification defines collision detection, there are often physical constraints which prevent collision detection resolving within the timing limits outlined in the specification. For instance, multiple cards in the field cannot always be detected reliably.
NEO 2 Interface Developer’s Guide The six possible multiple card presentation scenarios are listed in the table below. Scenario Card Type Orientation A / B Stacked A / B Fanned A / A Stacked A / A Fanned B / B Stacked B / B Fanned...
Page 362
NEO 2 Interface Developer’s Guide Note: In this mode, if a collision is detected, the reader will interpret further ‘Communication Error’ or ‘Card Not Present’ events as being caused by collision. 8.25.2.2. Improved Collision Detection Enabling this mode disables Standard Collision Detection mode and changes reader behavior: 1.
NEO 2 Interface Developer’s Guide Example Assume a reader has enabled Improved Collision Detection with tag DF7F = 3. When two cards are placed within view of the reader, the following polling results are obtained. Polling Attempt Polling Result These results show that the first and second polling attempts are successful; but, the third polling attempt reports an EMV L1 collision (for example, a slower or weaker signal).
NEO 2 Interface Developer’s Guide 8.26.4. Retrieve Bootloader Related Information (C7-42) Use this command to get the detailed information of Bootloader FW. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag Data Data Sub-...
NEO 2 Interface Developer’s Guide 8.27. Firmware Downloader Command Processing Flow Firmware downloader commands must be sent to device in sequence as below. (1) Enter Bootloader process Power on Or reset Run firmware process Enter bootloader request Response error and refuse to enter bootloader Authentication Certification is valid?
Page 368
NEO 2 Interface Developer’s Guide (2) Bootloader process Power on Or reset Enter boot and init hardware Bootloader b is valid? Certificates tree is valid? Enter bootloader a Enter bootloader b Init hardware Load config data Bootloader Erase FW App and signature is bootloader codes valid?
NEO 2 Interface Developer’s Guide 8.27.1. Start Update Kernel Process (C7-11) This is the first command sent by host to open a firmware update process. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Data Data Header Tag &...
NEO 2 Interface Developer’s Guide The reader will wake up automatically upon card presentation, or when a command is issued. On waking up (after being triggered by card presentation), the reader will output 5669564F746563683200F10000008D1E. 8.28.2. Set Low Power Consumption Configuration (F0-04) This command is used to Enable/Disable some level Low Power Consumption function and the waiting timer of previous state.
NEO 2 Interface Developer’s Guide Note: If configuration of a product is: Current Name Timeout Low speed run Standby0 Standby1 Sleep The data: 04 00 1F 00 00 00 21 00 22 8.28.4. Get Battery Level (F0-02) This command is used to get the battery level. Note: Only VP3600 supports this command.
NEO 2 Interface Developer’s Guide 8.29. Set USB Sleep Configuration (F0-06) This command is used to Enable/Disable USB Sleep Configuration Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Byte 16 Header Tag & Data Data Sub-...
NEO 2 Interface Developer’s Guide 8.29.2. Wake-Up Notification (F1-00) The reader sends this data string if it wakes up from sleep/stop mode. This command is sent in RS232 mode only. The wake-up source must be the switch, NFC, or MSR. Command Frame Byte 0-9 Byte 10...
NEO 2 Interface Developer’s Guide 8.30.2. Get USB Power Mode Suspend Configuration (F0-09) This command is used to read out USB Power Mode Suspend Configuration Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag &...
NEO 2 Interface Developer’s Guide 8.31.3. Retrieve Detailed Key Info (81-0D) This command will retrieve the Key Block Header of the specific key index/slot provided in the Command Frame. Key Block Header contains information such as type of encryption (TDES/AES), Key Variant, and so on. Command Frame Byte 0-9 Byte 10...
NEO 2 Interface Developer’s Guide 9. Loyalty Functions NEO II firmware has built-in support for Apple Pay VAS (Value Added Services) and Google Smart Tap. Support for Google SmartTap functionality is described in a separate document, Google SmartTap 2.1 in ViVOpay Devices.pdf, available for download on the ID TECH Knowledge Base.
Page 389
NEO 2 Interface Developer’s Guide Set all configurations for SmartTap 2.1 Set Long term private key 56 69 56 4F 74 65 63 68 32 00 C7 62 01 20 A7 82 BE 58 B2 FB E0 51 D0 CE 53 48 88 D0 4A AB C5 22 37 D3 E2 A7 3A 41 C0 BB C1 BD 71 1B B9 F6 AE 95 A6 14 45 8A 9D 11 88 00 5C B8 20 0F 56 8F ED C8 3B 1D A9 1F BD 0F F4 92 4E 72 D7 1C A7 91 29 44 84 79 FE BA CE 55 DF 9A 2B AC 6A 40 BC 1A 1A 90 F2 18 1F 0D 5A 1E 04 0D CB 5D 90 33 3E 1A...
NEO 2 Interface Developer’s Guide 9.2. ApplePay VAS Functionality NEO II firmware has built-in support for Apple Value Added Services Protocol (hereinafter called Apple VAS). For detailed information on how Apple VAS works, consult Apple's developer site. The following discussion assumes that you are familiar with the basic concepts behind ApplePay VAS.
Page 392
NEO 2 Interface Developer’s Guide Byte 1: RFU Byte 2: Terminal Type Byte 3: RFU Byte 4: Terminal Mode See table further below. 9F22 ApplePay Terminal Application Required Hard-defined as 01.00 for now. Version Number 9F2B ApplePay VAS Filter Optional If not provided filtering will not be performed by the mobile.
Page 393
NEO 2 Interface Developer’s Guide Byte 3: RFU b7 b6 b5 b4 b3 b2 b1 Description RFU, Bits b8-b1 shall be set to 0 Byte 4: Terminal Mode b7 b6 b5 b4 b3 b2 b1 Description Terninal in VAS App OR Payment Mode Terminal in VAS App AND Payment Mode Terminal in VAS App Only Mode Terminal in Payment Mode Only...
Page 394
NEO 2 Interface Developer’s Guide Using firmware commands: Note: Some firmware examples use command 02-01, but 02-40 (encryption-enabled Activate Transaction) may also be used. VAS Only Activate Transaction (02-40) 56 69 56 4F 74 65 63 68 32 00 02 40 00 2D 30 9F 02 06 00 00 00 00 00 01 9C 01 00 FF EE 06 18 9F 22 02 01 00 9F 26 04 00 00 00 02 9F 2B 05 01 00 00 00 00 DF 01 01 01 DF ED 49 01 01 33 FE Command Sent Breakdown:...
Page 395
NEO 2 Interface Developer’s Guide 00 FF – Data length • D1 – Attribution byte • FF EE 12 0A 62 99 49 01 2C 00 04 60 01 12 - KSN tag (FFEE12), length • 0x0A, KSN bytes. Transaction is encrypted. FF EE 06 - Apple Pay Vas container •...
NEO 2 Interface Developer’s Guide actually performed. Only when both VAS and payment transactions are performed will you see both transaction responses in the same returned data record. The Payment transaction response will not change. The VAS transaction response will be embedded in the proprietary ApplePay VAS Container TLV (0xFFEE06).
Page 397
NEO 2 Interface Developer’s Guide o 9F25 nn – Merchant ID b o 9F2A nn – Mobile Token o 9F27 nn – VAS Data o 9F25 nn – Merchant ID n o 9F2A nn – Mobile Token o 9F27 nn – VAS Data xx xx –...
NEO 2 Interface Developer’s Guide o 9F27 nn – VAS Data o 9F25 nn – Merchant ID n o 9F2A nn – Mobile Token o 9F27 nn – VAS Data xx xx – CRC for entire response • 9.2.2. Set Merchant Record (04-11) Command Frame Byte 14 …...
A9 39 D2 A6 85 1D FC 60 2E A7 98 F7 - Merchant ID (this is the SHA-256 hash of the IDTech Pass having the name "pass.com.apple.wallet.vas.prodtest") 00 - Length of VAS URL. In this example, none was provided.
Page 400
NEO 2 Interface Developer’s Guide Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte15+n Byte 14+n-1 Header Tag & Data Data Protocol Command Status length length Data (MSB) (LSB) Version (MSB) (LSB) Status See Data ViVOtech2\0 Code Table...
NEO 2 Interface Developer’s Guide 10. Peer To Peer Functionality Peer To Peer functionality (which can only be used in Pass-Through mode) allows the sending and receiving of NDEF messages to/from a mobile device. NDEF (NFC Data Exchange Format) for more information about NDEF payload composition.
Page 402
NEO 2 Interface Developer’s Guide Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 14+n-1 Header Tag Data Data & Protocol Command Status length length Data (MSB) (LSB) Version (MSB) (LSB) See Data...
NEO 2 Interface Developer’s Guide MSR Equivalent Data Function Proprietary tags DFEF4B, DFEF4C, and DFEF4D provide a way for track data (and optionally, PAN data) to be supplied in conjunction with an EMV transaction, with or without sentinels, in a form similar to the form track data would take in a conventional MSR transaction. DFEF4C and DFEF4D TLV will only appear in the response of 02-40/03-40, 60-10, 60-11, and 60-12 commands for successful transaction.
Page 404
NEO 2 Interface Developer’s Guide You can use the top bit of the first byte of DFEF4B to control search behavior: If the bit is ON, all data elements requested will be provided (if they exist). If the bit is OFF, only the first element found will be retrieved and placed in DFEF4D.
NEO 2 Interface Developer’s Guide Track 1 requested (bit 6 = 1). Includes first instance of: Tag 56 = Track 1 Equivalent Tag 5F21 = Track 1, identical to the data coded Track 2 requested (bit 5 = 1). Includes first instance of: Tag 57 = Track 2 Equivalent (converted to alpha numeric format) Tag 9F6B = Track 2 Data Tag 5F22 = Track 2, identical to the data coded...
NEO 2 Interface Developer’s Guide Tag DFEF4D If tag DFEF4B is set, tags DFEF4D will appear in transaction output. This variable-length tag contains track and/or PAN data, encrypted. The exact contents will vary depending on values supplied previously in DFEF4B (see above). The track data will present track data if it is a MSD transaction, present track Equivalent data if it is a EMV transaction.
NEO 2 Interface Developer’s Guide 12. Sample Scenarios and Frame Flow 12.1. Contactless MagStripe Transactions in Auto Poll Mode For a contactless MagStripe transaction, the reader does not require any setup data from the terminal. 1. Command: Set Poll Mode (Auto Poll) Sub- DLen DLen...
Page 408
NEO 2 Interface Developer’s Guide 3. Command: Get Transaction Result Sub- DLen DLen Header Data (MSB) (LSB) (LSB) (MSB) 56 69 56 4F 74 65 63 68 32 DLen = 0 ViVOtech2\0 None decimal Response: OK, No Track Data, No Clearing Record (No Transaction) Status DLen DLen...
NEO 2 Interface Developer’s Guide Track1 Data T2Len= Track 2 Data 2272411113 37 (dec) “5413123456784808=0508101” Data (MSB) (LSB) 39 36 30 37 39 39 37 32 34 32 31 38 33 Track 2 Data Clearing Record 9607997242183 Not Present Contactless MagStripe card was presented and accepted by the reader before the Transaction Result command.
Page 410
NEO 2 Interface Developer’s Guide Response: Error (Timeout); No Card Detected. Status DLen DLen Header Data Code (MSB) (LSB) (MSB) (LSB) 56 69 56 4F 74 65 63 68 32 Time DLen = 0 ViVOtech2\0 None decimal Reader is not polling for cards. 3.
NEO 2 Interface Developer’s Guide Data (MSB) (LSB) 39 36 30 37 39 39 37 32 34 32 31 38 33 Track 2 Data Clearing Record “607997242183 Not Present 12.3. EMV (M/Chip) Transaction in Poll on Demand Mode The correct CA public keys required by the Cards that is read have already been set up using the Key Management Commands (refer to Management).
Page 412
NEO 2 Interface Developer’s Guide Response: OK Status DLen DLen Header Data Code (MSB) (LSB) (MSB) (LSB) 56 69 56 4F 74 65 63 68 32 DLen = 0 ViVOtech2\0 None decimal Reader is still not polling for cards. Note: These parameter values may not apply to all cards. The terminal has to make sure that correct values have been defined for the parameters based on card requirements otherwise a transaction fails.
NEO 2 Interface Developer’s Guide 13. Appendix A.1: User Experience Illustration Following are list of messages and the message flow for one user experience. Summary of LCD Messages NOTE: For the complete list of possible messages, see Appendix A-10. User Interface States ViVOtech User Experience Idle 00: Idle Message (Welcome)
NEO 2 Interface Developer’s Guide 14. Appendix A.2: Audible User Interface Some readers do not have an LCD display. In that case, audible tones and lights indicate the status and when an action must be taken. The following table describes the audible user interface tones. Table 82: Definition of Audible Tones Tone Name Sound...
NEO 2 Interface Developer’s Guide 15. Appendix A.3: Configurable AID Usage Examples These examples show the communications between a Configurable AID capable reader and an attached PC simulating a POS. Disable System AID From POS → 56 69 56 4F 74 65 63 68 32 00 04 04 00 0A 9F 06 07 A0 00 00 00 04 10 10 25 59 From Reader ←...
NEO 2 Interface Developer’s Guide 16. Appendix A.4: Preparing Bitmaps for Use with ILM The serial ILM commands for language support require bitmap images to display messages. In place of 22 text string messages, ILM commands use 22 bitmap images to display messages. These bitmaps are downloaded to the reader as described in Download ILM Message Command.
Page 421
NEO 2 Interface Developer’s Guide Inverting the Color Compared to a regular monochrome bitmap, the image used with ILM commands has inverted color. White areas of the bitmap must be black and black areas white. To invert the color, each bit of a bitmap image must be reversed by performing a NOT operation on each byte of image data.
Page 422
NEO 2 Interface Developer’s Guide data. Thus, in this case, the cropping would begin at the Byte 1 (that is, the Column 1 boundary). The following diagram shows how the header parameters are derived. 0 1 2 ......14 15 The Row Number refers to the number of rows, each of which is a row of pixels.
Page 423
NEO 2 Interface Developer’s Guide Next reverse the bits. [Bitmap Data = (BB FF FF FF) (CC FF FE FF) (DD FF FE FF) (EE FF FF FF)] Analyze the image. If the image needs to be cropped for white space reduction, do it now. Calculate positioning parameters and generate the ILM header.
NEO 2 Interface Developer’s Guide 17. Appendix A.5: Default Configuration ViVOpay readers are set to operate out of the box for many applications. This appendix describes the default operating mode and default TLV data object values that have not been previously covered.
Page 425
NEO 2 Interface Developer’s Guide To configure Burst Mode, refer to the Global Configuration Tags table, tag FFF7h. The magstripe reader itself always operates in Burst Mode, regardless of the Burst Mode settings defined in the EMV parameters, meaning that any swipe at the magstripe reader will result in a payload packet immediately being sent across the serial interface.
NEO 2 Interface Developer’s Guide 17.1. Default Message Index The LCD message set applied by the ViVOpay unit depends on the User Interface (UI), tag DFEE37 (or the deprecated FFF8). As previously defined, the default UI is ViVOpay, and when setting a new UI (Visa Wave or EMEA) the associated message index must be loaded.
NEO 2 Interface Developer’s Guide 18. Appendix A.6: VP5300 Commands A number of commands, outlined below, apply specifically to the VP5300 reader. 18.1. Initiate PINPAD Symmetric key loading (63-01) Host can send the device this message to initiate "PIN pad pairing" (assuming a compatible PIN pad is connected).
NEO 2 Interface Developer’s Guide 18.4. Set Key ID (63-04) Set Key ID associated with a Master Key set Command Frame Byte 14 – Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte Byte 15+n 14+n 14+n-1 Header Tag Sub- Data Length...
NEO 2 Interface Developer’s Guide 19. Appendix A.7: VP6800 Commands A number of commands, outlined below, apply only to the VP6800. 19.1. VP6800 Display Elements Screen • o Pre-defined by user Customizable Features • o Text Area Position Width ...
NEO 2 Interface Developer’s Guide Byte Description Screen theme ID (Reserved, should be 0x00); Byte 0 screen theme should be re-defined in firmware. The VP6800 and host have pre-loaded screen theme IDs. Byte 1 Number LCD UI Table-2 Object ID Format Object ID Description Component ID...
Page 441
NEO 2 Interface Developer’s Guide Command Frame Byte 14 … Byte Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 13+n 14+n 15+n Header Tag & Data Data Data Sub- Protocol Command Length Length Command (LSB) (MSB) Version (MSB) (LSB)
NEO 2 Interface Developer’s Guide 19.3.3. Add Object to Screen (61-07) This command adds an object to the screen. However, the screen does not display new objects until calling Show Screen (61-05) to update the screen. Note: Before sending this command, first create the screen with the Create Screen (61-0A) command.
Page 446
NEO 2 Interface Developer’s Guide Note: For images: image files are read from NANDFlash. Only JPEG files without orientation Exif • info and width <= 272, height <= 480 are supported; otherwise the VP6800 rejects this command. Exif (exchangeable image file format): a standard that specifies the formats for images, •...
Page 450
NEO 2 Interface Developer’s Guide Data Format Data Item Length (bytes) Description Screen Name String Screen Name No longer than 32 bytes ASCII string, terminated by 0x00 Object Name String Object Name No longer than 32 bytes ASCII string, terminated by 0x00 0 –...
Page 452
NEO 2 Interface Developer’s Guide No longer than 32 bytes ASCII string, terminated by 0x00 Parameter Var. This field only exists for invisible button: 00: short press/ 01:long press Note: 1. The button callback will be sent by previously communicated I/F. 2.
NEO 2 Interface Developer’s Guide 19.3.6. Remove Object from Screen (61-09) This command removes an object from a screen. However, the screen does not display removed objects until calling Show Screen (61-05) to update the screen. Command Frames Byte 14… Byte Byte Byte Byte 0-9...
Page 454
NEO 2 Interface Developer’s Guide Currently, Screen IDs are limited to 50 per screen theme. Command Frames Byte 14 ~ N Byte Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte N+2 Data Data Header Tag & Command Sub-Command Length Length...
NEO 2 Interface Developer’s Guide 19.3.8. Destroy Screen (61-0B) This command removes a Screen ID from firmware. After removing the screen, the user cannot operate that Screen ID anymore without getting the Screen ID again by sending a Create Screen (61- 0A) command.
NEO 2 Interface Developer’s Guide 19.3.9. Get Current Screen Name (61-0C) This command allows a user to check the currently live screen’s name. Command Frames Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Sub- Data Length Data Length...
NEO 2 Interface Developer’s Guide 19.3.10. Clone Screen (61-0D) This command creates a new screen instance in the firmware that is cloned from the specified screen and sends out a screen name accordingly. After the screen is cloned, the user can send a Show Screen (61-05) command or Add/Update Object to Screen (61-07/08) command using the cloned screen’s name.
NEO 2 Interface Developer’s Guide 19.3.11. Store Screen Info (61-0E) This command stores all current screen information from RAM into flash. Command Frames Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Sub- Data Length Data Length...
NEO 2 Interface Developer’s Guide 19.3.22. Set Backlight (83-2F) This command set’s the VP6800’s backlight level. If the level is set to >100%, the command will be rejected; if the level is set to <10%, backlight level will be set to 10%. Command Frames Byte 0-9 Byte 10...
NEO 2 Interface Developer’s Guide Length (bytes) Description 2-128 File name including subdirectory, zero-terminated ASCII Number of total file data bytes, zero-terminated ASCII Flag to indicate the end points of file transmission, zero-terminated ASCII 0 = Neither first or last packet 1 = Last packet: commits all file transfers received since packet with first packet flag.
Page 469
NEO 2 Interface Developer’s Guide Command Data The command data is a zero-terminated ASCII string specifying the directory and contents to be listed. To retrieve all sub-directories and files below the specified directory, add the recursive directory option before the directory name. Length (bytes) Description Zero-terminated ASCII hex flags...
NEO 2 Interface Developer’s Guide Test Command Data Function Length (bytes) Comment Field Description Read Log an SD Card must To enable log file function, Clear Log be inserted. Log file function is disabled when the unit powers on; use parameter 11h to Disable log enable logging.
NEO 2 Interface Developer’s Guide 19.3.35. Start Screen Saver (61-50) The command starts the screen saver, which is disabled when the touchpad is touched, the customize screen is shown, or a transaction is started. The device reads the video from the inserted SD Card;...
NEO 2 Interface Developer’s Guide 19.3.39. QR Code Scan Stop (61-42) This command is only available for a VP6800 with a camera (PCI Standard version). Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag &...
Page 481
NEO 2 Interface Developer’s Guide Response Frame Byte 14 … Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14+n Byte 15+n Byte 13+n Header Tag & Data Length Data Length Protocol Command Status Code Data CRC (MSB) CRC (LSB) (MSB) (LSB)
Page 482
NEO 2 Interface Developer’s Guide 19.3.40.1. Use Cases for Taking Photos with the Camera USDK Camera/UI Module start command, timeout start camera continue start timeout timer Press button in screen, thenTake a photo & display 5 seconds Press button in screen, then Take a photo & display 5 seconds ……...
NEO 2 Interface Developer’s Guide 19.3.41. Camera Take Photo Stop (61-44) This command is only available for a VP6800 with a camera (PCI Standard version). Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag &...
NEO 2 Interface Developer’s Guide Status Code Status Need encrypted firmware (apply in boot loader only) Secure interface is not functional or is in an intermediate state. Data field is not mod 8 Pad 0x80 not found where expected Specified key type is invalid Could not retrieve key from the SAM (InitSecureComm) Hash code problem Could not store the key into the SAM (InstallKey)
Page 486
NEO 2 Interface Developer’s Guide Object Name 49 6D 61 67 65 31 Image1 Component ID Image Display object at the horizon center of specified y, Alignment while x is ignored x-coordinate 00 00 y-coordinate 14 00 6C 6F 67 6F 2E 6A 70 String logo.jpg Command:...
Page 487
NEO 2 Interface Developer’s Guide Component ID Large Button Display object at center of screen, x, y are Alignment both ignored String 42 75 74 74 6F 6E 31 Button1 Command: 56 69 56 4F 74 65 63 68 32 00 61 07 00 23 53 63 72 65 65 6E 31 00 4C 61 72 67 65 20 42 75 74 74 6F 6E 00 01 02 00 00 00 00 42 75 74 74 6F 6E 31 00 A2 39 Response:...
Page 488
NEO 2 Interface Developer’s Guide 7. Command: 56 69 56 4F 74 65 63 68 32 00 61 06 00 00 21 F9 a. If the large button (Button1) is implemented correctly and clicked, the device sends this message: 56 69 56 4F 74 65 63 68 32 00 61 00 00 19 00 00 01 00 53 63 72 65 65 6E 31 00 4C 61 72 67 65 20 42 75 74 74 6F 6E 00 CC 8.
Page 494
NEO 2 Interface Developer’s Guide Supported Customer- Limitation Used Components Only JPEG files without orientation Exif(*) info and width <= 272, height <= 480 • is are supported. Maximum number of image components in each screen is 20. • Maximum characters of each image name is 32 bytes. •...
NEO 2 Interface Developer’s Guide 20. Appendix A.8: White List Commands for VP3300 Family For historical reasons, the VP3300 family (which includes the UniPay 1.5, UniPay III, and BTPay Mini, in addition to VP3300 series and VP8300 products) has its own White List commands, distinct from the 2C-50 command (and related commands) used in other NEO-firmware products.
Page 498
NEO 2 Interface Developer’s Guide Length Data Item Description (bytes) BIN Exclusion::= Set bininfo::= Sequence binSetName = (PRINTABLESTRING) -- 0 if no name LowBoundinfo::= Sequence First 8 digits= (INTEGER) – bin Last 8 digits=(INTEGER) – bin HighBoundinfo::= Sequence First 8 digits= (INTEGER) – bin Last 8 digits=(INTEGER) –...
Page 499
And we get: SEQUENCE(2 elem) INTEGER1 SET(3 elem) SEQUENCE(3 elem) PrintableString IDTECH TEST SEQUENCE(2 elem) INTEGER 99999999 -- first 8 digits of low bound INTEGER 99990000 -- last 8 digits of low bound SEQUENCE(2 elem)
NEO 2 Interface Developer’s Guide 20.1.2. Clear MSR White List (91-11) This command used to clear MSR White List. Command Frame Byte 0-9 Byte 10 Byte 11 Byte 12 Byte 13 Byte 14 Byte 15 Header Tag & Data Length Data Length Protocol Command...
Page 501
NEO 2 Interface Developer’s Guide White List Fomat: Length Data Item Description (bytes) Command Data <Length Whitelist ASN.1 BLK> is 2 bytes, format is LenL LenH, it is length of Length <Whitelist ASN.1 BLK>, less than 512 <Whitelist ASN.1 BLK> is N bytes, it is ASN.1 Block data for White List for Gift Card.
NEO 2 Interface Developer’s Guide 21. Appendix A.9: NEO 2 Contactless Groups and Default TLVs The following table contains tags that are preconfigured within Group 0. Table 84: NEO2 Group 0 default tags Description Format Length Default Value DFEE2D Group Number / Fallback Group Transaction Type 5F2A Transaction Currency Code...
NEO 2 Interface Developer’s Guide Description Format Length Default Value DF811B Kernel Configuration 9F6D Magstripe Application version number 00 01 DF811E Magstripe CVM Capability CVM Required DF812C Magstripe CVM Capability No CVM Required DF811C Max Lifetime of Torn Transaction Log Record 00 00 DF811D Max Number of Torn Transaction Log Records...
NEO 2 Interface Developer’s Guide 22. Appendix A.10: NEO II Default System AIDs The following table contains the default system AIDs for NEOII. Table 91: NEOII Default System AIDs Application Name Application Identifier Group System Configuration MasterCard A0 00 00 00 04 10 10 Maestro A0 00 00 00 04 30 60 Visa...
NEO 2 Interface Developer’s Guide 23. Appendix A.11: NEO II Default Configuration TLVs The following table contains the default configuration TLVs for NEO II. Table 92: NEOII Default Configuration TLVs Name Length Value (Hex) Card Application (Hex) Group DF EE 2D 9F 06 A0 00 00 00 25 01 Partial Selection...
Page 510
NEO 2 Interface Developer’s Guide Name Length Value (Hex) Card Application (Hex) Group DF EE 2D 9F 06 A0 00 00 00 03 10 10 Partial Selection DF EE 4B VISA Application Selection Features DF EE 4D Max AID Length DF EE 2E Application Flow DF EE 4C...
Page 511
NEO 2 Interface Developer’s Guide Name Length Value (Hex) Card Application (Hex) Group DF EE 2D 9F 06 A0 00 00 02 77 10 10 Partial Selection DF EE 4B Max AID Length DF EE 2E Interac Application Exclude from DF EE 53 Processing Application Flow...
NEO 2 Interface Developer’s Guide 24. Appendix A.12: Card in Notification Behavior Some readers perform contact and contactless transactions, and reader can return status code A3h after Activate Transaction (02-01/02-40) and user presentation of ICC card. Interface transaction flow of ACT is shown below:...
NEO 2 Interface Developer’s Guide 25. Appendix A.13: LED 0 Behavior status The following table describes the LED 0 status between the polling mode and the UI scheme. Table 93: LED 0 Behavior status Poll mode LED 0 Behavior Auto poll Poll on demane ViVotech Visa wave...
NEO 2 Interface Developer’s Guide 26. Appendix A.14: Enhanced Encrypted MSR Data Output Format for Financial and Non-Financial Cards The following table describes how masking, encryption, and hash outputs are affected by Command C7-38. For details on the format, refer to document 80000502-001, ID Tech Encrypted Data Output Formats, available on the ID TECH Knowledge Base (no registration required).
NEO 2 Interface Developer’s Guide 27. Appendix A.15: Glossary The following terms are relevant to this document: Term Definition Application Authentication Cryptogram Application Elementary File (EMV) AELx Evaluation Assurance Level (1 ..7) Application File Locator Application Identifier Application Interchange Profile Application Programming Interface or Application Priority Indicator (tag 87) APDU...
Page 516
NEO 2 Interface Developer’s Guide Term Definition Random Number Select Acknowledge Security Access Module, communicated via 7816-3 in T=0. Static Data Authentication (EMV) SFGI Startup Frame Guard Interval (or time Integer) Short File Identifier (EMV) SAM ID inside of reader Protocol Type, T=0 is the asynchronous half duplex character transmission protocol.
NEO 2 Interface Developer’s Guide 28. Appendix B Revision History Revisio Date Change IDG is forked after NEO 1 rev. 142. This document is now for NEO 2. • Rev. 50 03/27/2018 • Add new table for Card Brands and AIDs by Group. •...
Page 518
NEO 2 Interface Developer’s Guide Add command 02-09, 02-58 (Used for MCL Data Exchange) Rev. 57 06/07/2018 • Rev. 58 06/07/2018 • Amend the Removal Tamper Configuration (04-22) information. • Remove note from Command 60-10 to fix NEOII-1358. Comprehensive copy edits, formatting adjustments. Rev.
Page 520
NEO 2 Interface Developer’s Guide 05/3/2019 60-12: update Default Apply Host Response Output TLV Data List table. • Global Config Tags: add Google SmartTap to Byte 1 Bit 5 in app capability. • Instances of "contact card" and "contactless card" have been changed to •...
Page 521
NEO 2 Interface Developer’s Guide 05/31/2019 General commands: • D1-1B: Added data response table. Miscellaneous NEO II Platform Commands: • 03-0E: Added description and tables. (DOC-109) F2-00, 01-07, 01-08: Added Switches Notifications, Get Switches Notifications Configuration, and Set Switches Notifications Configuration commands.
Page 522
NEO 2 Interface Developer’s Guide 07/26/2019 Peer To Peer Functionality • 85.2 Removed Detect Card Presence Command (02-05) as it is currently unsupported. Contact Start Transaction (60-10): • Added DFEF1F useage rules. Removed 9F39 tag and description. Contact Authenticate Transaction (60-11): •...
Page 523
NEO 2 Interface Developer’s Guide 10/7/2019 General • 88.1 Format overhaul for current branding style. Revised text for style, grammar, and clarity from the start of the document through section 8.2. Commands • Set System Language: changed sub-command from D1-20 to D1-27. Added Poll Felica Card (2C-44).