diff --git a/src/main/index.ts b/src/main/index.ts index df352fe..aaa7946 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,7 +2,7 @@ import { app, shell, BrowserWindow, ipcMain, Menu, MenuItem } from 'electron' import { join } from 'path' import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' -import nanodevices from './backend/nanodevices' +import nanoSerialApi from './nanoSerialApi' const zoomFactor = 1 const windowWidth = 1111 @@ -95,10 +95,10 @@ app.whenReady().then(() => { optimizer.watchWindowShortcuts(window) }) - ipcMain.handle('nanodevices:list_devices', () => nanodevices.list_devices()) - ipcMain.handle('nanodevices:connect', (event, deviceid) => nanodevices.connect(deviceid)) - ipcMain.handle('nanodevices:disconnect', () => nanodevices.disconnect) - ipcMain.handle('nanodevices:send', (event, ...data) => nanodevices.send(data[0], data[1])) + ipcMain.handle('nanoSerialApi:list_devices', () => nanoSerialApi.list_devices()) + ipcMain.handle('nanoSerialApi:connect', (event, deviceid) => nanoSerialApi.connect(deviceid)) + ipcMain.handle('nanoSerialApi:disconnect', () => nanoSerialApi.disconnect) + ipcMain.handle('nanoSerialApi:send', (event, ...data) => nanoSerialApi.send(data[0], data[1])) const mainWindow = createMainWindow() ipcMain.on('electron:minimizeWindow', () => mainWindow.minimize()) ipcMain.on('electron:toggleMaximizeWindow', () => { @@ -112,29 +112,29 @@ app.whenReady().then(() => { ipcMain.on('electron:openExternal', (_event, url) => shell.openExternal(url)) ipcMain.on('electron:openDevTools', () => mainWindow.webContents.toggleDevTools()) ipcMain.on('electron:reload', () => mainWindow.webContents.reloadIgnoringCache()) - nanodevices.on('nanodevices:device-attached', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:device-attached', (deviceid, ...data) => { console.log('Attached event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'device-attached', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'device-attached', deviceid, ...data) }) - nanodevices.on('nanodevices:device-detached', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:device-detached', (deviceid, ...data) => { console.log('Detached event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'device-detached', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'device-detached', deviceid, ...data) }) - nanodevices.on('nanodevices:device-error', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:device-error', (deviceid, ...data) => { console.log('Error event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'device-error', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'device-error', deviceid, ...data) }) - nanodevices.on('nanodevices:connected', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:connected', (deviceid, ...data) => { console.log('Connected event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'connected', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'connected', deviceid, ...data) }) - nanodevices.on('nanodevices:disconnected', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:disconnected', (deviceid, ...data) => { console.log('Disconnected event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'disconnected', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'disconnected', deviceid, ...data) }) - nanodevices.on('nanodevices:update', (deviceid, ...data) => { + nanoSerialApi.on('nanoSerialApi:update', (deviceid, ...data) => { console.log('Update event', deviceid, data) - mainWindow.webContents.send('nanodevices:event', 'update', deviceid, ...data) + mainWindow.webContents.send('nanoSerialApi:event', 'update', deviceid, ...data) }) const menu = new Menu() for (const menuItem of Object.values(appMenu)) { @@ -172,7 +172,7 @@ app.whenReady().then(() => { Menu.setApplicationMenu(menu) //mainWindow.webContents.openDevTools() - setInterval(() => nanodevices._list(), 1000) + setInterval(() => nanoSerialApi._list(), 1000) app.on('activate', function () { // On macOS it's common to re-create a window in the app when the diff --git a/src/main/backend/nanodevices.ts b/src/main/nanoSerialApi.ts similarity index 88% rename from src/main/backend/nanodevices.ts rename to src/main/nanoSerialApi.ts index 919ffec..b8b37fe 100644 --- a/src/main/backend/nanodevices.ts +++ b/src/main/nanoSerialApi.ts @@ -7,7 +7,7 @@ const NANO_PRODUCT_ID = '1001' const NANO_VENDOR_ID = '303A' const NANO_BAUD_RATE = 115200 -class NanoDevices extends EventEmitter { +class NanoSerialApi extends EventEmitter { all_nano_devices: { [key: string]: PortInfo } = {} connected_nano_devices: { [key: string]: { port: SerialPort } } = {} @@ -25,7 +25,7 @@ class NanoDevices extends EventEmitter { found_nano_devices.push(port.serialNumber) if (this.all_nano_devices[port.serialNumber] === undefined) { this.all_nano_devices[port.serialNumber] = port - this.emit('nanodevices:device-attached', port.serialNumber) + this.emit('nanoSerialApi:device-attached', port.serialNumber) console.log('attached', port.serialNumber) } } @@ -34,7 +34,7 @@ class NanoDevices extends EventEmitter { for (const serialNumber in this.all_nano_devices) { if (found_nano_devices.indexOf(serialNumber) === -1) { delete this.all_nano_devices[serialNumber] - this.emit('nanodevices:device-detached', serialNumber) + this.emit('nanoSerialApi:device-detached', serialNumber) console.log('detached', serialNumber) } } @@ -53,7 +53,7 @@ class NanoDevices extends EventEmitter { if (lines[i].length > 0) { if (lines[i].startsWith('{')) // if its a json object - this.emit('nanodevices:update', serialNumber, lines[i]) + this.emit('nanoSerialApi:update', serialNumber, lines[i]) else console.log('Device: ' + lines[i]) // otherwise just log it } } @@ -94,18 +94,18 @@ class NanoDevices extends EventEmitter { }) port.on('error', (err) => { // forward error to FE - this.emit('nanodevices:error', nano_device.serialNumber, err) + this.emit('nanoSerialApi:error', nano_device.serialNumber, err) }) port.on('close', (err) => { if (err && err.disconnected) { // forward close to FE - this.emit('nanodevices:disconnected', nano_device.serialNumber) + this.emit('nanoSerialApi:disconnected', nano_device.serialNumber) } delete this.connected_nano_devices[nano_device.serialNumber!] }) port.on('open', () => { this.connected_nano_devices[nano_device.serialNumber!] = { port: port } - this.emit('nanodevices:connected', nano_device.serialNumber) + this.emit('nanoSerialApi:connected', nano_device.serialNumber) resolve(nano_device.serialNumber) }) port.on('data', (data) => { @@ -138,6 +138,6 @@ class NanoDevices extends EventEmitter { } } -const nanodevices = new NanoDevices() +const nanoSerialApi = new NanoSerialApi() -export default nanodevices +export default nanoSerialApi diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index a518141..5901c7d 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -1,4 +1,4 @@ -export interface INanoDevicesAPI { +export interface INanoSerialApi { list_devices(): Promise connect(deviceid: string): Promise disconnect(deviceid: string): Promise @@ -10,7 +10,7 @@ export interface INanoDevicesAPI { save(deviceid: string): Promise } -export interface IElectronAPI { +export interface IElectronApi { platform: NodeJS.Platform isDevelopment: boolean minimizeWindow: () => void @@ -26,7 +26,7 @@ export interface IElectronAPI { declare global { interface Window { - nanoDevicesAPI: INanoDevicesAPI - electronAPI: IElectronAPI + nanoSerialApi: INanoSerialApi + electronApi: IElectronApi } } diff --git a/src/preload/index.ts b/src/preload/index.ts index b897d78..903f07d 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,19 +1,19 @@ import { contextBridge, ipcRenderer } from 'electron' // expose an API to choose available devices -contextBridge.exposeInMainWorld('nanoDevicesAPI', { +contextBridge.exposeInMainWorld('nanoSerialApi', { list_devices() { - return ipcRenderer.invoke('nanodevices:list_devices') + return ipcRenderer.invoke('nanoSerialApi:list_devices') }, connect(deviceid) { - return ipcRenderer.invoke('nanodevices:connect', deviceid) + return ipcRenderer.invoke('nanoSerialApi:connect', deviceid) }, disconnect(deviceid) { - return ipcRenderer.invoke('nanodevices:disconnect', deviceid) + return ipcRenderer.invoke('nanoSerialApi:disconnect', deviceid) }, on_event(eventid_filter, callback) { //console.log('attaching filter for ', eventid_filter) - ipcRenderer.on('nanodevices:event', (_event, eventid, deviceid, ...data) => { + ipcRenderer.on('nanoSerialApi:event', (_event, eventid, deviceid, ...data) => { //console.log('Event in ipcRenderer ', eventid, deviceid, data) if (eventid_filter == '*' || eventid_filter == eventid) { callback(eventid, deviceid, ...data) @@ -21,14 +21,14 @@ contextBridge.exposeInMainWorld('nanoDevicesAPI', { }) }, send(deviceid, obj) { - return ipcRenderer.invoke('nanodevices:send', deviceid, JSON.stringify(obj)) + return ipcRenderer.invoke('nanoSerialApi:send', deviceid, JSON.stringify(obj)) }, save(deviceid) { - return ipcRenderer.invoke('nanodevices:send', deviceid, JSON.stringify({ save: true })) + return ipcRenderer.invoke('nanoSerialApi:send', deviceid, JSON.stringify({ save: true })) } }) -contextBridge.exposeInMainWorld('electronAPI', { +contextBridge.exposeInMainWorld('electronApi', { platform: process.platform, isDevelopment: process.env.NODE_ENV !== 'production', minimizeWindow: () => ipcRenderer.send('electron:minimizeWindow'), diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index d66b21d..b361d42 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -6,7 +6,7 @@ import Navbar from '@renderer/components/navbar/Navbar.vue' import { useStore } from '@renderer/store' import { useMessageHandlers } from '@renderer/device' -const { electronAPI, nanoDevicesAPI } = window +const { electronApi, nanoSerialApi } = window const store = useStore() const menuActions = { @@ -15,7 +15,7 @@ const menuActions = { skin: () => store.switchPreviewDeviceModel() } -electronAPI.onMenu((key) => { +electronApi.onMenu((key) => { console.log('menu', key) if (menuActions[key]) { menuActions[key]() @@ -26,20 +26,18 @@ store.fetchProfiles() // TODO remove me! // handle device events const handlers = useMessageHandlers(store) -nanoDevicesAPI.on_event('device-attached', (evt, deviceid, data) => store.device_attached(deviceid)) -nanoDevicesAPI.on_event('device-detached', (evt, deviceid, data) => store.device_detached(deviceid)) -nanoDevicesAPI.on_event('device-error', (evt, deviceid, data) => { +nanoSerialApi.on_event('device-attached', (evt, deviceid, data) => store.device_attached(deviceid)) +nanoSerialApi.on_event('device-detached', (evt, deviceid, data) => store.device_detached(deviceid)) +nanoSerialApi.on_event('device-error', (evt, deviceid, data) => { /* TODO handle connection errors */ }) -nanoDevicesAPI.on_event('connected', (evt, deviceid, data) => store.device_connected(deviceid)) -nanoDevicesAPI.on_event('disconnected', (evt, deviceid, data) => - store.device_disconnected(deviceid) -) -nanoDevicesAPI.on_event('update', (evt, deviceid, data) => { +nanoSerialApi.on_event('connected', (evt, deviceid, data) => store.device_connected(deviceid)) +nanoSerialApi.on_event('disconnected', (evt, deviceid, data) => store.device_disconnected(deviceid)) +nanoSerialApi.on_event('update', (evt, deviceid, data) => { handlers.handle_message(data) }) // get list of the currently attached devices -nanoDevicesAPI.list_devices().then((devs) => store.init_devices(devs)) +nanoSerialApi.list_devices().then((devs) => store.init_devices(devs))