Armadillo-440シリーズのプロダクトディレクトリにあるGPIO制御のプログラムのgpioctrlを Armadillo-IoTで使用できるようにしてみた。
1.Armadillo-IoTのプロダクトディレクトリにgpioctrlを置く
ここでは、標準のプロダクトディレクトリ"Armadillo-IoTG-Std"を"my-iot"という名前にコピーした プロダクトディレクトリを使う。
[atde ~]$ cd atmark-dist/vendors/AtmarkTechno [atde ~/atmark-dist/vendors/AtmarkTechno]$ cp -a Armadillo-IoTG-Std my-iot [atde ~/atmark-dist/vendors/AtmarkTechno]$ cd my-iot [atde ~/atmark-dist/vendors/AtmarkTechno/my-iot]$ cp -a ../Armadillo-4x0.Common/gpioctrl ./
2.Makefileにgpioctrlを追加する
[atde ~/atmark-dist/vendors/AtmarkTechno/my-iot]$ gedit Makefile でMakefileをエディタで開いて、下記のようにSUBDIRの指定の末尾に SUBDIR_y += gpioctrl/ を追加する。
SUBDIR_y = SUBDIR_$(CONFIG_VENDOR_SWMGR_SWMGR) += swmgr/ SUBDIR_$(CONFIG_VENDOR_THERMALTRIGGER_THERMALTRIGGER) += thermaltrigger/ SUBDIR_$(CONFIG_VENDOR_VINTRIGGER_VINTRIGGER) += vintrigger/ SUBDIR_$(CONFIG_VENDOR_AWL12_AERIAL) += awl12/ SUBDIR_$(CONFIG_VENDOR_AWL13_AWL13) += awl13/ SUBDIR_y += gpioctrl/
3.gpioctrlのソースコードを編集する
今回は、 Armadillo-IoT ゲートウェイスタンダードモデル製品マニュアル6.6. GPIO 表6.11 アドオンインターフェースのGPIOディレクトリ より、 CON1 52ピン:gpio22 CON1 53ピン:gpio24 を制御できるようにする。 備考) これらの端子は、Armadillo-IoT開発セットに付属のArmadillo-IoT RS232Cアドオンモジュールを Armadillo-IoTのCON1アドオンインタフェースに接続した場合、 下記のようにRS232CアドオンモジュールのCON4 テストインターフェースで使用できる。
Armadillo-IoTのCON1 52ピン:gpio22 --->RS232CアドオンモジュールのCON4 52ピン Armadillo-IoTのCON1 53ピン:gpio24 --->RS232CアドオンモジュールのCON4 53ピン
[atde ~/atmark-dist/vendors/AtmarkTechno/my-iot]$ cd gpioctrl で、gpioctrlのディレクトリに移動して [atde ~/atmark-dist/vendors/AtmarkTechno/my-iot/gpioctrl]$ gedit gpiolib.c でgpiolib.cをエディタで開いて、 static char *gpio_num2id(unsigned long num) を下記のように変更する。(コメントアウトした箇所はオリジナルの部分)
static char *gpio_num2id(unsigned long num) { switch (num) { case GPIO0: return "gpio22"; case GPIO1: return "gpio24"; /* case GPIO0: return "CON9_21"; case GPIO1: return "CON9_22"; case GPIO2: return "CON9_23"; case GPIO3: return "CON9_24"; case GPIO4: return "CON9_25"; case GPIO5: return "CON9_26"; case GPIO6: return "CON9_27"; case GPIO7: return "CON9_28"; case GPIO8: return "CON9_11"; case GPIO9: return "CON9_12"; case GPIO10: return "CON9_13"; case GPIO11: return "CON9_14"; case GPIO12: return "CON9_15"; case GPIO13: return "CON9_16"; case GPIO14: return "CON9_17"; case GPIO15: return "CON9_18"; */ default: return NULL; } }
[atde ~/atmark-dist/vendors/AtmarkTechno/my-iot/gpioctrl]$ gedit option.c でoption.cをエディタで開いて、 struct sub_param com_sub_param[] を下記のように変更する。(コメントアウトした箇所はオリジナルの部分)
struct sub_param com_sub_param[] = { { COM_SUB_GPIO0, "gpio22" }, { COM_SUB_GPIO1, "gpio24" }, /* { COM_SUB_GPIO0, "gpio0" }, { COM_SUB_GPIO1, "gpio1" }, { COM_SUB_GPIO2, "gpio2" }, { COM_SUB_GPIO3, "gpio3" }, { COM_SUB_GPIO4, "gpio4" }, { COM_SUB_GPIO5, "gpio5" }, { COM_SUB_GPIO6, "gpio6" }, { COM_SUB_GPIO7, "gpio7" }, { COM_SUB_GPIO8, "gpio8" }, { COM_SUB_GPIO9, "gpio9" }, { COM_SUB_GPIO10, "gpio10" }, { COM_SUB_GPIO11, "gpio11" }, { COM_SUB_GPIO12, "gpio12" }, { COM_SUB_GPIO13, "gpio13" }, { COM_SUB_GPIO14, "gpio14" }, { COM_SUB_GPIO15, "gpio15" }, */ { COM_SUB_ALL , "all" }, { COM_SUB_END, "" }, };
4.makeしてイメージをArmadillo-IoTに書き込む
[atde ~/atmark-dist/vendors/AtmarkTechno/my-iot/gpioctrl]$ cd ~/atmark-dist [atde ~/atmark-dist]$ make でmakeして生成されたイメージをArmadillo-IoTに書き込む。
5.使用するgpioのGPIOクラスディレクトリを追加する
上記4のイメージを書き込んで、Armadillo-IoTを起動後、 Armadillo-IoT ゲートウェイスタンダードモデル製品マニュアル6.6. GPIO 6.6.1. GPIOクラスディレクトリを作成する のように、今回使用するgpio22/24のGPIOクラスディレクトリを追加する。
[armadillo ~]# echo 22 > /sys/class/gpio/export [armadillo ~]# echo 24 > /sys/class/gpio/export
6.gpioctrlを使ってみる
下記に使い方の例を示す。
CON1 52ピン:gpio22を出力で使って、Highを出力後、lowを出力する。
[armadillo ~]# gpioctrl --set=gpio22 --mode=output [armadillo ~]# echo 1 > /sys/class/gpio/gpio22/value [armadillo ~]# echo 0 > /sys/class/gpio/gpio22/value
CON1 53ピン:gpio24を入力で使って、High/lowを確認する
[armadillo ~]# gpioctrl --set=gpio24 --mode=input [armadillo ~]# cat /sys/class/gpio/gpio24/value
CON1 53ピン:gpio24を入力で使って、立ち上がりエッジで"interrupted"を標準出力する。
[armadillo ~]# gpioctrl --set=gpio24 --mode=input --type=rising-edge --debounce --handler="echo interrupted"