-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathkvm.ts
64 lines (56 loc) · 1.77 KB
/
kvm.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import Logger from 'electron-log'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'
const teslaSmartKvmDriver = defineDriver({
enabled: true,
guid: '91D5BC95-A8E2-4F58-BCAC-A77BA1054D61',
localized: {
en: {
title: 'Tesla smart KVM-compatible switch',
company: 'Tesla Elec Technology Co.,Ltd',
provider: 'BridgeCmdr contributors'
}
},
capabilities: kDeviceHasNoExtraCapabilities,
setup: () => {
async function sendCommand(uri: string, command: Buffer) {
const connection = await createCommandStream(uri, {
baudRate: 9600,
dataBits: 8,
stopBits: 1,
parity: 'none',
timeout: 5000,
keepAlive: true
})
// TODO: Other situation handlers...
connection.on('data', (data) => {
Logger.debug(`teslaSmartKvmDriver: return: ${String(data)}`)
})
connection.on('error', (error) => {
Logger.error(`teslaSmartKvmDriver: ${error.message}`)
})
await connection.write(command)
await connection.close()
}
async function activate(uri: string, input: number) {
Logger.log(`teslaSmartKvmDriver.activate(${input})`)
await sendCommand(uri, Buffer.of(0xaa, 0xbb, 0x03, 0x01, input, 0xee))
}
async function powerOn() {
Logger.log('teslaSmartKvmDriver.powerOn')
Logger.debug('teslaSmartKvmDriver.powerOn is a no-op')
await Promise.resolve()
}
async function powerOff() {
Logger.log('teslaSmartKvmDriver.powerOff')
Logger.debug('teslaSmartKvmDriver.powerOff is a no-op')
await Promise.resolve()
}
return {
activate,
powerOn,
powerOff
}
}
})
export default teslaSmartKvmDriver