Swipe reports

Swipe reports — Methods to read and process swipe reports.

Functions

Types and Values

Description

This section defines methods to read and process swipe reports generated when the user swipes a credit card in the reader.

Example 4. Reading and processing a swipe report

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mccr_status_t        st;
mccr_swipe_report_t *swipe_report;
uint8_t              track_length;

if ((st = mccr_device_wait_swipe_report (device, -1, &swipe_report)) != MCCR_STATUS_OK) {
  fprintf (stderr, "error: cannot get swipe report: %s\n", mccr_status_to_string (st));
  return;
}

printf ("swipe detected\n");
if ((st = mccr_swipe_report_get_track_1_encrypted_data_length (swipe_report, &track_length)) == MCCR_STATUS_OK)
  printf ("  bytes detected in track 1: %u\n", track_length);
if ((st = mccr_swipe_report_get_track_2_encrypted_data_length (swipe_report, &track_length)) == MCCR_STATUS_OK)
  printf ("  bytes detected in track 2: %u\n", track_length);
if ((st = mccr_swipe_report_get_track_3_encrypted_data_length (swipe_report, &track_length)) == MCCR_STATUS_OK)
  printf ("  bytes detected in track 3: %u\n", track_length);

mccr_swipe_report_free (swipe_report);

Functions

mccr_swipe_report_free ()

void
mccr_swipe_report_free (mccr_swipe_report_t *report);

Frees a swipe report obtained with mccr_device_wait_swipe_report().

Parameters

report

a mccr_swipe_report_t.

 

mccr_swipe_report_get_track_1_decode_status ()

mccr_status_t
mccr_swipe_report_get_track_1_decode_status
                               (mccr_swipe_report_t *report,
                                uint8_t *out_status);

Gets the track 1 decode status.

Parameters

report

a mccr_swipe_report_t.

 

out_status

output location for a uint8_t with a bitmask of mccr_swipe_track_decode_status_t values.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_decode_status ()

mccr_status_t
mccr_swipe_report_get_track_2_decode_status
                               (mccr_swipe_report_t *report,
                                uint8_t *out_status);

Gets the track 2 decode status.

Parameters

report

a mccr_swipe_report_t.

 

out_status

output location for a uint8_t with a bitmask of mccr_swipe_track_decode_status_t values.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_decode_status ()

mccr_status_t
mccr_swipe_report_get_track_3_decode_status
                               (mccr_swipe_report_t *report,
                                uint8_t *out_status);

Gets the track 3 decode status.

Parameters

report

a mccr_swipe_report_t.

 

out_status

output location for a uint8_t with a bitmask of mccr_swipe_track_decode_status_t values.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_1_absolute_data_length ()

mccr_status_t
mccr_swipe_report_get_track_1_absolute_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the absolute data length in track 1.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_absolute_data_length ()

mccr_status_t
mccr_swipe_report_get_track_2_absolute_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the absolute data length in track 2.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_absolute_data_length ()

mccr_status_t
mccr_swipe_report_get_track_3_absolute_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the absolute data length in track 3.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_1_encrypted_data_length ()

mccr_status_t
mccr_swipe_report_get_track_1_encrypted_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the encrypted data length in track 1.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_encrypted_data_length ()

mccr_status_t
mccr_swipe_report_get_track_2_encrypted_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the encrypted data length in track 2.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_encrypted_data_length ()

mccr_status_t
mccr_swipe_report_get_track_3_encrypted_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the encrypted data length in track 3.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_1_encrypted_data ()

mccr_status_t
mccr_swipe_report_get_track_1_encrypted_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the encrypted data in track 1.

The returned out_data is constant and shouldn't be modified by the user.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the encrypted data.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_encrypted_data ()

mccr_status_t
mccr_swipe_report_get_track_2_encrypted_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the encrypted data in track 2.

The returned out_data is constant and shouldn't be modified by the user.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the encrypted data.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_encrypted_data ()

mccr_status_t
mccr_swipe_report_get_track_3_encrypted_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the encrypted data in track 3.

The returned out_data is constant and shouldn't be modified by the user.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the encrypted data.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_1_masked_data_length ()

mccr_status_t
mccr_swipe_report_get_track_1_masked_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the masked data length in track 1.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_masked_data_length ()

mccr_status_t
mccr_swipe_report_get_track_2_masked_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the masked data length in track 2.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_masked_data_length ()

mccr_status_t
mccr_swipe_report_get_track_3_masked_data_length
                               (mccr_swipe_report_t *report,
                                uint8_t *out_length);

Gets the masked data length in track 3.

Parameters

report

a mccr_swipe_report_t.

 

out_length

output location for a uint8_t with the length.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_1_masked_data ()

mccr_status_t
mccr_swipe_report_get_track_1_masked_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the masked data in track 1.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the masked data.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_2_masked_data ()

mccr_status_t
mccr_swipe_report_get_track_2_masked_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the masked data in track 2.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the masked data.

 

Returns

a mccr_status_t.


mccr_swipe_report_get_track_3_masked_data ()

mccr_status_t
mccr_swipe_report_get_track_3_masked_data
                               (mccr_swipe_report_t *report,
                                const uint8_t **out_data);

Gets the masked data in track 3.

Parameters

report

a mccr_swipe_report_t.

 

out_data

output location for a pointer to the masked data.

 

Returns

a mccr_status_t.


mccr_card_encode_type_to_string ()

const char *
mccr_card_encode_type_to_string (mccr_card_encode_type_t value);

Gets a description for the given mccr_card_encode_type_t.

Parameters

Returns

a constant string.


mccr_swipe_report_get_card_encode_type ()

mccr_status_t
mccr_swipe_report_get_card_encode_type
                               (mccr_swipe_report_t *report,
                                mccr_card_encode_type_t *out);

Gets the encrypted data in track 3.

Parameters

report

a mccr_swipe_report_t.

 

out

output location for the mccr_card_encode_type_t.

 

Returns

a mccr_status_t.


mccr_device_wait_swipe_report ()

mccr_status_t
mccr_device_wait_swipe_report (mccr_device_t *device,
                               int timeout_ms,
                               mccr_swipe_report_t **out_swipe_report);

Waits for a swipe report sent by the device. Blocks during the wait. A negative timeout_ms may be given to disable the timeout and wait forever.

When no longer needed, out_swipe_report should be disposed with mccr_swipe_report_free().

Parameters

device

an open mccr_device_t.

 

timeout_ms

timeout to wait for a swipe report, in milliseconds.

 

out_swipe_report

output location to store the newly allocated mccr_swipe_report_t.

 

Types and Values

mccr_swipe_report_t

typedef struct mccr_swipe_report_s mccr_swipe_report_t;

Opaque type representing a swipe report.


enum mccr_swipe_track_decode_status_t

Flags specifying the status of the decoding in a given track.

Members

MCCR_SWIPE_TRACK_DECODE_STATUS_SUCCESS

Success.

 

MCCR_SWIPE_TRACK_DECODE_STATUS_ERROR

Decoding error.

 

enum mccr_card_encode_type_t

Type of encoding found in the card.

Members

MCCR_CARD_ENCODE_TYPE_ISO_ABA

ISO/ABA encode format.

 

MCCR_CARD_ENCODE_TYPE_AAMVA

AAMVA encode format.

 

MCCR_CARD_ENCODE_TYPE_RESERVED

Reserved.

 

MCCR_CARD_ENCODE_TYPE_BLANK

Blank.

 

MCCR_CARD_ENCODE_TYPE_OTHER

Other. Non standard track format.

 

MCCR_CARD_ENCODE_TYPE_UNDETERMINED

Couldn't be determined.

 

MCCR_CARD_ENCODE_TYPE_NONE

No decoding has occurred.