Files
devicemanager/readme.hints.md

67 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

# Device Manager - Implementation Notes
## Architecture Overview
The device manager supports two architectures:
### Legacy Architecture (Still Supported)
- Separate device classes: `Scanner`, `Printer`, `Speaker`, `SnmpDevice`, `UpsDevice`, `DlnaRenderer`, `DlnaServer`
- Type-specific collections in DeviceManager
- Type-based queries: `getScanners()`, `getPrinters()`, `getSpeakers()`
### New Universal Device Architecture
- Single `UniversalDevice` class with composable features
- Features are capabilities that can be attached to any device
- Supports multifunction devices naturally (e.g., printer+scanner)
## Key Files
### Features (`ts/features/`)
- `feature.abstract.ts` - Base Feature class with connection management and retry logic
- `feature.scan.ts` - Scanning via eSCL/SANE protocols
- `feature.print.ts` - Printing via IPP protocol
- `feature.playback.ts` - Media playback (Sonos, AirPlay, Chromecast, DLNA)
- `feature.volume.ts` - Volume control (separate from playback)
- `feature.power.ts` - UPS/power monitoring via NUT/SNMP
- `feature.snmp.ts` - SNMP queries
### Device (`ts/device/`)
- `device.classes.device.ts` - UniversalDevice class with feature management
### Interfaces (`ts/interfaces/`)
- `feature.interfaces.ts` - All feature-related types and interfaces
- `index.ts` - Re-exports feature interfaces
## Feature Types
```typescript
type TFeatureType =
| 'scan' | 'print' | 'fax' | 'copy'
| 'playback' | 'volume' | 'power' | 'snmp'
| 'dlna-render' | 'dlna-serve';
```
## DeviceManager Feature API
```typescript
// Query by features
dm.getDevicesWithFeature('scan'); // Devices with scan feature
dm.getDevicesWithFeatures(['scan', 'print']); // Devices with ALL features
dm.getDevicesWithAnyFeature(['playback', 'volume']); // Devices with ANY feature
// Manage universal devices
dm.addUniversalDevice(device);
dm.addFeatureToDevice(deviceId, feature);
dm.removeFeatureFromDevice(deviceId, featureType);
```
## Protocol Implementations
- `EsclProtocol` - eSCL/AirScan scanner protocol
- `SaneProtocol` - SANE network scanner protocol
- `IppProtocol` - IPP printer protocol
- `SnmpProtocol` - SNMP queries
- `NutProtocol` - Network UPS Tools protocol
## Type Notes
- `TScanFormat` includes 'tiff' (added for compatibility)
- `IPrinterCapabilities` (from index.ts) has `string[]` for sides/quality
- `IPrintCapabilities` (from feature.interfaces.ts) has typed arrays