Chapter 12. 직렬 통신과 무선 프로토콜.

Slides:



Advertisements
Similar presentations
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Advertisements

MINI 프로토콜 아날라이저 사용설명서 Ver1.1.
12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다.
Java Socket 통신 이개혁 정대준.
6장. 멀티스레드 멀티스레드 프로그래밍의 필요성을 이해하고 기본 개념을 익힌다.
Chapter 09. 소켓 입출력 모델(I).
PIC는 우리의 친구 한국정보통신대학교 디지털미디어연구소.
12장 직렬통신 Slide 1 (of 17).
Understanding of Socket and File I/O
바코드프린터 사용자매뉴얼 ( Z- 4M Plus /Z-6M Plus)
BLUE TOOTH - 근거리 무선통신의 혁신 기술인 블루투스에 대하여…
Data Communications 제 7 장 기기간의 접속규격.
네트워크 개요 Network의 이해 Network Cabling Ethernet.
Chapter 06. UDP 서버/클라이언트.
2013 스마트 컨트롤러 중간 프로젝트 김성엽 진종영 조유진
TCP/IP Socket Cover Slide 조태문.
Windows CE 메모리 아키텍처 및 관리 서진호
TCP/IP 소켓 프로그래밍 - C 버전 중에서
BLUE TOOTH 인터넷미디어공학부 배지태.
제어기술 소개 목표 : 제어기의 종류, 제어 방식 등을 살펴본다. 주요내용 제어기의 종류 제어방식 : 시퀀스, 피드백, 등.
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
Chapter 03. 소켓 주소 구조체 다루기.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
Chapter 11. Raw 소켓.
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
시리얼 통신 (Rs232를 통한 PLD와 컴퓨터의 직렬통신).
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
6장 무선과 이동 네트워크.
Using Standard I/O on Sockets
직렬통신과 무선 프로토콜 8조 박지훈 조효철.
Chapter 02. 윈도우 소켓 시작하기.
Chapter 12. 직렬 통신과 무선 프로토콜.
AVR - Chapter 6 황 지 연.
Embeded 기초 다지기 2015년 10월 26일 intern Sally
One-Stop Solution in Device Networking
(Web Programming & Practice)
Department of Computer Engineering
임베디드 소프트웨어 동향. 임베디드 소프트웨어 동향 임베디드 S/W 시장분류 솔루션 측면 시스템 측면 운영체제 개발도구 설계도구 테스트도구 유선통신 무선통신 정보가전 자동차제어 산업자동화 사무자동화 군사/항공우주 의료장비 솔루션 공급 업체 임베디드 S/W시장 임베디드.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
6장 무선과 이동 네트워크.
Z- 4M User’s Guide 메뉴얼 Maximum Print Area Width : 4.09”/104mm
TCP/IP 통신망 특론 2장 Link Layer 컴퓨터 네트워크 실험실 이희규.
Chapter 03. 소켓 주소 구조체 다루기.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Real-time Tactics Game
Chapter 09. 소켓 입출력 모델(I).
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
119 신고방법.
네트워크 프로그래밍의 이해 School of Electronics and Information.
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
IOCP 2005/11/10.
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Operating System Multiple Access Chatting Program using Multithread
MONSTER CAR 구정재 한석우 김재형.
Chapter 04. TCP 서버/클라이언트.
게임엔진 프로젝트 발표 상어 사냥 안 정 웅.
Chapter 02. 윈도우 소켓 시작하기.
MA125T ▶ 제품개요 MA125T는 Temic & EM-CARD를 Read 하여 카드 데이터 전송모듈
Chapter 03. 소켓 주소 구조체 다루기.
Department of Computer Engineering
Presentation transcript:

Chapter 12. 직렬 통신과 무선 프로토콜

윈도우 API를 이용한 직렬 통신 기법을 익힌다. 소켓(IrSock)을 이용한 IrDA 프로그래밍 기법을 익힌다. 학습 목표 윈도우 API를 이용한 직렬 통신 기법을 익힌다. 소켓(IrSock)을 이용한 IrDA 프로그래밍 기법을 익힌다. 다양한 블루투스 프로그래밍 기법을 개관한다.

직렬 통신의 중요성 학교(전자/컴퓨터 분야) 실험이나 산업 현장에서 각종 장비를 제어하는 목적으로 많이 사용 직렬 통신 기초 (1/4) 직렬 통신의 중요성 학교(전자/컴퓨터 분야) 실험이나 산업 현장에서 각종 장비를 제어하는 목적으로 많이 사용 무선 프로토콜(IrDA, 블루투스)을 이용한 통신에도 직렬 통신 프로그래밍 모델을 그대로 사용 가능

RS-232C 표준 9핀 직렬 포트(male) 직렬 통신 기초 (2/4) 7 8 9 6 2 3 4 5 1 DCD (Data Carrier Detect) RX (Received Data) TX (Transmitted Data) DTR (Data Terminal Ready) GND (Signal Ground) DSR (Data Set Ready) RTS (Request To Send) CTS (Clear To Send) RI (Ring Indicator)

PC-모뎀 vs. PC-PC 직렬 통신 직렬 통신 기초 (3/4) DCD ① ① DCD DCD ① ① DCD RX ② ② RX TX ③ ③ TX TX ③ ③ TX DTR ④ ④ DTR DTR ④ ④ DTR GND ⑤ ⑤ GND GND ⑤ ⑤ GND DSR ⑥ ⑥ DSR DSR ⑥ ⑥ DSR RTS ⑦ ⑦ RTS RTS ⑦ ⑦ RTS CTS ⑧ ⑧ CTS CTS ⑧ ⑧ CTS RI ⑨ ⑨ RI RI ⑨ ⑨ RI PC 모뎀 PC PC

용어 시작 비트(start bit), 데이터 비트(data bits), 정지 비트(stop bits) 패리티(parity) 직렬 통신 기초 (4/4) 용어 시작 비트(start bit), 데이터 비트(data bits), 정지 비트(stop bits) 패리티(parity) 흐름 제어(flow control) XON/XOFF (소프트웨어) RTS/CTS (하드웨어) DTR/DSR (하드웨어)

직렬 통신 절차 ① 직렬 포트를 연다(open). ② 직렬 포트의 각종 설정값을 변경한다. 직렬 통신 함수 (1/9) 직렬 통신 절차 ① 직렬 포트를 연다(open). ② 직렬 포트의 각종 설정값을 변경한다. ③ 읽기와 쓰기 타임아웃을 설정한다. ④ 직렬 포트로부터 데이터를 읽거나(read) 쓴다(write). ⑤ 직렬 포트를 닫는다(close).

열기와 닫기 직렬 통신 함수 (2/9) // 포트 열기 HANDLE hComm = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(hComm == INVALID_HANDLE_VALUE) err_quit("CreateFile()"); ... // 포트 닫기 CloseHandle(hComm);

각종 설정값 변경하기 직렬 통신 함수 (3/9) BOOL GetCommState ( HANDLE hFile, LPDCB lpDCB ) ; 성공: 0이 아닌 값, 실패: 0 BOOL SetCommState ( HANDLE hFile, LPDCB lpDCB ) ; 성공: 0이 아닌 값, 실패: 0

각종 설정값 변경하기 – 예제 코드 직렬 통신 함수 (4/9) // 포트 설정값 얻기 DCB dcb; if(!GetCommState(hComm, &dcb)) err_quit("GetCommState()"); // 포트 설정값 변경 dcb.BaudRate = CBR_57600; dcb.fParity = FALSE; dcb.fNull = FALSE; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if(!SetCommState(hComm, &dcb)) err_quit("SetCommState()");

읽기와 쓰기 타임아웃 설정하기 직렬 통신 함수 (5/9) BOOL GetCommTimeouts ( HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts ) ; 성공: 0이 아닌 값, 실패: 0 BOOL SetCommTimeouts ( HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts ) ; 성공: 0이 아닌 값, 실패: 0

읽기와 쓰기 타임아웃 설정하기 – 관련 구조체 직렬 통신 함수 (6/9) typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout; /* Maximum time between read chars. */ DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */ DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */ DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */ DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */ } COMMTIMEOUTS, *LPCOMMTIMEOUTS;

읽기와 쓰기 타임아웃 설정하기 – 예제 코드 직렬 통신 함수 (7/9) // 읽기와 쓰기 타임아웃 설정 COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = 0; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 0; if(!SetCommTimeouts(hComm, &timeouts)) err_quit("SetCommTimeouts()");

데이터 읽기와 쓰기 직렬 통신 함수 (8/9) BOOL ReadFile ( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ) ; 성공: 0이 아닌 값, 실패: 0

데이터 읽기와 쓰기 (cont’d) 직렬 통신 함수 (9/9) BOOL WriteFile ( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ) ; 성공: 0이 아닌 값, 실패: 0

IrDA 노트북, PDA, 휴대폰 등에 장착된 적외선 통신 하드웨어 적외선을 이용한 무선 통신 프로토콜 집합

IrDA (2/3) 특징 ① 지향성(30°이내 각도)을 가지며, 단거리(~1m)에서, 점대점(point-to-point) 방식으로 동작하는 무선 통신 프로토콜이다. ② IrDA 하드웨어에 따라 다양한 전송 속도(115kps ~ 16Mbps)를 지원하며, 통신 에러율이 매우 낮다. ③ 통신을 위한 다양한 파라미터가 자동으로 설정되므로(no configuration), 편리하게 사용할 수 있다. ④ 하드웨어의 소형화, 저전력화, 저가격화가 가능하다.

윈도우 운영체제별 IrDA 프로그래밍 지원 사항 CE IrCOMM, IrSock 95, NT 4.0 없음 98, Me 2000 IrSock XP/2003

IrDA 소켓 프로그래밍 ① IrDA를 위한 헤더 파일을 추가한다. ② IrDA를 위한 소켓을 생성한다. ③ 소켓 주소 구조체로 SOCKADDR_IN 대신 SOCKADDR_IRDA를 사용한다. ④ 통신 대상이 고정되어 있지 않으므로, 연결하기 전에 IrDA 장치를 탐색한다.

헤더 파일과 매크로 소켓 생성 IrDA 소켓 프로그래밍 (2/7) #define _WIN32_WINDOWS 0x0410 // 윈도우 98 이상 #define _WIN32_WINNT 0x0500 // 윈도우 2000 이상 #include <winsock2.h> #include <af_irda.h> ... // socket() SOCKET sock = socket(AF_IRDA, SOCK_STREAM, 0); if(sock == INVALID_SOCKET) err_quit("socket()");

소켓 주소 구조체 IrDA 소켓 프로그래밍 (3/7) typedef struct _SOCKADDR_IRDA { u_short irdaAddressFamily; u_char irdaDeviceID[4]; char irdaServiceName[25]; } SOCKADDR_IRDA;

소켓 주소 구조체 사용 예 – 서버 코드 IrDA 소켓 프로그래밍 (4/7) // bind() SOCKADDR_IRDA serveraddr; ZeroMemory(&serveraddr, sizeof(serveraddr)); serveraddr.irdaAddressFamily = AF_IRDA; strcpy(serveraddr.irdaServiceName, "IrServer"); retval = bind(listen_sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); if(retval == SOCKET_ERROR) err_quit("bind()");

소켓 주소 구조체 사용 예 – 클라이언트 코드 IrDA 소켓 프로그래밍 (5/7) // 장치 탐색 ... // connect() SOCKADDR_IRDA serveraddr; ZeroMemory(&serveraddr, sizeof(serveraddr)); serveraddr.irdaAddressFamily = AF_IRDA; serveraddr.irdaDeviceID[] 채우기; strcpy(serveraddr.irdaServiceName, "IrServer"); retval = connect(sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); if(retval == SOCKET_ERROR) err_quit("connect()");

IrDA 장치 탐색 IrDA 소켓 프로그래밍 (6/7) // 최대 10개의 IrDA 장치 탐색 struct MyDevList{ ULONG numDevice; // IrDA 장치 개수 IRDA_DEVICE_INFO Device[10]; // IrDA 장치 정보 } optval; optval.numDevice = 0; // IrDA 장치 개수를 0으로 초기화 int optlen = sizeof(optval); retval = getsockopt(sock, SOL_IRLMP, IRLMP_ENUMDEVICES, (char *)&optval, &optlen); if(retval == SOCKET_ERROR) err_quit("getsockopt"); // 장치 탐색 결과 출력 printf("[IrDA 클라이언트] %d개의 적외선 장치 발견!\n", optval.numDevice); if(optval.numDevice == 0){ closesocket(sock); WSACleanup(); return 0; }

IrDA 장치 탐색 (cont’d) IrDA 소켓 프로그래밍 (7/7) // 사용자가 선택하도록 할 수 있다. // 여기서는 무조건 첫 번째 IrDA 장치에 접속하도록 하였다. SOCKADDR_IRDA serveraddr; ZeroMemory(&serveraddr, sizeof(serveraddr)); serveraddr.irdaAddressFamily = AF_IRDA; memcpy(&serveraddr.irdaDeviceID[0], &optval.Device[0].irdaDeviceID[0], 4); strcpy(serveraddr.irdaServiceName, "IrServer"); retval = connect(sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); if(retval == SOCKET_ERROR) err_quit("connect()");

블루투스 (1/5) 특징 ① 전 지구상에서 사용 가능한 2.4GHz 주파수 대를 사용한다(지역에 따라 사용할 수 있는 주파수 영역에는 약간 차이가 있다.). ② IrDA와 달리 무지향성이며, 단거리(10m~100m)에서, 점대점(point-to-point) 또는 점대다점(multi-point) 방식으로 동작하는 무선 통신 프로토콜이다. ③ 데이터와 세 개의 음성 채널을 지원한다. 데이터 전송률은 1Mbps다. ④ 하드웨어의 소형화, 저전력화, 저가격화가 가능하다.

블루투스 기술 스펙 코어(core) 스펙 프로파일(profile) 스펙 블루투스 (2/5) 블루투스 기술이 어떻게 작동하는지를 보여주기 위한 부분으로 물리적인 부분과 그에 필요한 펌웨어(firmware) 등 하드웨어적인 설계 사양에 대해 기술 프로파일(profile) 스펙 기기 상호간의 호환성(interoperability)을 위해 마련된 것으로 각각의 응용에 대한 프로토콜 배열에 대한 정의

주요 프로파일 모든 블루투스 기기가 탑재할 프로파일 전화 기능을 위한 프로파일 블루투스 (3/5) Generic access: 블루투스 장치 탐색과 연결 관리를 위한 일반적인 절차 Service discovery: 블루투스 애플리케이션이 다른 블루투스 장치의 서비스를 탐색하기 위한 절차 전화 기능을 위한 프로파일 Cordless telephone: 무선 전화기(3-in-1 phone) Intercom: 무선 전화기(3-in-1 phone) Synchronization: 동기화

주요 프로파일 (cont’d) 직렬 포트를 장착한 기기 접속에 필요한 프로파일 블루투스 (4/5) 주요 프로파일 (cont’d) 직렬 포트를 장착한 기기 접속에 필요한 프로파일 Serial port: 직렬 포트를 사용한 애플리케이션을 위한 직렬 케이블 에뮬레이션 Headset: 무선 헤드셋 Dial-up networking: 모뎀 등 FAX: FAX LAN access: 라우터 객체(object) 교환이나 파일 전송을 위한 프로파일 Generic object exchange: 객체 교환을 위한 요구 사항 Object push: 명함 교환 등 File transfer: 파일 전송

블루투스 (5/5) 주요 프로파일 - 예

구성 요소 개발 방법 블루투스 하드웨어 + 장치 드라이버 블루투스 프로토콜 스택 블루투스 개발 소프트웨어 상용 개발 소프트웨어 블루투스 프로그래밍 구성 요소 블루투스 하드웨어 + 장치 드라이버 블루투스 프로토콜 스택 블루투스 개발 소프트웨어 개발 방법 상용 개발 소프트웨어 소켓 프로그래밍 마이크로소프트 블루투스 프로토콜 스택 마이크로소프트 블루투스 프로토콜 스택과 호환되는 블루투스 하드웨어 + 장치 드라이버 헤더 파일과 라이브러리 직렬 통신 프로그래밍