CUIインターフェースで下記のプログラムを作成し、
オープン出来ますが、ポートへの出力が出来ません、
この件に関してコメント頂けますと大変助かります。
//aCUI_rs232c.pro
######################################################################
Automatically generated by qmake (2.01a) ? 4? 20 11:01:10 2017
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
Input
SOURCES += main.cpp
//main.cpp
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<termios.h> //ok
#include<unistd.h> //ok
#include<fcntl.h> //ok
#define BAUDRATE B600 //B38400 // 通信速度の設定
#define MODEMDEVICE "/dev/ttyS0" // デバイスファイルの指定:COM1
#define SERIAL_PORT "/dev/ttyS0" // デバイスファイル
#define FALSE 0
#define TRUE 1
#define MC 4 // 読み込む文字数 4-->1
int bbb();
int main(){
bbb();
return 0;
}
int bbb(){
volatile int STOP=FALSE;
int fd, res, i; // fd:ファイルディスクリプタ res:受け取った文字数
struct termios oldtio, newtio;// 通信ポートを制御インターフェイス
unsigned char bufR[255]; // 受信文字を格納
unsigned char bufW[4]={'A','B','C','D'}; // 送信文字を格納
//警告: narrowing conversion of '192' from 'int' to 'char' inside { }
//is ill-formed in C++11 [-Wnarrowing]
//sudo chmod 666 /dev/ttyS0 で パーミションが許可された
if((fd=open(MODEMDEVICE, O_RDWR | O_NOCTTY))== -1){
//if((fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY))== -1){
// O_RDWR:読み書き両用 O_NOCTTY:tty制御をしない
perror(MODEMDEVICE);
printf("Open error\n");
exit(-1);
}
printf("Open OK\n");
//emit signal();
tcgetattr(fd, &oldtio); // 現在のシリアルポートの設定を退避させる
bzero(&newtio, sizeof(newtio)); // 新しいポートの設定の構造体をクリア
newtio.c_cflag= (BAUDRATE | CS8 | CLOCAL | CREAD);
//newtio.c_cflag= (BAUDRATE | CS8 );
// CRTSCTS:フロー制御有り CS8:8ビット、ノンパリティ、ストップビット1
// CLOCAL:モデムの状態信号を無視 CREAD:受信可能にする
newtio.c_iflag=IGNPAR; // IGNPAR:パリティエラーの文字は無視
newtio.c_oflag=0; // rawモード
newtio.c_lflag=0; // 非カノニカル入力
newtio.c_cc[VTIME]=0; // キャラクタ間タイマは未使用
newtio.c_cc[VMIN]=MC; // MC文字受け取るまでブロックする
tcflush(fd,TCIFLUSH); // ポートのクリア
tcsetattr(fd, TCSANOW, &newtio); // ポートの設定を有効にする
write(fd, bufW, sizeof(bufW));
//QString str;
int cnt=10;
while(STOP==FALSE){
//QThread::msleep(10);
//str=QString("cnt=%1").arg(cnt,4,10);
//qDebug("%s", qPrintable(str));
res=read(fd, bufR, 255);
if(--cnt<1)break;
for(i=0; i<res; i++){
if(bufR[i]==0xC0 || true){
STOP=true;
printf("Get the data\n");
break;
}
printf("%c", bufR[i]);
if((i%4)==0){
printf("\n");
}
}//for
}//while
tcsetattr(fd, TCSANOW, &oldtio); // 退避させた設定に戻す
close(fd); // COM1のシリアルポートを閉じる
printf("Port is closed\n");
return 0;
}
以上、宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー