2012-07-24 30 views
1

以下shell命令切換Leopardboard GPIO 31就好:如何控制embedded-linux gpio?

echo 31 > /sys/class/gpio/export 
echo out > /sys/class/gpio/gpio31/direction 
echo 0 > /sys/class/gpio/gpio31/value 
echo 1 > /sys/class/gpio/gpio31/value 
echo 0 > /sys/class/gpio/gpio31/value 

This被用作用於以下的代碼的例子。 任何想法爲什麼下面的.vala代碼不會切換gpio 31?

public void sync() { 
    int fd = -1; 
    fd = open("/sys/class/gpio/export", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync export\n"); 
     return; 
    } 
    write(fd, "31", 3); 
    close(fd); 
    fd = open("/sys/class/gpio/gpio31/direction", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync direction\n"); 
     return; 
    } 
    write(fd, "out", 4); 
    close(fd); 
    fd = open("/sys/class/gpio/gpio31/value", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync value\n"); 
     return; 
    } 
    write(fd, "0", 2); 
    write(fd, "1", 2); 
    Thread.usleep (1000); /* 1ms */ 
    write(fd, "0", 2); 
    close(fd); 
} 

回答

3

echo 31實際上會導致\ X33 \ X31 \ X0A,但你的write的通話將寫\ X33 \ X31 \ X00。試試這樣的:

write(fd, "31\n", 3); 

而且你會想對write的其他調用進行類似的調整。