간단한 프로그램 질문이요...소스도 함께 올렸습니다....답변 꼭

leo~~~~의 이미지

우선 소스부터요.....Qt를 이용한 시리얼 통신 프로그램인데요..
프로그램이라고 할수도 없지만....^^;

====================송신 프로그램====================
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define BAUDRATE B115200
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

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

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_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = 0;

newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;

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

strcpy(buf, "hihihi");
res = write(fd, buf, (int) strlen(buf));
buf[res] = 0;
printf(":%s :%d\n", buf, res);

tcsetattr(fd,TCSANOW,&oldtio);

}

============수신 프로그램===================
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <qapplication.h>
#include <qpainter.h>

#define BAUDRATE B115200
#define MODEMDEVICE "/dev/ttySA0"
#define _POSIX_SOURCE 1

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

class mywid:public QWidget
{
public:
mywid();
private:
void paintEvent(QPaintEvent*);
};

mywid::mywid()
{
setCaption("hi");
}

void mywid::paintEvent(QPaintEvent*)
{
QPainter p(this);

int fd, res;
struct termios oldtio, newtio;
char buf[5];

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_iflag = IGNPAR | ICRNL;
newtio.c_oflag = OPOST | ONLCR;
newtio.c_lflag = ICANON | ECHO;

newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 5;

while(STOP==FALSE) {
res = read(fd,buf,5);
buf[res] = 0;
p.drawText(10,10,buf);
printf(":%s:%d\n", buf, res);
if(buf[0]=='z') STOP==TRUE;
}

tcsetattr(fd,TCSANOW,&oldtio);

}

int main(int argc, char **argv)
{
QApplication app(argc, argv);
mywid mw;

app.setMainWidget(&mw);
mw.show();

return app.exec();
}

여기저기서 막 보고해서 했습니다.....
제가 원하는게 minicom으로 수신프로그램을 실행해서
PDA에 위젯을 하나띄워놓고
다른 리눅스 터미널에서 송신프로그램을 시키면
송신프로그램에 의해서 전송된 데이터가
PDA의 위젯에 나타나게 하는것...!!!!
근데요..제가 쫌더 괜찮게 만들어 보려고
쪼끔 어떤 부분을 바꿨는데요....
그리고 나서 병원을 갔다왔는데......치료받는게 너무 아팠는지....
어떤 부분을 고쳤는지 기억이 안나요....난감하네요...ㅡ,.ㅡ;;
머가 문제냐면요
처음에 고치기 전에는 송신프로그램을 리눅스에서 실행하면
바로 그데이터가 PDA의 위젯에 떴거든요.....
근데 어딘가를 바꾸고 나서는 바로안뜨고
minicom 화면에 전송된데이터가 나오고 minicom에서
엔터를 쳐야 PDA의 위젯 화면에 뜨더라구요....
아....내가 한것도 모르니......ㅜ.ㅜ
제가 했으니..정말 간단한 소스니까요...
어느부분을 고쳐야 송신프로그램 실행하면
바로 정송된 데이터가 PDA화면의 위젯에
뜰수 있게 하는지 알려주세요....ㅜ.ㅜ

익명 사용자의 이미지

flag부분 아니면 수신 프로그램의
while(STOP==FALSE) {
res = read(fd,buf,5);
buf[res] = 0;
p.drawText(10,10,buf);
printf(":%s:%d\n", buf, res);
if(buf[0]=='z') STOP==TRUE;
}
이 부분이 잘못된거 같은데요....
다 고쳐가면서 해봤는데 안되요....ㅜ.ㅜ

익명 사용자의 이미지

Quote:
minicom 화면에 전송된데이터가 나오고 minicom에서
엔터를 쳐야 PDA의 위젯 화면에 뜨더라구요....

만일 위와 같다면, raw mode 와 cooked모드의 차이입니다.
raw mode로 변경하도록 코딩하세요.

익명 사용자의 이미지

non-canonical 모드로 하라는 말씀이시죠?
그렇게 했는데도 안되네요....ㅜ.ㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.