하드웨어
C221-S3C6410 보드에 있는 Ehternet을 통하여 UDP로 들어온 데이타를 RS232로 보내는 프로그램은 다음과 같습니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <termios.h> #include <fcntl.h> #include <arpa/inet.h> #include <sys/socket.h> #define BUFF_SIZE 1024 int main(int argc, char *argv[]) { int udp_server_sock; int client_addr_size; struct sockaddr_in udp_server_addr; struct sockaddr_in client_addr; char buff_rcv[BUFF_SIZE + 1]; int fd; struct termios newtio; if (2 > argc) { printf("인수가 모자릅니다. 시리얼 포트를 입력하여 주시오\n"); printf("실행방법: ]$ ./app_udp_to_rs232 /dev/ttyS3\n"); exit(0); } fd = open(argv[1], O_RDWR | O_NOCTTY | O_NONBLOCK); memset(&newtio, 0, sizeof(newtio)); newtio.c_cflag = B115200; // 통신 속도 115200 newtio.c_cflag |= CS8; // 데이터 비트가 8bit newtio.c_cflag |= CLOCAL; // 외부 모뎀을 사용하지 않고 내부 통신 포트 사용 newtio.c_cflag |= CREAD; // 쓰기는 기본, 읽기도 가능하게 newtio.c_iflag = 0; // parity 비트는 없음 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); // 포트에 대한 통신 환경을 설정합니다. udp_server_sock = socket(PF_INET, SOCK_DGRAM, 0); if (-1 == udp_server_sock) { printf("socket 생성 실패\n"); exit(1); } memset(&udp_server_addr, 0, sizeof(udp_server_addr)); udp_server_addr.sin_family = AF_INET; udp_server_addr.sin_port = htons(4000); udp_server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (-1 == bind(udp_server_sock, (struct sockaddr*) &udp_server_addr, sizeof(udp_server_addr))) { printf("bind() 실행 에러\n"); exit(1); } while (1) { client_addr_size = sizeof(client_addr); recvfrom(udp_server_sock, buff_rcv, BUFF_SIZE, 0, (struct sockaddr*) &client_addr, &client_addr_size); printf("receive: %s\n", buff_rcv); write(fd, buff_rcv, strlen(buff_rcv)); // udp 포트로 들어온 데이터를 전송 합니다. sleep(1); // receiver가 자료를 수신할 수 있도록 대기 } close(fd); // 통신 포트를 닫아 사용을 중지합니다. return 0; }
|
다음 강좌에서는 RS232 to UDP 프로그램을 설명하도록 하겠습니다.