با سلام
من یه بورد الکترونیکی دارم که ۵ بسته اطلاعات به صورت سریال ارسال میکنه و هر ۶۰ ثانیه این اطلاعات ۳۰۰ بار ارسال میشن.
شکل بسته های ارسالی هم بدین گونه می باشد.
0x16/0x82/0xA8/0xA5/0xE5
چون این اطلاعات متغییر هستن و مدام عوض میشن باید یه برنامه ای بنویسم که اطلاعات دریافتی رو آنلاین چک کنه.از برنامه زیر و تعداد بسیار زیادی برنامه ی آماده استفاده کردم اما اون چیزی که میخوام نشد.
این برنامه :
printf("Start\n");
int fd, res;
struct termios oldtio,newtio;
char buf[255];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
if (fd <0) {
printf("Failed to open %s", MODEMDEVICE);
} // if
else {
printf("Port Opened\n");
tcgetattr(fd,&oldtio); /* save current port settings */
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
// set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 5; /* blocking read until 5 chars received */
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
res = read(fd,buf,255); /* returns after 5 chars have been input */
buf[res]=0; /* so we can printf... */
printf("Input: %X\n", buf);
tcsetattr(fd,TCSANOW,&oldtio);
} // else */
printf("Done\n");
الان کدی هم که این برنامه یا سایر برنامه هایی که تست کردم به شکل bf3d78ead7 و... هستند که هر بار کامپایل مجدد میکنم کدها تغییر میکنن.
که کلا اشتباهه چون من کدها رو از طریق برنامه cutecom و serial port terminal کاملا منظم و بدون تغییر دریافت میکنم.
از دوستان کسی میتونه این کد رو تغییراتی بده.
زبان برنامه نویسیم سی هستش
کامپایلر gcc
محیط کد نویسی هم کد بلاکس
سرعت ارسال سریال هم ۱۱۵۲۰۰
از /dev/ttyUSB0 اطلاعات رو میگیرم