ÔÚLinux´®¿Ú±à³ÌµÄһЩÎÊÌâ½â¾ö

ÔÚLinux´®¿Ú±à³ÌµÄһЩÎÊÌâ½â¾ö

ÆäʵÔÚlinux϶Դ®¿ÚµÄÉèÖÃÖ÷ÒªÊÇͨ¹ýtermiosÕâ¸ö½á¹¹ÌåʵÏֵ쬵«ÊÇÕâ¸ö½á¹¹ÌåȴûÓÐÌṩ¿ØÖÆRTS»ò»ñµÃCTSµÈ´®¿ÚÒý½Å״̬µÄ½Ó¿Ú£¬¿ÉÒÔͨ¹ýioctlϵͳµ÷ÓÃÀ´»ñµÃ/¿ØÖÆ¡£ »ñµÃ£º

ioctl(fd, TIOCMGET, &controlbits); if (controlbits & TIOCM_CTS) printf(¡°ÓÐÐźÅ\\n¡±); else

printf(¡°ÎÞÐźÅ\\n¡±); ÉèÖãº

ioctl(fd, TIOCMGET, &ctrlbits)£» if (flag)

ctrlbits |= TIOCM_RTS; else

ctrlbits &= ~TIOCM_RTS; ioctl(fd, TIOCMSET, &ctrlbits);

ÆäʵTIOCM_RTSÓÐЧºóÊǰѴ®¿ÚµÄRTSÉèÖÃΪÓÐÐźţ¬µ«´®¿ÚµÄµçƽΪµÍʱÊÇÓÐÐźţ¬Îª¸ßʱΪÎÞÐźţ¬ºÍÓÃ

TIOCMGET»ñµÃµÄ״̬ÕýºÃÏà·´£¬Ò²¾ÍÊÇ˵

TIOCMGET/TIOCMSETÖ»ÊÇ»ñµÃ/¿ØÖÆ´®¿ÚµÄÏàÓ¦Òý½ÅÊÇ·ñÓÐÐźţ¬²¢²»·´Ó¦µ±Ç°´®¿ÚµÄÕæÊµµçƽ¸ßµÍ¡£

ÍøÉÏÐí¶àÁ÷ÐеÄlinux´®¿Ú±à³ÌµÄ°æ±¾Öж¼Ã»¶Ôc_iflag£¨termios³ÉÔ±±äÁ¿£©Õâ¸ö±äÁ¿½øÐÐÓÐЧµÄÉèÖã¬ÕâÑù´«ËÍASCIIÂëʱûʲôÎÊÌ⣬

µ«´«ËͶþ½øÖÆÊý¾ÝʱÓöµ½0x0d,0x11ºÍ0x13È´»á±»¶ªµô¡£²»ÓÃ˵Ҳ֪µÀ£¬Õ⼸¸ö¿Ï¶¨ÊÇÌØÊâ×Ö·û£¬±»ÓÃ×÷ÌØÊâ¿ØÖÆÁË¡£¹ØµôICRNLºÍIXONÑ¡Ïî ¼´¿É½â¾ö¡£

c_iflag &= ~(ICRNL | IXON); 0x0d »Ø³µ·ûCR 0x11 ^Q VSTART×Ö·û 0x13 ^S VSTOP×Ö·û

ICRNL ½«ÊäÈëµÄCRת»»ÎªNL IXON ʹÆð¶¯/Í£Ö¹Êä³ö¿ØÖÆÁ÷Æð×÷Óà ÔÚ¡¶UNIX»·¾³¸ß¼¶±à³Ì

µÚ¶þ°æ¡·µÚ18ÕµÚ11С½Ú¿´µ½°ÑÖÕ¶ËI/OÉèÖÃΪԭʼģʽ£¨´®¿ÚͨѶ¾ÍÊÇÖÕ¶ËI/OµÄԭʼģʽ£©Ê±ÊäÈëÊôÐÔÉèÖÃΪ

term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);

ÆÁ±ÎÁËÐí¶àÊôÐÔ£¬¹Ö²»µÃÓÐÈË˵Èç¹ûÊÇʹÓô®¿ÚͨѶc_iflagºÍc_oflag¶¼ÉèÖÃΪ0¾ÍÐÐÁË£¡ ÒÔÏÂÊÇÎÒµÄÉèÖõÄÒ»Ð©ÖØÒªµÄ´®¿ÚÊôÐÔ term.c_cflag |= CLOCAL | CREAD;

term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

term.c_oflag &= ~OPOST;

term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);

static void request_send(void) {

ioctl(fd,

TIOCMGET, &status);

status

&= ~TIOCM_RTS; // RTS Òý½Å¸ßµçƽ

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4