Difference between revisions of "Vending Machine/Cashless Device"

From Nottinghack Wiki
Jump to navigation Jump to search
Line 56: Line 56:
  
 
Where a response is ACK, this can also be NAK (Not Acknowledged).
 
Where a response is ACK, this can also be NAK (Not Acknowledged).
 +
 +
You will notice that some responses appear in the table twice.  This is because the cashless device can respond ACK to a request for data, sending the data in response to a later POLL.
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 61: Line 63:
 
|-
 
|-
 
|Reset
 
|Reset
|(none)||ACK||Required||XX
+
|(none)||ACK||Required||102
 
|-
 
|-
 
|rowspan="2"|Setup
 
|rowspan="2"|Setup
|Config Data||Reader Config Data||Required||XX
+
|Config Data||Reader Config Data||Required||103
 
|-
 
|-
|Max/Min Prices||ACK||Required||XX
+
|Max/Min Prices||ACK||Required||106
 
|-
 
|-
 
|rowspan="13"|Poll
 
|rowspan="13"|Poll
 
|rowspan="13"|(none)
 
|rowspan="13"|(none)
|Just Reset||Required||XX
+
|Just Reset||Required||108
 
|-
 
|-
|Reader Config Data||Required||XX
+
|Reader Config Data||Required||108
 
|-
 
|-
|Display Request||Required||XX
+
|Display Request||Our VMC doesn't support this!||108
 
|-
 
|-
|Begin Session||Required||XX
+
|Begin Session||Required||109
 
|-
 
|-
|Session Cancel Request||Required||XX
+
|Session Cancel Request||Required||112
 
|-
 
|-
|Vend Approved||Required||XX
+
|Vend Approved||Required||112 + 123
 
|-
 
|-
|Vend Denied||Required||XX
+
|Vend Denied||Required||113 + 123
 
|-
 
|-
|End Session||Required||XX
+
|End Session||Required||113 + 126
 
|-
 
|-
|Cancelled||Required||XX
+
|Cancelled||Required||113 + 133
 
|-
 
|-
|Peripheral ID||Required||XX
+
|Peripheral ID||Required||113
 
|-
 
|-
|Malfunction / Error||Required||XX
+
|Malfunction / Error||Required||115
 
|-
 
|-
|Command Out of Sequence||Required||XX
+
|Command Out of Sequence||Required||116
 
|-
 
|-
|Diagnostic Response||Required||XX
+
|Diagnostic Response||Required||122 + 147
 
|-
 
|-
 
|rowspan="7"|Vend
 
|rowspan="7"|Vend
 
|rowspan="2"|Vend Request
 
|rowspan="2"|Vend Request
|Vend Approved||Required||XX
+
|Vend Approved||Required||123
 
|-
 
|-
|Vend Denied||Required||XX
+
|Vend Denied||Required||123
 
|-
 
|-
|Vend Cancel||Vend Denied||Required||XX
+
|Vend Cancel||Vend Denied||Required||125
 
|-
 
|-
|Vend Success||ACK||Required||XX
+
|Vend Success||ACK||Required||125
 
|-
 
|-
|Vend Failure||ACK||Required||XX
+
|Vend Failure||ACK||Required||126
 
|-
 
|-
|Session Complete||End Session||Required||XX
+
|Session Complete||End Session||Required||126
 
|-
 
|-
|Cash Sale||ACK||Required||XX
+
|Cash Sale||ACK||??||127
 
|-
 
|-
 
|rowspan="3"|Reader
 
|rowspan="3"|Reader
|Reader Disable||ACK||Required||XX
+
|Reader Disable||ACK||Required||132
 
|-
 
|-
|Reader Enable||ACK||Required||XX
+
|Reader Enable||ACK||Required||132
 
|-
 
|-
|Reader Cancel||Cancelled||Required||XX
+
|Reader Cancel||Cancelled||Required||133
 
|-
 
|-
 
|rowspan="2"|Expansion
 
|rowspan="2"|Expansion
|Request ID||Peripheral ID||Required||XX
+
|Request ID||Peripheral ID||Required||138
 
|-
 
|-
|Diagnostics||Diagnostic Response||Required||XX
+
|Diagnostics||Diagnostic Response||Optional?||147
 
|}
 
|}

Revision as of 22:50, 13 August 2011

The MDB spec already takes into account cashless devices, so we simply have to build a device that conforms to the spec.

Device Level

The specification defines 3 levels of cashless devices, with more more features the higher the level. The Vending Machine (VMC) also has a level, and a device and VMC can only communicate using the highest commonly supported level. As our VMC is only level 1, we only need to implement a level 1 cashless device.

So let's look at what a level 1 device needs to do. Here we will reference commands by their plain English names. For the technical details on these commands, please refer to the specification section 7. For details on how these commands are sent/received by the VMC, refer to secitons 2,3 and 4.


States

A (slightly simplified) diagram of the state machine, with commands sent from/to the VMC in capitals.

The cashless device is basically a state machine with 5 states (7 for level 2 and 3 machines). These states are:

  1. Inactive
  2. Disabled
  3. Enabled
  4. Session Idle
  5. Vend

When turned on, the cashlss device enters state 1. Almost all state transistions are initiated by the VMC, with the exception of 3 -> 4, which is initiated by the cashless device on a valid card read.

If the cashless device receives a command it cannot act upon in its current state, or receives an unexpected command whilst in an uninterruptable state it must ACK(nowledge) the command, then on the next POLL from the VMC, issue a COMMAND OUT OF SEQUENCE response.

The VMC will then respond with a RESET command, putting the reader back to state 1.

Uninterruptable States

During certain command sequences, the VMC should not issue any additional commands to the cashless device. These are the Uninteruptable States. If the VMC does issue any additonal commands during one of thes states, the reader should responds with COMMAND OUT OF SEQUENCE, as noted above.

These sequences for a level 1 device are:

VMC Command Cashless Device Response Result
SETUP/CONFIGURATlON DATA READER CONFIGURATION DATA
EXPANSION/REQUEST ID PERIPHERAL ID
READER CANCEL CANCELLED
VEND REQUEST... VEND CANCEL VEND DENIED
VEND REQUEST VEND DENIED
VEND REQUEST VEND APPROVED VEND SUCCESS
VEND REQUEST VEND APPROVED VEND FAILURE
SESSION COMPLETE END SESSION

The highlighted rows are all possible sequences in the vend state (state 5), so this state is completely uninterruptable.

Commands

Where a response is ACK, this can also be NAK (Not Acknowledged).

You will notice that some responses appear in the table twice. This is because the cashless device can respond ACK to a request for data, sending the data in response to a later POLL.

Command Sub-command / Data Response Req? Spec Page Num
Reset (none) ACK Required 102
Setup Config Data Reader Config Data Required 103
Max/Min Prices ACK Required 106
Poll (none) Just Reset Required 108
Reader Config Data Required 108
Display Request Our VMC doesn't support this! 108
Begin Session Required 109
Session Cancel Request Required 112
Vend Approved Required 112 + 123
Vend Denied Required 113 + 123
End Session Required 113 + 126
Cancelled Required 113 + 133
Peripheral ID Required 113
Malfunction / Error Required 115
Command Out of Sequence Required 116
Diagnostic Response Required 122 + 147
Vend Vend Request Vend Approved Required 123
Vend Denied Required 123
Vend Cancel Vend Denied Required 125
Vend Success ACK Required 125
Vend Failure ACK Required 126
Session Complete End Session Required 126
Cash Sale ACK ?? 127
Reader Reader Disable ACK Required 132
Reader Enable ACK Required 132
Reader Cancel Cancelled Required 133
Expansion Request ID Peripheral ID Required 138
Diagnostics Diagnostic Response Optional? 147