Je construis une application pour le pi de framboise et utilise pi4j comme dépendance pour le logiciel PWM sur GPIO. Je voudrais tester mon code sur ma machine locale, donc je voudrais compiler mon code sans la dépendance de pi4j et passer les appels de méthode à la bibliothèque.compilation conditionnelle pour test/deploy build avec framboise pi
code Exemple:
(ns led-server.model
(:require [clojure.tools.logging :as log])
(:import [com.pi4j.wiringpi SoftPwm Gpio])) ;; pi4j dependency, only compiles on rPi
(defn- soft-pwm-write [pin value]
(let [ival (Math/round (double (* value RANGE)))]
(SoftPwm/softPwmWrite pin ival) ;; call to pi4j. This is what I want to skip
(log/info "pin" pin "set to" ival))
)
pi4j nécessite la bibliothèque wiringPi C, qui est disponible uniquement sur le pi de framboise (ce qui est logique). Pour tester sur ma machine dev il suffirait de voir l'impression du journal. Je ne veux pas commenter les :import
et les appels de méthode pour les tests, je voudrais une solution plus élégante.
Ok, c'est comme si ça pouvait marcher. Vous avez mentionné que la compilation conditionnelle n'est peut-être pas la bonne façon d'aborder cela; que suggérez-vous plutôt? – quantumbyte
Vous pouvez décider à l'exécution s'il faut charger la classe Pi et, si vous le souhaitez, faire quelque chose comme (-> "com.pi4j.wiringpi.SoftPwm" Class/forName (.getMethod "softPwmWrite" arg-types) (.invoke nul val de broche)). Si vous n'exécutez pas ce code, la classe Pi ne sera pas chargée. Ne pas: importer. –
Ok merci, je vais voir ce qui va mieux, la deuxième option ne semble pas plus propre. – quantumbyte