Obsługa FT232R USB UART

0

Witam, mam spory problem i niewielkie doświadczenie w kwestii programowania komunikacji i chciałem prosić kogoś z większym doświadczeniem żeby rzucił okiem na kod. Muszę zrealizować komunikację z pewnym urządzeniem podłączanym do komputera poprzez usb. Moje środowisko to linux + eclipse. Co do urządzenia, komunikacja odbywa się za pomocą ramek, 0xA5 (początek ramki), b1, b2, b3, b4 (4 bajty danych), CRC(8 bitów). Urządzenie do komunikacji wymaga baudrate 115200, znak 8bit, bez bitu parzystości. Napisałem program, który przesyła do urządzenia ramkę mającą zmieniać konfigurację urządzenia, jednak to co wysyłam zdaje się zupełnie nie wpływać na urządzenie. Nie wiem gdzie może być problem, więc chciałbym wykluczyć chociaż jedną z opcji - program.

Wrzucam kawałki kodu odpowiedzialne za konfigurację portu i wysłanie danych.


struct termios config;
    int fd = open(dev_name, O_RDWR);
        if(fd<0){
            cerr<<"unable to open device "<<dev_name<<" for configuration"<<endl;
            return -1;
        }
    if (tcgetattr(fd, &config)) {cerr<<"tcgetattr: Error"<<endl; return -1;}

    config.c_cflag &= ~(CSIZE | PARENB);
    config.c_cflag |= CS8;

    cfsetispeed(&config, B115200);
    cfsetospeed(&config, B115200);

    if (tcsetattr(fd, action, &config)==-1) {cerr<<"tcsetattr: Error"<<endl; return -1;}
    close (fd);
unsigned char bytes[6];
        bytes[0] = 0xA5;
        bytes[1] = 0x01;
        bytes[2] = 0x01;
        bytes[3] = 0x02;
        bytes[4] = 0x00;
        bytes[5] = 0xA9;

        wr = write(fd, bytes, sizeof(test));
        if (wr==-1){
            cerr<<"write error"<<endl;
        }
        cout<<"written bytes: "<<wr<<endl;
0

Dlaczego w parametrach funkcji write używasz sizeof(test), a nie sizeof(bytes)? Dodatkowo, czy przy wywołaniu funkcji write fd jest jeszcze otwarty, wydaje mi się, że go zamykasz wcześniej.

0

To że używam sizeof(test) to jest mój błąd edycyjny, tak że pod tym względem kod jest ok. Fragmenty kodu które pokazałem są kluczowymi cześciami funkcji, a w każdej z tych funkcji na początku wywołuję funkcję open() i close() więc kiedy dochodzi do funkcji write na pewno wszystko to co powinno być otwarte takie jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0