0% found this document useful (0 votes)
238 views5 pages

IGT Slot Machine SAS Protocol Overview

log meater from th slot machine

Uploaded by

Mina Halim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
238 views5 pages

IGT Slot Machine SAS Protocol Overview

log meater from th slot machine

Uploaded by

Mina Halim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

Send meter in

<= { "cmd": "meters", "cid0": 5636171, "cid1": 875646994, "cid2": 540226902 } in my


app
<= [[Link]] meters

Out
=> {
"cid0": 5636171,
"cid1": 875646994,
"cid2": 540226902,
"seq": 214,
"ts": 69402033,
"cmd": "meters",
"port": 0,
"games": 859760,
"in": 47567800,
"out": 149791300,
"bet": 45047000,
"win": 50403400,
"jackpot": 23983900,
"hand_pay": 0,
"credits": 6500,
"promo": 0,
"bill_in": 1410000,
"bill_st": 1410000,
"ticket_in": 0,
"ticket_out": 123400,
"in_machine_balance": 6500,
"result": 0
}

or

{
"type": "command",
"data": {
"cid0": 5636171,
"cid1": 875646994,
"cid2": 540226902,
"seq": 0,
"ts": 72210128,
"conn_id": 25367,
"cmd": "meters",
"port": 0,
"games": 859760,
"in": 47597800,
"out": 149791300,
"bet": 45047000,
"win": 50403400,
"jackpot": 23983900,
"hand_pay": 0,
"credits": 36500,
"promo": 0,
"bill_in": 1440000,
"bill_st": 1440000,
"ticket_in": 0,
"ticket_out": 123400,
"in_machine_balance": 36500,
"result": 0
},
"ip": ""
}

hexa in

0x02 0x01 0x13 0x10 0x03

022F030000005 = GET SELECT METERS


022F030000006 = GET SELECT METERS
022F030000007 = GET SELECT METERS
022F030000008 = GET SELECT METERS
022F030000009 = GET SELECT METERS
0135 =SEND $20 BILL METER
81 = SEND gENERAL POLL
0136 = SEND $50 BILL METER

hexa out
0x02 0x01 0x13 0x00 0x56 0x36 0x17 0x75 0x03

The code or format on an IGT slot machine depends on the SAS (Slot Accounting
System) protocol. This protocol is proprietary and licensed by IGT, but its general
structure involves sending specific commands to request data like meters, events,
or configuration details from the slot machine. Below is a breakdown of the SAS
message format and typical commands.

SAS Message Format


A typical SAS protocol message sent to an IGT slot machine consists of the
following parts:

Field Description
STX Start of text (0x02)
Address The slot machine's address on the SAS network (e.g., 0x01, 0x02, etc.).
Command Specific command code to request information (e.g., meters, events).
Data Optional data field, depending on the command being sent.
Checksum XOR of all preceding bytes in the message, ensuring message integrity.
ETX End of text (0x03).
Example Commands
Below are common SAS commands used for IGT machines:

Command Code Function Description


0x13 Request Coin-In Meter Retrieves the total coin-in amount.
0x14 Request Coin-Out Meter Retrieves the total coin-out amount.
0x15 Request Jackpot Meter Retrieves the total jackpot amount.
0x40 Request Machine Status Queries the current status of the machine.
0x50 Request Configuration Info Retrieves machine configuration.
Example SAS Command
To request the "coin-in" meter:

Command Structure:

STX (0x02)
Address (0x01 for slot machine #1)
Command (0x13 for coin-in meter)
Checksum (XOR of all bytes before ETX)
ETX (0x03)
Command Packet:

plaintext
Copy code
[STX] [Address] [Command] [Checksum] [ETX]
Example in bytes:

plaintext
Copy code
0x02 0x01 0x13 0x10 0x03
Here, 0x10 is the XOR checksum of 0x02, 0x01, and 0x13.

Sample Code to Construct and Send Command


Below is an example of constructing and sending a SAS command in C:

c
Copy code
#include <stdint.h>
#include <stdio.h>

// Function to calculate the XOR checksum


uint8_t calculateChecksum(uint8_t *data, int length) {
uint8_t checksum = 0;
for (int i = 0; i < length; i++) {
checksum ^= data[i];
}
return checksum;
}

// Function to send a command to the slot machine


void sendSASCommand() {
uint8_t command[] = {0x02, 0x01, 0x13}; // STX, Address, Command
command[3] = calculateChecksum(command, 3); // Checksum
command[4] = 0x03; // ETX

printf("SAS Command: ");


for (int i = 0; i < 5; i++) {
printf("%02X ", command[i]);
}
printf("\n");

// Example: send command over serial port


// Replace `sendData` with actual serial write function
sendData((char *)command, 5);
}
Example Response from Slot Machine
When you send a valid command, the slot machine will respond with a similar
structured message:
Field Description
STX Start of text (0x02).
Address Address of the responding slot machine.
Response Response data (e.g., meter values).
Checksum XOR checksum of all preceding bytes.
ETX End of text (0x03).
Example Response for Coin-In Meter:

plaintext
Copy code
0x02 0x01 0x13 0x00 0xA1 0x03
0x13: Command echo.
0x00 0xA1: Coin-in meter value (e.g., 0x00A1 = 161 coins).
Serial Port Configuration
Baud Rate: Typically 9600 or 19200.
Data Bits: 8.
Parity: None.
Stop Bits: 1.
Flow Control: None.
Next Steps
Obtain the licensed SAS documentation from IGT for detailed command/response
specifications.
Use a serial port sniffer or logic analyzer to monitor real-world communication
between the slot machine and a SAS host for reverse engineering (if permissible).
Implement specific SAS commands based on your needs (e.g., reading all meters,
monitoring events).
If you have access to SAS documentation or specific requirements, share them for
more precise guidance.

The exact format/code from an IGT machine for requesting or receiving meters
depends on the SAS protocol implementation. While the JSON-like response ({"cmd":
"meters", ...}) in your example suggests a higher-level abstraction, the typical
SAS protocol message format used by IGT machines for meter retrieval is binary.
Here's a detailed explanation based on the traditional SAS format.

Typical SAS Protocol Format for Meter Retrieval


A command to retrieve meters follows a structured binary format:

Request Packet Format


Field Length (bytes) Description
STX 1 Start of Text (0x02).
Address 1 Slot machine's unique address on the network (e.g., 0x01).
Command 1 SAS command code for the meter request (e.g., 0x13 for coin-in).
Data Variable Optional data payload (if required by the command).
Checksum 1 XOR of all preceding bytes in the message, ensuring integrity.
ETX 1 End of Text (0x03).
Example: Get Coin-In Meter
To request the coin-in meter:

Construct Request Packet:

STX: 0x02
Address: 0x01 (machine ID 1)
Command: 0x13 (coin-in meter command)
Checksum: XOR of STX, Address, and Command (0x02 ^ 0x01 ^ 0x13 = 0x10).
ETX: 0x03
Packet Bytes:

plaintext
Copy code
0x02 0x01 0x13 0x10 0x03
Response Packet Format
After sending the request, the slot machine responds with a similar structured
message:

Field Length (bytes) Description


STX 1 Start of Text (0x02).
Address 1 Slot machine's unique address (same as in the request).
Command 1 Echo of the requested command (e.g., 0x13 for coin-in meter).
Data Variable The actual meter value (e.g., 4-byte integer for coin-in total).
Checksum 1 XOR of all preceding bytes in the response.
ETX 1 End of Text (0x03).
Example: Coin-In Meter Response
For a coin-in meter value of 5636171:

Response Packet Construction:

STX: 0x02
Address: 0x01
Command: 0x13
Data: 0x00 0x56 0x36 0x17 (value = 5636171 in big-endian format).
Checksum: XOR of all bytes (0x02 ^ 0x01 ^ 0x13 ^ 0x00 ^ 0x56 ^ 0x36 ^ 0x17 = 0x75).
ETX: 0x03
Packet Bytes:

plaintext
Copy code
0x02 0x01 0x13 0x00 0x56 0x36 0x17 0x75 0x03

You might also like