cfclient: init at 2025.2 (#410846)

This commit is contained in:
Gaétan Lepage 2025-06-02 06:36:17 +02:00 committed by GitHub
commit 758723bc0c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 218 additions and 0 deletions

View file

@ -0,0 +1,79 @@
{
lib,
python3Packages,
fetchFromGitHub,
qt6,
}:
python3Packages.buildPythonApplication rec {
pname = "cfclient";
version = "2025.2";
pyproject = true;
src = fetchFromGitHub {
owner = "bitcraze";
repo = "crazyflie-clients-python";
tag = version;
hash = "sha256-LCGTMLIfGH59KFwQACyuEQTh/zkGgzXd3e6MkFTgKhA=";
};
strictDeps = true;
buildInputs = [
qt6.qtbase
];
nativeBuildInputs = [
qt6.wrapQtAppsHook
];
dontWrapQtApps = true;
build-system = with python3Packages; [
setuptools
setuptools-scm
];
pythonRelaxDeps = [
"numpy"
"pyqt6"
"vispy"
];
dependencies = with python3Packages; [
appdirs
cflib
numpy
pyopengl
pyserial
pysdl2
pyqtgraph
pyqt6
pyqt6-sip
pyyaml
pyzmq
scipy
setuptools
vispy
];
# No tests
doCheck = false;
# Use wrapQtApp for Python scripts as the manual mentions that wrapQtAppsHook only applies to binaries
postFixup = ''
wrapQtApp "$out/bin/cfclient" \
--set QT_QPA_PLATFORM "wayland" \
--set XDG_CURRENT_DESKTOP "Wayland" \
''${qtWrapperArgs[@]}
'';
meta = {
description = "Host applications and library for Crazyflie drones written in Python";
homepage = "https://github.com/bitcraze/crazyflie-clients-python";
changelog = "https://github.com/bitcraze/crazyflie-clients-python/releases/tag/${version}";
license = lib.licenses.gpl2Only;
maintainers = [ lib.maintainers.brianmcgillion ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,90 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
setuptools-scm,
libusb-package,
numpy,
packaging,
pyserial,
pyusb,
scipy,
pytestCheckHook,
pyyaml,
udevCheckHook,
}:
buildPythonPackage rec {
pname = "cflib";
version = "0.1.28";
pyproject = true;
src = fetchFromGitHub {
owner = "bitcraze";
repo = "crazyflie-lib-python";
tag = version;
hash = "sha256-vGqwQVD80NcFJosVAmqj66uxYNoVtAqzVhVQiuWP5yM=";
};
strictDeps = true;
build-system = [
setuptools
setuptools-scm
];
pythonRelaxDeps = [ "numpy" ];
dependencies = [
libusb-package
numpy
packaging
pyserial
pyusb
scipy
];
disabledTestPaths = [
# exception: Cannot find a Crazyradio Dongle (HW required)
"sys_test/single_cf_grounded/"
"sys_test/swarm_test_rig/"
];
pythonImportsCheck = [ "cflib" ];
nativeCheckInputs = [
pytestCheckHook
pyyaml
];
# The udevCheckHook is used to verify udev rules
# requires diInstallCheck to be enabled, which is default for pythonPackages
nativeInstallCheckInputs = [
udevCheckHook
];
# Install udev rules as defined
# https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/
postInstall = ''
# Install udev rules
mkdir -p $out/etc/udev/rules.d
cat <<EOF > $out/etc/udev/rules.d/99-bitcraze.rules
# Crazyradio (normal operation)
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev"
# Bootloader
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev"
# Crazyflie (over USB)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0664", GROUP="plugdev"
EOF
'';
meta = {
description = "Python library for the Crazyflie quadcopter by Bitcraze";
homepage = "https://github.com/bitcraze/crazyflie-lib-python";
changelog = "https://github.com/bitcraze/crazyflie-lib-python/releases/tag/${version}";
license = lib.licenses.gpl2Only;
maintainers = [ lib.maintainers.brianmcgillion ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,43 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
setuptools-scm,
tomli,
importlib-resources,
libusb1,
}:
buildPythonPackage rec {
pname = "libusb-package";
version = "1.0.26.3";
pyproject = true;
src = fetchFromGitHub {
owner = "pyocd";
repo = "libusb-package";
tag = "v${version}";
hash = "sha256-4zTyaidpSlledTcEztWzRgwj43oNV7xWrhMXCE9Qz3k=";
};
build-system = [
setuptools
setuptools-scm
tomli
];
dependencies = [
importlib-resources
libusb1
];
meta = {
description = "Python package for simplified libusb distribution and usage with pyOCD";
homepage = "https://github.com/pyocd/libusb-package";
changelog = "https://github.com/pyocd/libusb-package/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = [ lib.maintainers.brianmcgillion ];
platforms = lib.platforms.linux;
};
}

View file

@ -2368,6 +2368,8 @@ self: super: with self; {
cfgv = callPackage ../development/python-modules/cfgv { };
cflib = callPackage ../development/python-modules/cflib { };
cfn-flip = callPackage ../development/python-modules/cfn-flip { };
cfn-lint = callPackage ../development/python-modules/cfn-lint { };
@ -8043,6 +8045,10 @@ self: super: with self; {
libtorrent-rasterbar =
(toPythonModule (pkgs.libtorrent-rasterbar.override { python3 = python; })).python;
libusb-package = callPackage ../development/python-modules/libusb-package {
inherit (pkgs) libusb1;
};
libusb1 = callPackage ../development/python-modules/libusb1 { inherit (pkgs) libusb1; };
libusbsio = callPackage ../development/python-modules/libusbsio { inherit (pkgs) libusbsio; };