67 lines
2.4 KiB
Markdown
67 lines
2.4 KiB
Markdown
# 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
|