Added flashing logic

This commit is contained in:
Sebastian 2024-12-19 13:58:57 +01:00
parent 1f965038fc
commit 238b3a6fae
2 changed files with 41 additions and 6 deletions

View file

@ -1,4 +1,4 @@
{ lib, config, pkgs, mmdvm_host, ... }:
{ lib, config, pkgs, mmdvm_host, mmdvm_firmware, ... }:
with lib;
let
# Shorter name to access final settings a
@ -10,14 +10,36 @@ in
options.services.mmdvm_host = {
enable = mkEnableOption "MMDVMHost service";
package = mkOption {
host_package = mkOption {
default = mmdvm_host.x86_64-linux.default;
type = types.package;
};
firmware_package = mkOption {
default = mmdvm_firmware.x86_64-linux.default;
type = types.package;
};
user = mkOption {
type = types.str;
default = "afg";
};
group = mkOption {
type = types.str;
default = "afg";
};
config-file = mkOption {
type = types.str;
};
usb-tty = mkOption {
type = types.str;
default = "/dev/ttyUSB0";
};
};
@ -25,7 +47,8 @@ in
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = [
cfg.package
pkgs.stm32flash
cfg.host_package
];
systemd.services.mmdvm_host = {
@ -36,13 +59,22 @@ in
serviceConfig = {
Type = "exec";
User = cfg.user;
Group = cfg.group;
Restart = "always";
RestartSec = "3s";
StartLimitIntervalSec = "0";
RuntimeDirectory = "MMDVMHost";
};
script = ''
exec ${cfg.package}/bin/MMDVMHost
if [ ! -e /var/lib/mmdvm/firmware-version ]; then
mkdir -p /var/lib/mmdvm
touch /var/lib/mmdvm/firmware-version
fi
if [ "${cfg.firmware_package}" != "$(cat /var/lib/mmdvm/firmware-version)" ]; then
${pkgs.stm32flash}/bin/stm32flash -w ${cfg.firmware_package}/bin/mmdvm_f4.bin -i ',-dtr,-rts,dtr,,:-dtr,rts,dtr' ${cfg.usb-tty}
echo "{cfg.firmware_package}" > /var/lib/mmdvm/firmware-version
fi
exec ${cfg.package}/bin/MMDVMHost ${cfg.config-file}
'';
};
};

View file

@ -21,7 +21,10 @@
nixosModules.MMDVMHost = { config, pkgs, ... }: {
imports = [ ./MMDVMHost/module.nix ];
_module.args.mmdvm_host = self.packages.x86_64-linux.MMDVMHost;
_module.args = {
mmdvm_host = self.packages.x86_64-linux.MMDVMHost;
mmdvm_firmware = self.packages.x86_64-linux.MMDVMFirmware;
};
};
};
}