Skip to content

Commit

Permalink
Модуль загрузчика для macOS (#252)
Browse files Browse the repository at this point in the history
  • Loading branch information
Roundabout1 authored May 5, 2024
1 parent f496e39 commit e0341d5
Show file tree
Hide file tree
Showing 6 changed files with 213 additions and 12 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
- Для прошивки могут понадобиться драйвера прошиваемых устройств (например, нестандартных Arduino или необновлённых системах).
- Linux-дистрибутивы с менеджером **Systemd**.
- Для прошивки потребуется `libusb`, для опроса устройств также используется `udevadm`. Возможна работа с `eudev`, но это не тестировалось.
- macOS (тестировалось на 14-ой версии "Sonoma")
- См. раздел [Безопасность](https://github.com/kruzhok-team/lapki-client/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA%D0%B0-%D0%BD%D0%B0-macOS#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C) для решения проблем с открытием Lapki IDE.

Также для прошивки потребуется **avrdude**. В Linux достаточно установить утилиту встроенным пакетным менеджером, под Windows предлагается установить [форк от maurisgreuel](https://github.com/mariusgreuel/avrdude), положить в рабочую директорию или PATH.
Также для прошивки потребуется **avrdude**. В Linux достаточно установить утилиту встроенным пакетным менеджером, под Windows предлагается установить [форк от maurisgreuel](https://github.com/mariusgreuel/avrdude), положить в рабочую директорию или PATH. Инструкцию по установке avrdude на macOS можно посмотреть [здесь](https://github.com/kruzhok-team/lapki-client/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA%D0%B0-%D0%BD%D0%B0-macOS#avrdude).

## Разработка

Expand Down
199 changes: 197 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"electron-settings": "^4.0.2",
"fast-xml-parser": "^4.3.2",
"find-free-port": "^2.0.0",
"fix-path": "^3.0.0",
"isomorphic-ws": "^5.0.0",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
Expand Down
Binary file added resources/modules/darwin/lapki-flasher
Binary file not shown.
10 changes: 2 additions & 8 deletions src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,7 @@ function createWindow(): void {
//Получаем ответ из рендера и закрываем приложение
ipcMain.on('closed', (_) => {
ModuleManager.stopModule('lapki-flasher');
if (process.platform !== 'darwin') {
app.exit(0);
}
app.exit(0);
});

// Вместо создания новых окон мы передаём ссылку в систему.
Expand Down Expand Up @@ -144,12 +142,8 @@ app.whenReady().then(() => {
});

// Завершаем приложение, когда окна закрыты.
// Кроме macOS, там выход явный, через Cmd+Q.
app.on('window-all-closed', () => {
// явно останавливаем загрузчик, так как в некоторых случаях он остаётся висеть
ModuleManager.stopModule('lapki-flasher');
if (process.platform !== 'darwin') {
app.quit();
}
//
app.quit();
});
11 changes: 10 additions & 1 deletion src/main/modules/ModuleManager.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import settings from 'electron-settings';
// импорт старой версии (3.0 вместо 4.0), так как новая версия требует ESM
import fixPath from 'fix-path';

import { ChildProcessWithoutNullStreams, spawn } from 'child_process';
import { existsSync } from 'fs';
import path from 'path';

export type ModuleName = 'lapki-flasher';

export class ModuleStatus {
Expand Down Expand Up @@ -47,6 +48,13 @@ export class ModuleManager {
let modulePath: string = '';
let osPath = '';
switch (platform) {
case 'darwin': {
// позволяет унаследовать $PATH, то есть системный путь
// это нужно для того, чтобы загрузчик смог получить доступ к avrdude, если путь к нему прописан в $PATH
fixPath();
// break не нужен, так как дальнейшие действия одинаковы для Linux и macOS
}
// eslint-disable-next-line no-fallthrough
case 'linux': {
osPath = `${basePath}/modules/${platform}`;
modulePath = `${osPath}/${module}`;
Expand Down Expand Up @@ -99,6 +107,7 @@ export class ModuleManager {
let avrdudePath = '';
let configPath = '';
switch (platform) {
case 'darwin':
case 'linux':
avrdudePath = `${osPath}/avrdude`;
configPath = `${osPath}/avrdude.conf`;
Expand Down

0 comments on commit e0341d5

Please sign in to comment.