POS Hardware Integrations
Connect and configure POS peripheral hardware for restaurant operations.
Overview
Olympus Cloud supports a wide range of POS hardware for complete restaurant operations:
| Category | Supported Brands | Connection Types |
|---|---|---|
| Receipt Printers | Star, Epson, Bixolon | USB, Ethernet, Bluetooth |
| Kitchen Printers | Star, Epson | Ethernet, USB |
| Cash Drawers | APG, Star, MMF | Printer-driven, USB |
| Card Readers | Stripe, Square, Clover | Bluetooth, USB |
| Customer Displays | Logic Controls, Partner | USB, Serial |
| Barcode Scanners | Zebra, Honeywell | USB, Bluetooth |
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Olympus Cloud POS Shell │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Orders │ │ Payments │ │ Kitchen │ │ Reports │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼─────────────┼───────────────┘
│ │ │ │
└─────────────┴──────┬──────┴─────────────┘
│
┌──────────────▼───────────────┐
│ Hardware Integration Hub │
│ • Device discovery │
│ • Print queue management │
│ • Connection monitoring │
└──────────────┬───────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌────▼────┐ ┌─────▼────┐ ┌────▼────┐
│ Printers│ │ Readers │ │ Drawers │
└─────────┘ └──────────┘ └─────────┘
Device Discovery
Auto-Discovery
// src/hardware/discovery.rs
pub async fn discover_all_devices() -> Result<DiscoveryResult> {
let mut result = DiscoveryResult::default();
// Discover Star printers
let star_printers = StarPrinterService::discover_printers().await?;
result.printers.extend(star_printers);
// Discover USB devices
let usb_devices = usb::enumerate_devices()?;
for device in usb_devices {
match (device.vendor_id, device.product_id) {
// Epson printers
(0x04b8, _) => {
result.printers.push(PrinterInfo {
id: device.serial.clone(),
name: format!("Epson {}", device.product),
connection: ConnectionType::USB { path: device.path },
status: PrinterStatus::Online,
});
}
// Cash drawers
(0x0416, 0x0001) => {
result.cash_drawers.push(CashDrawerInfo {
id: device.serial.clone(),
name: "USB Cash Drawer".to_string(),
connection: ConnectionType::USB { path: device.path },
});
}
// Barcode scanners
(0x05e0, _) => {
result.scanners.push(ScannerInfo {
id: device.serial.clone(),
name: format!("Zebra {}", device.product),
connection: ConnectionType::USB { path: device.path },
});
}
_ => {}
}
}
// Discover network printers
let network_printers = discover_network_printers().await?;
result.printers.extend(network_printers);
Ok(result)
}
Health Monitoring
Device Status Check
pub async fn check_all_devices(ctx: &TenantContext) -> Result<DeviceHealth> {
let mut health = DeviceHealth::default();
// Check printers
for printer in printer_service.get_all(ctx).await? {
let status = printer_service.check_status(&printer.id).await;
health.printers.push(DeviceStatus {
id: printer.id,
name: printer.name,
online: status.is_ok(),
error: status.err().map(|e| e.to_string()),
});
}
// Check card readers
for reader in card_reader_service.get_all(ctx).await? {
let status = card_reader_service.check_status(&reader.id).await;
health.card_readers.push(DeviceStatus {
id: reader.id,
name: reader.name,
online: status.is_ok(),
error: status.err().map(|e| e.to_string()),
});
}
// Check cash drawers
for drawer in cash_drawer_service.get_all(ctx).await? {
let status = cash_drawer_service.check_status(&drawer.id).await;
health.cash_drawers.push(DeviceStatus {
id: drawer.id,
name: drawer.name,
online: status.is_ok(),
error: status.err().map(|e| e.to_string()),
});
}
Ok(health)
}
Sub-Pages
- Printers - Receipt printers and kitchen printers
- Payment Terminals - Card readers and payment terminals
- Peripherals - Cash drawers, customer displays, barcode scanners
- Troubleshooting - Common issues, connectivity, driver problems
Related Documentation
- Payments API - Payment processing
- Kitchen Display - KDS integration
- Edge Deployment - Offline support