Qt Programming memo

[個人メモ] [仕事メモ] [アイデア] [Rubyの魔神]
[Qt2クラス索引] [Qt基礎] [QFile] [Qt関連(SRA)] [Qtユーザフォーラム]
[Qt4tutorial] [入門Qt4プログラミング(英語版)] [Qt 4 @ Qt - Linux Life] [Qt2の本(PDF)] [Qt4.6リファレンス]
[The Linux Serial Programming HOWTO] [Qt Programming]
 | 

2010-03-08

cygwinRS232C通信サンプル 11:22

Qt4でWindowsmingw使っているなら、cygwin互換があると思うので、

http://www.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO-3.html#ss3.2

の「非カノニカル入力処理」をベース

http://www.h3.dion.ne.jp/~unisoft/answer/sample01.html

こちらを見ながら、変更

変更したのは以下の通り

これがLinuxcygwinで異なる点

//#define MODEMDEVICE "/dev/ttyS1"
#define MODEMDEVICE "/dev/com3"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>

//#define BAUDRATE B38400
#define BAUDRATE B2400
//#define MODEMDEVICE "/dev/ttyS1"
#define MODEMDEVICE "/dev/com3"
#define _POSIX_SOURCE 1 /* POSIX 準拠のソース */
#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE; 

main()
{
  int fd,c, res;
  struct termios oldtio,newtio;
  char buf[255];

 fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
 if (fd <0) {perror(MODEMDEVICE); exit(-1); }

 tcgetattr(fd,&oldtio); /* 現在のポート設定を待避 */

 bzero(&newtio, sizeof(newtio));
// newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
 newtio.c_cflag = BAUDRATE | CLOCAL | CREAD;

 newtio.c_cflag |= CS8;          // 送受信に8ビット
 newtio.c_cflag &= ~CSTOPB;      // 送受信にストップビットを1
 newtio.c_cflag |= PARENB;       // 送受信にパリティチェックを行う


 newtio.c_cflag &= ~PARODD;      // 送受信に偶数パリティを使用する

 newtio.c_iflag = IGNPAR;
 newtio.c_oflag = 0;

 /* set input mode (non-canonical, no echo,...) */
 newtio.c_lflag = 0;
 
 newtio.c_cc[VTIME]    = 1;   /* キャラクタ間タイマ1/10s単位 */
 newtio.c_cc[VMIN]     = 1;   /* 1文字受け取るまでブロックする */

 tcflush(fd, TCIFLUSH);
 tcsetattr(fd,TCSANOW,&newtio);


 while (STOP==FALSE) {       /* 入力ループ */
   res = read(fd,buf,255);   /* 5 文字入力されたら戻る */
   buf[res]=0;               /* printf を使うために文字列終端をセット */
//   printf(":%s:%d\n", buf, res);
//   printf("%02X ", buf[0]);
   printf(":%02X:\n", (unsigned char)buf[0]);
   if (buf[0]=='z') STOP=TRUE;
 }
 tcsetattr(fd,TCSANOW,&oldtio);
}
 |