Skip to content

Commit

Permalink
Ported the drivers over to tRPC and removed the handle services
Browse files Browse the repository at this point in the history
  • Loading branch information
6XGate committed Nov 1, 2024
1 parent 75a27ea commit d6250c7
Show file tree
Hide file tree
Showing 34 changed files with 481 additions and 1,005 deletions.
9 changes: 5 additions & 4 deletions PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
- Drivers will require an overhaul to no longer need handles.
- More drivers.
- Move more modules to core.
- Wrap some Electron APIs as services for easier mocking without electron itself.
- Drivers
- Shinybow
- Monoprice Blackbird
- J-Tech Digital
- ASHATA
- TESmart
- No Hassle AV
- J-Tech Digital -- Need to find actual command list.
- ASHATA -- Now unable to find.
- TESmart -- Brand of Tesla Elec (like TelsaSmart)
- No Hassle AV -- Need to contact.
22 changes: 11 additions & 11 deletions src/main/drivers/extron/sis.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Logger from 'electron-log'
import { defineDriver, kDeviceCanDecoupleAudioOutput, kDeviceSupportsMultipleOutputs } from '../../services/driver'
import { defineDriver, kDeviceCanDecoupleAudioOutput, kDeviceSupportsMultipleOutputs } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'

const extronSisDriver = defineDriver({
enable: true,
enabled: true,
guid: '4C8F2838-C91D-431E-84DD-3666D14A6E2C',
localized: {
en: {
Expand All @@ -13,8 +13,8 @@ const extronSisDriver = defineDriver({
}
},
capabilities: kDeviceSupportsMultipleOutputs | kDeviceCanDecoupleAudioOutput,
setup: async function setup(uri) {
async function sendCommand(command: string) {
setup: () => {
async function sendCommand(uri: string, command: string) {
const connection = await createCommandStream(uri, {
baudRate: 9600,
dataBits: 8,
Expand All @@ -36,11 +36,11 @@ const extronSisDriver = defineDriver({
await connection.close()
}

async function activate(inputChannel: number, videoOutputChannel: number, audioOutputChannel: number) {
Logger.log(`extronSisDriver.activate(${inputChannel}, ${videoOutputChannel}, ${audioOutputChannel})`)
const videoCommand = `${inputChannel}*${videoOutputChannel}%`
const audioCommand = `${inputChannel}*${audioOutputChannel}$`
await sendCommand(`${videoCommand}\r\n${audioCommand}\r\n`)
async function activate(uri: string, input: number, videoOutput: number, audioOutput: number) {
Logger.log(`extronSisDriver.activate(${input}, ${videoOutput}, ${audioOutput})`)
const videoCommand = `${input}*${videoOutput}%`
const audioCommand = `${input}*${audioOutput}$`
await sendCommand(uri, `${videoCommand}\r\n${audioCommand}\r\n`)
}

async function powerOn() {
Expand All @@ -55,11 +55,11 @@ const extronSisDriver = defineDriver({
await Promise.resolve()
}

return await Promise.resolve({
return {
activate,
powerOn,
powerOff
})
}
}
})

Expand Down
37 changes: 22 additions & 15 deletions src/main/drivers/sony/rs485.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
import Logger from 'electron-log'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/driver'
import { createAddress, createCommand, kAddressAll, kPowerOff, kPowerOn, kSetChannel } from '../../services/sonyRs485'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'
import type { Command, CommandArg } from '../../services/sonyRs485'
import {
createAddress,
createCommand,
kAddressAll,
kPowerOff,
kPowerOn,
kSetChannel
} from '../../services/support/sonyRs485'
import type { Command, CommandArg } from '../../services/support/sonyRs485'

const sonyRs485Driver = defineDriver({
enable: true,
enabled: true,
guid: '8626D6D3-C211-4D21-B5CC-F5E3B50D9FF0',
localized: {
en: {
Expand All @@ -15,8 +22,8 @@ const sonyRs485Driver = defineDriver({
}
},
capabilities: kDeviceHasNoExtraCapabilities,
setup: async function setup(uri) {
async function sendCommand(command: Command, arg0?: CommandArg, arg1?: CommandArg) {
setup: () => {
async function sendCommand(uri: string, command: Command, arg0?: CommandArg, arg1?: CommandArg) {
const source = createAddress(kAddressAll, 0)
const destination = createAddress(kAddressAll, 0)
const packet = createCommand(destination, source, command, arg0, arg1)
Expand All @@ -42,26 +49,26 @@ const sonyRs485Driver = defineDriver({
await connection.close()
}

async function activate(inputChannel: number) {
Logger.log(`sonyRs485Driver.activate(${inputChannel})`)
await sendCommand(kSetChannel, 1, inputChannel)
async function activate(uri: string, input: number) {
Logger.log(`sonyRs485Driver.activate(${input})`)
await sendCommand(uri, kSetChannel, 1, input)
}

async function powerOn() {
async function powerOn(uri: string) {
Logger.log('sonyRs485Driver.powerOn')
await sendCommand(kPowerOn)
await sendCommand(uri, kPowerOn)
}

async function powerOff() {
async function powerOff(uri: string) {
Logger.log('sonyRs485Driver.powerOff')
await sendCommand(kPowerOff)
await sendCommand(uri, kPowerOff)
}

return await Promise.resolve({
return {
activate,
powerOn,
powerOff
})
}
}
})

Expand Down
18 changes: 9 additions & 9 deletions src/main/drivers/tesla-smart/kvm.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Logger from 'electron-log'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/driver'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'

const teslaSmartKvmDriver = defineDriver({
enable: true,
enabled: true,
guid: '91D5BC95-A8E2-4F58-BCAC-A77BA1054D61',
localized: {
en: {
Expand All @@ -13,8 +13,8 @@ const teslaSmartKvmDriver = defineDriver({
}
},
capabilities: kDeviceHasNoExtraCapabilities,
setup: async function setup(uri) {
async function sendCommand(command: Buffer) {
setup: () => {
async function sendCommand(uri: string, command: Buffer) {
const connection = await createCommandStream(uri, {
baudRate: 9600,
dataBits: 8,
Expand All @@ -36,9 +36,9 @@ const teslaSmartKvmDriver = defineDriver({
await connection.close()
}

async function activate(inputChannel: number) {
Logger.log(`teslaSmartKvmDriver.activate(${inputChannel})`)
await sendCommand(Buffer.of(0xaa, 0xbb, 0x03, 0x01, inputChannel, 0xee))
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() {
Expand All @@ -53,11 +53,11 @@ const teslaSmartKvmDriver = defineDriver({
await Promise.resolve()
}

return await Promise.resolve({
return {
activate,
powerOn,
powerOff
})
}
}
})

Expand Down
20 changes: 10 additions & 10 deletions src/main/drivers/tesla-smart/matrix.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Logger from 'electron-log'
import { defineDriver, kDeviceSupportsMultipleOutputs } from '../../services/driver'
import { defineDriver, kDeviceSupportsMultipleOutputs } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'

const teslaSmartMatrixDriver = defineDriver({
enable: true,
enabled: true,
guid: '671824ED-0BC4-43A6-85CC-4877890A7722',
localized: {
en: {
Expand All @@ -13,8 +13,8 @@ const teslaSmartMatrixDriver = defineDriver({
}
},
capabilities: kDeviceSupportsMultipleOutputs,
setup: async function setup(uri) {
const sendCommand = async (command: Buffer) => {
setup: () => {
const sendCommand = async (uri: string, command: Buffer) => {
const connection = await createCommandStream(uri, {
baudRate: 9600,
dataBits: 8,
Expand All @@ -38,10 +38,10 @@ const teslaSmartMatrixDriver = defineDriver({

const toChannel = (n: number) => String(n).padStart(2, '0')

async function activate(inputChannel: number, outputChannel: number) {
Logger.log(`teslaSmartMatrixDriver.activate(${inputChannel}, ${outputChannel})`)
const command = `MT00SW${toChannel(inputChannel)}${toChannel(outputChannel)}NT`
await sendCommand(Buffer.from(command, 'ascii'))
async function activate(uri: string, input: number, output: number) {
Logger.log(`teslaSmartMatrixDriver.activate(${input}, ${output})`)
const command = `MT00SW${toChannel(input)}${toChannel(output)}NT`
await sendCommand(uri, Buffer.from(command, 'ascii'))

await Promise.resolve()
}
Expand All @@ -58,11 +58,11 @@ const teslaSmartMatrixDriver = defineDriver({
await Promise.resolve()
}

return await Promise.resolve({
return {
activate,
powerOn,
powerOff
})
}
}
})

Expand Down
18 changes: 9 additions & 9 deletions src/main/drivers/tesla-smart/sdi.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Logger from 'electron-log'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/driver'
import { defineDriver, kDeviceHasNoExtraCapabilities } from '../../services/drivers'
import { createCommandStream } from '../../services/stream'

const teslaSmartSdiDriver = defineDriver({
enable: true,
enabled: true,
guid: 'DDB13CBC-ABFC-405E-9EA6-4A999F9A16BD',
localized: {
en: {
Expand All @@ -13,8 +13,8 @@ const teslaSmartSdiDriver = defineDriver({
}
},
capabilities: kDeviceHasNoExtraCapabilities,
setup: async function setup(uri) {
async function sendCommand(command: Buffer) {
setup: () => {
async function sendCommand(uri: string, command: Buffer) {
const connection = await createCommandStream(uri, {
baudRate: 9600,
dataBits: 8,
Expand All @@ -36,9 +36,9 @@ const teslaSmartSdiDriver = defineDriver({
await connection.close()
}

async function activate(inputChannel: number) {
Logger.log(`teslaSmartSdiDriver.activate(${inputChannel})`)
await sendCommand(Buffer.of(0xaa, 0xcc, 0x01, inputChannel))
async function activate(uri: string, input: number) {
Logger.log(`teslaSmartSdiDriver.activate(${input})`)
await sendCommand(uri, Buffer.of(0xaa, 0xcc, 0x01, input))
}

async function powerOn() {
Expand All @@ -53,11 +53,11 @@ const teslaSmartSdiDriver = defineDriver({
await Promise.resolve()
}

return await Promise.resolve({
return {
activate,
powerOn,
powerOff
})
}
}
})

Expand Down
13 changes: 0 additions & 13 deletions src/main/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@ import { app, shell, BrowserWindow, nativeTheme } from 'electron'
import Logger from 'electron-log'
import appIcon from '../../resources/icon.png?asset&asarUnpack'
import useAppConfig from './info/config'
import registerDrivers from './plugins/drivers'
import useCrypto from './plugins/webcrypto'
import useApiServer from './server'
import useDrivers from './services/driver'
import useHandles from './services/handle'
import useSystem from './services/system'
import useUpdater from './services/updater'
import { logError } from './utilities'
Expand Down Expand Up @@ -98,14 +95,6 @@ app.on('window-all-closed', () => {
}
})

// Make sure all handles have been closed.
const { shutDown } = useHandles()
app.on('will-quit', () => {
process.nextTick(async () => {
await shutDown()
})
})

// Default open or close DevTools by F12 in development
// and ignore CommandOrControl + R in production.
// see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
Expand Down Expand Up @@ -144,7 +133,5 @@ useApiServer()
useCrypto()
useUpdater()
useSystem()
useDrivers()
registerDrivers()

await createWindow()
16 changes: 0 additions & 16 deletions src/main/plugins/drivers.ts

This file was deleted.

31 changes: 31 additions & 0 deletions src/main/routes/drivers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { memo } from 'radash'
import { z } from 'zod'
import useDrivers from '../services/drivers'
import { procedure, router } from '../services/trpc'

const Channel = z.number().int().nonnegative().finite()

const ActivateInputs = z.tuple([z.string().uuid(), z.string().url(), Channel, Channel, Channel])
const PowerInputs = z.tuple([z.string().uuid(), z.string().url()])

const useDriversRouter = memo(function useDriversRoute() {
const drivers = useDrivers()

return router({
all: procedure.query(drivers.all),
get: procedure.input(z.string().uuid()).query(async ({ input }) => {
await drivers.get(input)
}),
activate: procedure.input(ActivateInputs).mutation(async ({ input }) => {
await drivers.activate(...input)
}),
powerOn: procedure.input(PowerInputs).mutation(async ({ input }) => {
await drivers.powerOn(...input)
}),
powerOff: procedure.input(PowerInputs).mutation(async ({ input }) => {
await drivers.powerOff(...input)
})
})
})

export default useDriversRouter
2 changes: 2 additions & 0 deletions src/main/routes/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import useSourcesRouter from './data/sources'
import useUserStoreRouter from './data/storage'
import useSwitchesRouter from './data/switches'
import useTiesRouter from './data/ties'
import useDriversRouter from './drivers'
import useSerialPortRouter from './ports'
import useStartupRouter from './startup'

Expand All @@ -17,6 +18,7 @@ export const useAppRouter = memo(() =>
// Functional service routes
ports: useSerialPortRouter(),
startup: useStartupRouter(),
drivers: useDriversRouter(),
// Data service routes
storage: useUserStoreRouter(),
ties: useTiesRouter(),
Expand Down
Loading

0 comments on commit d6250c7

Please sign in to comment.