ブログ

Armadillo-IoTでgpioctrlを使う

at_kazutaka.bito
2015年5月7日 20時28分

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"