#keywords serial,com,termios,terminal #title Serial통신 echo 예제 [wiki:Home 대문] / [wiki:CategoryProgramming 프로그래밍] / [wiki:SerialEcho Serial통신 echo 예제] ---- == [wiki:SerialEcho Serial통신 echo 예제] == * 작성자 조재혁([mailto:minzkn@minzkn.com]) * 고친과정 2005년 8월 23일 : 처음씀 [[TableOfContents]] == 설명 == 이것은 간단히 Serial 통신을 하는 예제입니다. serial로부터 받은 데이터를 고스란히 다시 반향하여 보내는 것입니다. 아래 예제코드는 {{{#!plain port=COM1 ("/dev/ttyS0") baud=9600 parity=true stop=1 data=8bit }}} 으로 만들어져 있습니다. == 예제코드 == {{{#!enscript c /* Copyright (C) JAEHYUK CHO All rights reserved. Code by JaeHyuk Cho */ #include #include #include #include #include #include #include #include #include #include #include #define mz_dump(m_d,m_s) do{int s_o,s_w,s_i;unsigned char s_b[17];if(((void *)(m_d))!=NULL){s_b[16]='\0';s_o=(int)0;\ while(s_o<(m_s)){s_w=((m_s)-s_o)<16?((m_s)-s_o):16;printf("%08X",s_o);for(s_i=0;s_i 0) { s_read_bytes = read(s_handle, (void *)(&s_buffer[0]), (size_t)sizeof(s_buffer)); if(s_read_bytes > ((ssize_t)0)) { (void)printf("recv data %d byte(s) {\n", (int)s_read_bytes); mz_dump(&s_buffer[0], s_read_bytes); (void)printf("}\n"); #if 1 /* echo part */ s_write_bytes = write(s_handle, (void *)(&s_buffer[0]), (size_t)s_read_bytes); (void)printf("echo %d/%d byte(s)\n", (int)s_write_bytes, (int)s_read_bytes); #endif } else if(s_read_bytes == ((ssize_t)0))(void)printf("no data\n"); else (void)perror("read"); } else if(s_check == 0)(void)printf("wait\n"); else (void)perror("select"); }while(g_mz_break == 0); (void)printf("End of serial\n"); } else (void)perror("tcflush"); } else (void)perror("tcsetattr"); } else (void)perror("cfset{i/o}speed"); if(tcsetattr(s_handle, TCSANOW, (struct termios *)(&s_prev_termios)) != 0)(void)perror("tcsetattr(restore)"); } else (void)perror("tcgetattr"); (void)close(s_handle); } else (void)perror("open"); return(1); } /* vim: set expandtab: */ /* End of source */ }}}