Skip to main content

TITO printers on gaming machines: handling a power loss mid-ticket

Printing a TITO ticket looks like the easy part of an electronic gaming machine (EGM): the player cashes out, the machine deducts the credits and the printer issues a voucher with its validation number. It works thousands of times a day without anyone thinking about it.

Until power drops in the middle of printing. Integrating JCM GEN5 and TransAct Epic 950 thermal printers, that was by far the hardest case: deciding whether a half-printed ticket is valid or has to be voided.

How a ticket gets printed

The normal flow, done right, follows the record first, then act rule:

  1. Store “ticket pending for X credits” with its validation number in NVRAM, and deduct the credits.
  2. Send the ticket to the printer.
  3. When the printer confirms, mark the ticket as printed.

If power drops before step 2 or after step 3, there is no problem. The problem is in between.

The moment that decides everything: the validation number

A ticket without a validation number is just paper. As soon as the printer gets the number on paper, the ticket exists: someone can take it to the cage or another machine. From that point there are only two correct outcomes:

  • The ticket is valid and the credits were already deducted.
  • The ticket is voided explicitly, and that is recorded.

What must never happen is restoring the credits to the machine while the ticket is still valid. That is paying twice.

Physically, a voided ticket does not always look the same either. In our testing, depending on the power-cut scenario, it sometimes came out with “VOID” printed and sometimes came out blank. That is why paper cannot be the source of truth: what counts is what was recorded on the machine and in the casino system.

After voiding, the machine retries printing with a new ticket, and no other machine accepts the voided one. The player gets paid exactly once.

Why it is so hard

On paper, the rule is simple. In practice, the problem is timing:

  • You do not know exactly where it stopped. Power dropped somewhere between “sent the ticket” and “printer confirmed”. Did the number make it onto the paper? Only half of it?
  • The printer reboots too. When power returns, each one has to report its state, and the machine has to interpret it before doing anything else.
  • The player does not wait. While the machine reboots, the player can pull the ticket sitting in the printer mouth. If the machine planned to void it once boot finished, it is too late: the ticket left without being voided.

Every printer speaks differently

The JCM GEN5 and the TransAct Epic 950 do the same job, but they do not report state the same way. Each has its own flags for a presented ticket, a taken ticket, a jam or paper out, and they do not always mean exactly the same thing.

What I recommend is a per-model layer that translates each printer’s flags into one common set of states. Recovery logic is then written and tested once, and adding another printer model does not touch it.

Recommendations

  • The validation number is the point of no return. Design the flow around one question: could it have been printed or not?
  • Persist every print state transition in NVRAM, not just start and end.
  • At boot, ask the printer first. Before enabling play or restoring credits, resolve the pending ticket against the printer’s real state.
  • When in doubt, never restore credits while a possibly valid ticket is out. Treat it as issued, or void it explicitly and record it.
  • Void, then retry. A voided ticket must not be redeemable at any machine or the cage, and printing is retried with a new one.
  • Test power cuts on every model, at different points of printing, and also test pulling the ticket while the machine reboots.

Need help with printers or bill validators?

We are a Mexico City team, in US and Canadian time zones, working with manufacturers and game studios on SAS, peripherals (TITO printers, bill validators, button decks) and GLI certification. See what we do in SAS and EGM consulting, or read how to recover bills and tickets on validators.