Sto costruendo un'applicazione per il raspberry pi e uso pi4j come dipendenza per Software PWM su GPIO. Mi piacerebbe testare il mio codice sul mio computer locale, quindi mi piacerebbe compilare il mio codice senza la dipendenza pi4j e saltare le chiamate al metodo nella libreria.compilazione condizionale per test/distribuzione build con raspberry pi
codice Esempio:
(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 richiede la libreria wiringPi C, che è disponibile solo sul pi lampone (che ha un senso). Per testare la mia macchina di sviluppo sarebbe sufficiente vedere la stampa del registro. Non voglio commentare le chiamate al metodo :import
e al test, vorrei una soluzione più elegante.
Ok pulito, sembra che funzioni. Hai detto che la compilazione condizionale potrebbe non essere il modo giusto per affrontarlo; cosa suggeriresti invece? – quantumbyte
Si può decidere in fase di esecuzione se caricare la classe Pi e, se lo si desidera, fare qualcosa come (-> "com.pi4j.wiringpi.SoftPwm" Class/forName (.getMethod "softPwmWrite" arg-types) (.invoke nil pin vals)). Se non si esegue questo codice, la classe Pi non verrà caricata. Non: importa. –
Ok, grazie, vedrò cosa si adatta meglio, la seconda opzione non sembra però più pulita. – quantumbyte