借助Vala 手册中出色的文章作为我的指南,创建一些自定义 vapi defs 。但我不确定如何翻译这些类似 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。请在网站上发布建议/更正。我希望你觉得他们有帮助。