2

私のガイドとして、Vala マニュアルの優れた記事を参考にして、いくつかのカスタム vapi 定義を作成します。しかし、次のような C 関数のようなマクロを変換する方法がわかりません。

// GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y)
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
#define OUT_GPIO(g) *(gpio+((g)/10)) |=  (1<<(((g)%10)*3))
#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
#define GPIO_SET *(gpio+7)  // sets   bits which are 1 ignores bits which are 0
#define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0
#define GET_GPIO(g) (*(gpio+13)&(1<<g)) // 0 if LOW, (1<<g) if HIGH
#define GPIO_PULL *(gpio+37) // Pull up/pull down
#define GPIO_PULLCLK0 *(gpio+38) // Pull up/pull down clock

C コードは次のgpioように宣言します。

// I/O access
volatile unsigned *gpio;

マクロINP_GPIO(g)を void 関数として宣言する必要がありますか?

[CCode (cname = "INP_GPIO")]
public void inp_gpio(int val);

または以下のように代理人として?

public delegate void inp_gpio(int val);

VAPI ファイルの C コードから Vala 型を派生させる場合、どの条件に従う必要がありますか?

更新: 私は自分の valaIOT プロジェクトの作業を続けているため、以下の vapis はhttps://gitlab.com/gpaslanis/valaiot/tree/master/vapisで維持されています。サイトに推奨事項/修正を投稿してください。それらがお役に立てば幸いです。

4

1 に答える 1