# FD2 Test Utility

Quick steps to connect, send prices, authorize, and inspect responses.

Goal: Pretend to be a POS or host, send PCC/FD-style commands to an FD2 controller, and see exactly what the controller sent back (ACK/STX/ETX + payload).
You will typically do: (1) Connect → (2) Select dispenser → (3) Price or Authorize → (4) Check TX/RX.

## 1. Connect to the controller

Step 1 – Pick protocol

On the left side, choose the protocol the controller expects, usually `PCC`. If you are testing FD socket, pick `FD Socket`.

If you don’t know, try `PCC` first — most examples in this tool are PCC-shaped.

Step 2 – Pick connection type

Set Com Type to:

- Ethernet → you will type IP + port.
- Serial → you will choose COM port + serial settings.

Step 3 – Enter IP and port

Fill in:

- IP: FD2/controller address.
- Port: TCP port (typical sample: `9200`).

Step 4 – Click Connect

Click Connect. The status should show CONNECTED in green. If it doesn’t, fix IP/port or protocol and try again.

Optional – Set decimals

On the left there are 3 decimal boxes: Price, Amount, Volume. Set them to match what your controller uses (example: price = 3, amount = 2, volume = 3). The tool uses these when building some commands.

## 2. Pick a dispenser

Most actions (price, authorize, stop, get totals) are for a specific dispenser. Before you click anything on the right, choose the dispenser.

Step 1 – Use the “Dispenser:” combo

On the right panel, find Dispenser: and pick e.g. `01`, `02`, etc.

Step 2 – Confirm the label

There is usually a “Selected: XX” label: that’s the number all the dispenser actions will use.

## 3. Send a price

Use this when you want to test price writes (e.g. PCC `J`-style) or confirm that your controller will accept a price for a hose.

Step 1 – Pick a hose

In the price bar (top of the right side) choose Selected Hose (1–6, or however many the dispenser has).

Step 2 – Click Send Price

This will build the price command according to:

- the protocol you picked (PCC vs FD socket), and
- the decimal settings from the left.

The command is sent to the controller and the raw text will appear in the TX box.
Send price for multiple hoses

If you click All Hoses, the tool sends price writes for all hoses up to the one you selected for this dispenser. This is handy to push a full set of test prices quickly.

If your controller NAKs this, check the controller’s required price format or decimal count.

Disable / remove a price

Use Remove/Disable in the same area to send the price-clear style command for that hose.

## 4. Authorize fueling

This is the part that mimics POS behavior. You tell FD2 “let dispenser X fuel” with a limit (money or volume) or with no limit (fillup).

Step 1 – Click Authorize button

On the right actions list, click Authorize. This opens the Authorize window.

Step 2 – Check fueling position

It should already show the dispenser you chose on the main window. Change it only if you want to authorize a different one.

Step 3 – Choose what kind of authorization

You have three typical cases:

- Money/dollar preset: enter the amount, select “dollar preset”.
- Volume preset: enter the volume (controller usually wants 3 decimals).
- Fillup: pick the fillup/no limit option.

Also pick the Tier: Credit (1) or Cash (2). This affects the PCC flag in the command.

Step 4 – (Optional) Lock to a hose

If you want to force a specific hose: choose “Hose” and pick the hose. If you want to give a set of allowed hoses: choose “Multi” and select the ones you want. The tool will create the proper multihoselock bytes.

Step 5 – Click OK

Click OK to actually send it. The built PCC-style authorization (e.g. `A{disp}0{flag}...` or `A{disp}4 999999` for fillup) will go through the same send path as everything else, so you see it in the TX/RX panel.

## 5. Read what happened (TX/RX panel)

Every time you click Send Price, Authorize, Get Totals, etc., look at the bottom panel.

Last Sent / Transmit

Shows the raw text your app sent to FD2, before framing (for PCC it looks like `A010000200000000`). If another window had “copy to main” checked, you will also see it here.

Last Response / Receive

Shows the raw controller response, but with control bytes expanded to make it readable:

- `0x06(ACK)` – controller acknowledged
- `0x15(NAK)` – controller refused
- `0x02(STX)` and `0x03(ETX)` – frame start/end

Example: `0x06(ACK)0x02(STX)PCC 8.7 10/24/25DC 1 PROT: GENERIC0x03(ETX)`

If you see only `0x06(ACK)` and nothing else, it means “I got it” but the controller didn’t send extra data.

If it shows “[no response]”

That means the controller really didn’t send anything back. Check connection or command format.

## 6. Read FD2 files

Use this when you want to pull config/log/JSON/zips straight from the controller.

Step 1 – Click Read Files

This opens the special window for the `*A?` / `*V?` commands.

Step 2 – Pick what to read

Common ones:

- `*AR` → read `/config.xml`
- `*VL` → zip of log directory
- `*VJ` → zip of JSON directory
- `*VR` → zip of reader/device directory
- `*VC` → zip of license directory
- `*VP` → PIE data
- `*VD` → DB directory

Step 3 – Send and read TX/RX

Click send. Then go to the bottom panel to confirm the controller actually answered.

## 7. Send a custom command

Use this when you need to send something that doesn’t have a dedicated button yet (e.g. a test `J` write, a version read, or an experimental extended command).

Step 1 – Click Custom Command

On the left/global area, click Custom Command.

Step 2 – Type the command

Examples:

- `A010000200000000` (PCC-style authorize)
- `*VL` (read logs)

Step 3 – (Optional) “Show raw” and “Copy to main”

Turn these on if you want to see the exact framed data and also put it in the main TX/RX view.

Step 4 – Send

Click Send. Then check the TX/RX panel.

## Appendix: global buttons

These are quick actions on the left that talk straight to the controller.

- F1 / FE: ask the controller for status.
- Lic: license/info queries (if implemented in your controller).
- System Versions: read version/status.
- Custom Command: manual PCC/FD/extended.
- Read Files: `*A?`/`*V?` helpers.

FD2 Test Utility – local help (task-oriented)