Nastya19kiss
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Столкнулась вот с какой проблемой. Как я уже писала Мне необходимо написать драйвер для устройства comusb25755 (так оно определяется в QNX 4.25, используется драйвер usbcom ) под qnx 4.25. Через данное устройство аппаратура, с которой необходимо считывать данные, связана с ПК. Мне нужно записать данные в это устройство. Собственно проблема: для наблюдения процесса записи в устройство использую осциллограф, в результате выполнения моего кода на осциллографе появляется всего лишь один короткий импульс, хотя я записываю в устройство 255 байт. не могу найти ошибку в коде. данные записываю как в обычный com порт. Код: #include <stdio.h> #include "include/BBTYPES.H" #include <string.h> #include <unistd.h> #include <termios.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <signal.h> #include <time.h> int WriteMessage (int Deskriptor, void* Data, int Len) { int n = 0; printf("Len = %d",Len); do { n+=write(Deskriptor, (BYTE*)Data, 1); //printf("%02X ", n); }while (Len--); printf("\n n =%02X\n", n); return n; } int main(void) { BITBUS_MESSAGE Message; int fdusb, fdusbCom, n, m; struct termios options; // char buf[255]; fdusbCom = open("/dev/comusb25755", O_WRONLY|O_NOCTTY); if ( fdusbCom == -1 ) { perror("Error from open_USBCOM"); return EXIT_FAILURE; } printf("fd = %d\n",fdusbCom); tcgetattr(fdusbCom, &options); // cfsetospeed(&options, B115200); cfsetispeed(&options, B115200); // //// options.c_cflag = 0; // //options.c_cflag |= (CLOCAL | CREAD); // // options.c_cflag &= ~PARENB; // options.c_cflag &= ~CSTOPB; // options.c_cflag &= ~CSIZE; // options.c_cflag |= CS8; // //options.c_cflag |= (CLOCAL | CREAD); // options.c_lflag = ~(ICANON|ECHO|ISIG); // tcsetattr(fdusbCom, TCSANOW, &options); Message.Link = 1; Message.Length = 1; Message.Flags = 1; Message.Node = 8; Message.SourceDest = 0; Message.CmdStat = 0; for(int i=0; i<BITBUS_DATA_MAX; i++){ Message.Data[i] = 55; } //Message.Data[1] = 5; //Message.Data[2] = 5; //Message.Data[3] = 5; //Message.Data[4] = 5; //Message.Data[5] = 5; //Message.Data[6] = 5; printf("Write in comus\n"); // n = write(fdusbCom, &Message, sizeof(Message)); WriteMessage (fdusbCom, &Message, sizeof(BITBUS_MESSAGE)); // memset(&Message, 0, sizeof(BITBUS_MESSAGE)); // printf("Read comus and write in usb\n"); n = read(fdusbCom, &Message, sizeof(BITBUS_MESSAGE)); // m = read(fdusb,&Message,sizeof(BITBUS_MESSAGE)); |