Avatar billede bandersen2200 Nybegynder
24. juli 2011 - 01:14 Der er 7 kommentarer og
1 løsning

C Program til Linux - Læs: Linux input subsystem

Hej

Jeg prøver at skrive et C program der læser data fra et accelerometer på en ARM processor der kører Linux Kernel 2.6.

Jeg kan tilgå data på de 3 kanaler fra accelerometret på følgende 2 måder:

1:
system("printevent ai");
Udskriver alle 3 kanaler løbende efter hinanden.

2:
system("cat /sys/class/sbc2800/ai8/value");
system("cat /sys/class/sbc2800/ai9/value");
system("cat /sys/class/sbc2800/ai10/value");

Men hvordan opsamler jeg disse værdier ? Eller er der en helt anden måde at læse data fra Subsystem ?

Håber i kan hjælpe.
Avatar billede arne_v Ekspert
24. juli 2011 - 01:27 #1
fopen("/sys/class/sbc2800/ai8/value", "r") og laes derfra ??
Avatar billede bandersen2200 Nybegynder
24. juli 2011 - 01:48 #2
Hej

Jeg har prøvet følgende:

        int fd = -1;
    fd = fopen("/sys/class/sbc2800/ai8/value", "r");
    if(fd < 0) {
        printf("\nUnable to read from the device\n");
    }
    printf("Output %d",fd);
    close (fd);

Output: 228~

Som er forkert, det burde være et tal i størrelsen: 3824120
Avatar billede bandersen2200 Nybegynder
24. juli 2011 - 02:01 #3
Tak, fik det til at virke :)

int main(void) {
    printf("Start");
    int i;
    FILE *fd;
    fd = fopen("/sys/class/sbc2800/ai8/value", "r");
    if(fd < 0) {
                    printf("\nUnable to read from the device\n");
    }
    fscanf(fd, "%d", &i);
    printf("i: %d",i);
    fprintf(fd, "Testing...\n");
    fclose (fd);
    printf("End");
    //puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    return EXIT_SUCCESS;
}

Point ? Tak for hjælpen endnu en gang.
Avatar billede bandersen2200 Nybegynder
24. juli 2011 - 02:03 #4
Hej arne_v

Fik det til at virke med fopen:

printf("Start");
    int i;
    FILE *fd;
    fd = fopen("/sys/class/sbc2800/ai8/value", "r");
    if(fd < 0) {
                    printf("\nUnable to read from the device\n");
    }
    fscanf(fd, "%d", &i);
    printf("i: %d",i);
    fprintf(fd, "Testing...\n");
    fclose (fd);
    printf("End");
    //puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    return EXIT_SUCCESS;

Point ? Tak for hjælpen endnu en gang :)
Avatar billede arne_v Ekspert
24. juli 2011 - 02:53 #5
svar
Avatar billede arne_v Ekspert
24. juli 2011 - 03:30 #6
Husk at det er:

int fd;
...
fd = open(...);

men:

FILE *fp;
...
fp = fopen(...);
Avatar billede bandersen2200 Nybegynder
24. juli 2011 - 10:38 #7
Så hvilken skal bruges ?  Prøvede med :

Int fd;

...

fd =open();

Men det virkede ikke.
Avatar billede arne_v Ekspert
24. juli 2011 - 17:44 #8
fscanf kraever FILE og fopen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester