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

Slides:



Advertisements
Similar presentations
신입생 Study 커리큘럼 OneScore. Contents 후니의 시스코 네트워킹 (4 주 ) 01/ Network 생활코딩 – 웹 서비스 만들기 (4 주 ) Wowhacker 웹 게임 (4 주 ) 02/ Web 뇌를 자극하는 윈도우 시스템 프로그래밍 (4 주 ) 리버싱.
Advertisements

TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
12장. Raw 소켓 Raw 소켓의 특징과 사용 방법을 익힌다. Ping 프로그램의 동작 원리를 이해하고 작성 방법을 익힌다.
컴퓨터 운영체제의 역사 손용범.
CHAP 22. 블루투스.
10장. 소켓 입출력 모델(I) 블로킹과 넌블로킹 소켓의 특징을 이해한다. Select 소켓 입출력 모델을 이해하고 활용한다.
Chapter 09. 소켓 입출력 모델(I).
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
BLUE TOOTH - 근거리 무선통신의 혁신 기술인 블루투스에 대하여…
Chapter 06. UDP 서버/클라이언트.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Network Lab. Young-Chul Hwang
Chapter 7 Transmission Media.
Chapter 03. 소켓 주소 구조체 다루기.
PTZ카메라를 이용한 Target Tracking
Chapter 11. Raw 소켓.
시스템집적반도체 설계 검증 환경과 기법 Ch 7.
제 14장 Multicast & Broadcast
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
직렬통신과 무선 프로토콜 8조 박지훈 조효철.
독립형 모션제어기 사양 - Catalog (optional) XMC-PO04-MOD
11 장 LAN 기본 개념과 Ethernet LAN
Android 시리즈 H2O SIM Card 데이터 사용 설정 방법
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
07. 디바이스 드라이버의 초기화와 종료 김진홍
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
HomeNetWork의 개념과 실생활의 예
제 19 장 TFTP 19.1 메시지 19.2 연결 19.3 데이터 전송 19.4 UTP 포트 19.5 TFTP 예제
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
Chapter 12. 직렬 통신과 무선 프로토콜.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
프로그래밍 랩 – 7주 리스트.
Chapter 03. 소켓 주소 구조체 다루기.
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
재해 및 미개척지 탐사를 위한 4족 보행 로봇 제어 허준영 교수님 연구실 2007 손승하 2006 우인식.
Chapter 09. 소켓 입출력 모델(I).
Chapter 07. 소켓 옵션.
2장. 인터넷의 개념과 주소.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
2016년 2학기 PULSE 4 Experiment 12 – 블루투스 통신.
블루투스를 이용한 무선 스피커 구현 이기문 황대연.
McGraw-Hill Technology Education
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
IOCP 2005/11/10.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
UNIT 25 SPI 로봇 SW 교육원 조용수.
DK-128 직렬통신 기초 아이티즌 기술연구소
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
LAN의 구성요소 학습내용 서버 클라이언트 NIC(Network Interface Card) 전송매체
Chapter 04. TCP 서버/클라이언트.
DK-128 직렬통신 실습 아이티즌 기술연구소
UNIT 25 SPI 로봇 SW 교육원 조용수.
Chapter 02. 윈도우 소켓 시작하기.
학습내용 프로토콜 계층화 OSI 모델의 용어 및 기능 개체 서비스 접근점 (N) 프로토콜과 (N) 서비스 서비스 프리미티브
구조체(struct)와 공용체(union)
IO-Link 통신 기술 소개 산업 Ethernet 필드버스 게이트웨이 접속 IO-Link 마스터 IO-Link 통신
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
06. 디바이스의 등록과 해제 김진홍
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
엑셀 리포트를 웹 클라이언트에서 사용시 설정 방법
중간 결과 보고 ( Server & Client )
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) 주요 프로파일 - 예

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