Clojure
irMagician

irMagicianをClojureで操作してみる。

大宮技研が販売する赤外線ブラスターであるirMagicianをClojureから扱えるようにするライブラリをつくってみました。

irMagicianは、LinuxだとCDC-ACMのドライバを使用するため、アプリからは/dev/ttyACM0といったデバイスファイルを通じてお話することができ、インターフェースも容易なため、すでに、たくさんの言語用のライブラリがつくられています。(Python, Javascript etc...)

仕様はこちら↓
http://www.omiya-giken.com/?page_id=889

しかし、Clojurianな自分としては、やっぱりClojureからさわりたいので、仕様を読みつつライブラリを書いてみました。
https://gitlab.com/myst3m/irmagician

準備

用意したもの:
- irMagician: (http://www.omiya-giken.com/?page_id=837)

環境:
- Debian GNU/Linux
(RaspbianでもOK)

使い方

READMEに、使い方はある程度、細かく記載したのだけれども、基本操作としてはir-openでポートをオープンして、その後命令を実行する形式で、至って普通な実装だと思います。
with-ir-portというマクロを用いると、この中でclose処理をすますので、明示的にcloseする必要はありません。
例えば、赤外線データの学習をしたいときは以下のようにします。

(with-ir-port (ir-open :path "/dev/ttyACM0")
 (ir-capture))

一々、マクロで包むのがめんどい場合は以下のようにすると、デフォルトで指定のデバイスを使用できます。ただし、最後にir-close!でクローズする必要があります。
ひととおり使い方を書くとこんな感じです。

バージョン表示:

(with-ir-port (ir-open :path "/dev/ttyACM0")
 (ir-version))

学習:

(with-ir-port (ir-open :path "/dev/ttyACM0")
 (ir-capture))

実行:

上記で学習したデータを実行します

(with-ir-port (ir-open :path "/dev/ttyACM0")
 (ir-play))

デフォルトデバイスの指定:

REPLで使用する場合などは、一々マクロでくくるのが面倒なので、以下でデフォルトデバイスを設定して、あとは、(ir-capture)とか(ir-play)とかで実行できます

(set-default-ir-port! (ir-open :host "localhost" :port 9999)

その他、ir-saveとかir-loadとかでJSONファイルをロードしたり、データを表示したりできるので、Clojureで遊んでみたい方はぜひつかってみてください。
REPLでテレビつけたりするとちょっとおもしろいですよ。