52 lines
2.1 KiB
Markdown
52 lines
2.1 KiB
Markdown
# inventory
|
|||
|
|
|
||
|
|
A demo inventory application for the Psion Workabout MX: scan UPC barcodes, and
|
||
|
|
(Phase 2) keep stock counts in a database file, adding stock or consuming it by
|
||
|
|
scanning.
|
||
|
|
|
||
|
|
Written in PLIB C, built with the TopSpeed compiler (`tsc /m scan`).
|
||
|
|
|
||
|
|
## Phases
|
||
|
|
|
||
|
|
- **Phase 1 (this commit): scan and validate.** Reads barcodes from the scanner
|
||
|
|
and prints each one, flagging whether it is a valid UPC-A.
|
||
|
|
Modules: `upc` (validation), `bcode` (scanner input), `scan` (the demo).
|
||
|
|
- **Phase 2 (next): inventory database.** A DBF file keyed on UPC holding a
|
||
|
|
quantity and a name. Scan to add stock (increment, or create on first sight),
|
||
|
|
scan to consume by a quantity unit. Built on the SIBO `Dbf*` API.
|
||
|
|
|
||
|
|
## Build
|
||
|
|
|
||
|
|
```
|
||
|
|
tsc /m scan
|
||
|
|
```
|
||
|
|
|
||
|
|
Produces `scan.img`. `scan.pr` compiles `upc.c`, `bcode.c` and `scan.c` and
|
||
|
|
links them.
|
||
|
|
|
||
|
|
## How the scanner is read
|
||
|
|
|
||
|
|
On the Workabout the barcode module decodes the label in hardware and sends the
|
||
|
|
result as an RS232 stream, so there is no special barcode driver call: the app
|
||
|
|
opens the serial port and reads it. The scanner is on the top internal slot,
|
||
|
|
which is port **D**, so the device is `TTY:D` (`bcode.c`).
|
||
|
|
|
||
|
|
The scan loop is asynchronous: it waits on the scanner and the keyboard at the
|
||
|
|
same time, so a scan is processed immediately and Esc quits at any point.
|
||
|
|
|
||
|
|
## Things to confirm on the device
|
||
|
|
|
||
|
|
Because this cannot be compiled or run off-device, these points are written to
|
||
|
|
the SDK docs but may need adjusting once you build and test:
|
||
|
|
|
||
|
|
- **Serial line settings.** `bcodeOpen` opens `TTY:D` with the default mode. If
|
||
|
|
the scanner needs a specific baud/parity/framing, configure the channel with
|
||
|
|
`p_iow(chan, P_FSET, &config)` (E_CONFIG, `p_config.h`) after opening.
|
||
|
|
- **Terminator.** `BCODE_TERM` in `bcode.h` is set to CR (`0x0D`), the common
|
||
|
|
case. Change it if your scanner suffixes LF or something else.
|
||
|
|
- **Esc key code.** `KEY_ESC` in `scan.c` is `27`; adjust if the console
|
||
|
|
delivers a different code.
|
||
|
|
- **`CON:` async read.** Phase 1 reads single keystrokes asynchronously from
|
||
|
|
`CON:`; if that behaves differently on your unit, the keyboard handling in
|
||
|
|
`scan.c` is where to look.
|