• Nie Znaleziono Wyników

Laboratorium telekomunikacji Zadanie 4

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium telekomunikacji Zadanie 4"

Copied!
4
0
0

Pełen tekst

(1)

150875

numer indeksu

Grzegorz Graczyk

imię i nazwisko

151021

numer indeksu

Paweł Tarasiuk

imię i nazwisko

Data 2010-03-03

Kierunek Informatyka Rok akademicki 2009/10

Semestr 4

Grupa dziekańska 2

Laboratorium telekomunikacji

Zadanie 4

(2)

Krótki wstęp

Przygotowany przez nas program służy do prostej komunikacji terminalowej między dwoma komputerami, za pośrednictwem modemu. Program został napisany w języku C, przy wyko- rzystaniu funkcji systemu Windows. Program pozwala wybrać port szeregowy za pomocą argu- mentów. Jego działanie jest bardzo proste - tworzone są dwa wątki, z których jeden odczytuje dane wpisywane za pomocą klawiatury na standardowe wejście i przekazuje je w niezmienionej postaci na wybrany wcześniej port szeregowy, natomiast drugi wątek - odczytuje przychodzące dane z portu szeregowego i przepisuje je na standardowe wyjście. Pisząc program zadbaliśmy o prostotę i niewielką długość kodu, oraz o minimalne wykorzystanie zasobów sprzętowych ma- szyny, na której program jest uruchamiany. Praktycznym zastosowaniem, które zostanie (a w chwili czytnania tego sprawozdania - zapewne juz zostało) zademonstrowane na laboratorium jest nawizanie połączenia przez dwa różne komputery z jednym modemem. Takie podejście do problemu pozwala nam samodzielnie kierować do modemu dowolne polecenia w języku Hay- esa, oraz badać jego zachowanie w przypadku błędów. Przy demonstracji, dokonamy za pomocą modemu połączenia dwóch komputerów, posługując się uniwersalnymi rozkazami kodu Hayesa (ATD, ATA, ATH, +++). Skonfigurowanie dwóch instancji programu na dwóch komputerach tak, aby łączyły się one przez modem pozwala zatem osiągnać efekt przypominający bardzo prosty program do przesyłania wiadomości błyskawicznych bądź prowadzenia chatu.

Kod źródłowy

#i n c l u d e < s t d i o . h>

#i n c l u d e <c o n i o . h>

#i n c l u d e < s t r i n g . h>

#i n c l u d e < s t d l i b . h>

#i n c l u d e <windows . h>

#d e f i n e b o o l c h a r

#d e f i n e t r u e ( ( b o o l ) 1 )

#d e f i n e f a l s e ( ( b o o l ) 0 )

BOOL bPortReady ; DCB dcb ;

COMMTIMEOUTS CommTimeouts ; BOOL bWriteRC ;

BOOL bReadRC ;

DWORD i B y t e s W r i t t e n ; DWORD i B y t e s R e a d ;

c h a r ∗ p o r t P a t h = ”COM1”;

HANDLE S e r i a l I n i t (c h a r ∗ComPortName , i n t BaudRate ) { p u t s ( ComPortName ) ;

HANDLE hComm ;

hComm = C r e a t e F i l e ( ComPortName , GENERIC READ | GENERIC WRITE, 0 , // e x c l u s i v e a c c e s s

NULL, // no s e c u r i t y

OPEN EXISTING , 1 , // no o v e r l a p p e d I /O

NULL // n u l l t e m p l a t e

) ;

bPortReady = SetupComm (hComm, 1 , 1 2 8 ) ; // s e t b u f f e r s i z e s

bPortReady = GetCommState (hComm, &dcb ) ;

dcb . BaudRate = BaudRate ; dcb . B y t e S i z e = 8 ;

dcb . P a r i t y = NOPARITY; //EVENPARITY ; dcb . S t o p B i t s = ONESTOPBIT ;

dcb . f A b o r t O n E r r o r = TRUE;

Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 2 / 4

(3)

dcb . fOutX = FALSE ; // XON/XOFF o f f f o r t r a n s m i t dcb . f I n X = FALSE ; // XON/XOFF o f f f o r r e c e i v e

dcb . fOutxCtsFlow = FALSE ; // t u r n on CTS f l o w c o n t r o l dcb . f R t s C o n t r o l = RTS CONTROL HANDSHAKE;

dcb . fOutxDsrFlow = FALSE ; // t u r n on DSR f l o w c o n t r o l dcb . f D t r C o n t r o l = DTR CONTROL ENABLE ;

dcb . f D t r C o n t r o l = DTR CONTROL DISABLE ; dcb . f D t r C o n t r o l = DTR CONTROL HANDSHAKE;

bPortReady = SetCommState (hComm, &dcb ) ; // Communication t i m e o u t s a r e o p t i o n a l

bPortReady = GetCommTimeouts (hComm, &CommTimeouts ) ;

CommTimeouts . R e a d I n t e r v a l T i m e o u t = MAXDWORD;

CommTimeouts . ReadTotalTimeoutConstant = 1 ;

CommTimeouts . R e a d T o t a l T i m e o u t M u l t i p l i e r = MAXDWORD;

CommTimeouts . W r i t e T o t a l T i m e o u t C o n s t a n t = 0 ; CommTimeouts . W r i t e T o t a l T i m e o u t M u l t i p l i e r = 0 ; bPortReady = SetCommTimeouts (hComm, &CommTimeouts ) ;

r e t u r n hComm ; }

b o o l S e r i a l G e t c (HANDLE ∗ hComm, c h a r ∗ r x c h a r ) { BOOL bReadRC ;

s t a t i c DWORD i B y t e s R e a d ;

bReadRC = R e a d F i l e ( ∗hComm, r x c h a r , 1 , &i B y t e s R e a d , NULL ) ; r e t u r n i B y t e s R e a d ;

}

v o i d S e r i a l P u t c (HANDLE ∗ hComm, c h a r t x c h a r ) { BOOL bWriteRC ;

s t a t i c DWORD i B y t e s W r i t t e n ;

i f( t x c h a r == 1 0 ) { t x c h a r = 1 3 ;

W r i t e F i l e ( ∗hComm, &t x c h a r , 1 , &i B y t e s W r i t t e n , NULL ) ; t x c h a r = 1 0 ;

}

bWriteRC = W r i t e F i l e ( ∗hComm, &t x c h a r , 1 , &i B y t e s W r i t t e n , NULL ) ; }

/∗ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ∗/

DWORD WINAPI t e r m r e a d e r (PVOID param ) { HANDLE ∗ p o r t = param ;

c h a r v a l ; b o o l ok ; w h i l e( t r u e ) {

ok = S e r i a l G e t c ( p o r t , &v a l ) ; i f( ok )

f p u t c ( v a l , s t d o u t ) ; }

}

i n t r a t e = 9 6 0 0 ; i n t term ( ) {

DWORD w a t e k 1 i d ; HANDLE w1 ;

HANDLE p o r t = S e r i a l I n i t ( p o r t P a t h , r a t e ) ;

DWORD i B y t e s W r i t t e n ;

Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 3 / 4

(4)

w1 = C r e a t e T h r e a d (NULL, 0 , t e r m r e a d e r , (PVOID) & p o r t , 0 , &w a t e k 1 i d ) ;

i n t v a l ;

i n t i = 0 , l e n = 1 ;

w h i l e( ( v a l = g e t c h ( ) ) != −1) { S e r i a l P u t c (& p o r t , v a l ) ; }

r e t u r n 0 ; }

i n t main (i n t a r g c , c h a r ∗c o n s t a r g v [ ] ) { i n t i , j ;

c o n s t c h a r ∗ p o r t , ∗ u s a g e = ” n u l l ”;

f o r( i = 1 , j = 0 ; i < a r g c ; i ++) { i f( a r g v [ i ] [ 0 ] == ’− ’)

s w i t c h ( a r g v [ i ] [ 1 ] ) { c a s e ’ r ’:

++i ;

s s c a n f ( a r g v [ i ] , ”%d”, &r a t e ) ; b r e a k;

d e f a u l t: i = a r g c ; } e l s e

s w i t c h ( j ++) { c a s e 0 :

p o r t P a t h = a r g v [ i ] ; b r e a k;

d e f a u l t: i = a r g c ; }

}

i f( i > a r g c | | ( j != 1 && j != 0 ) ) { p u t s ( u s a g e ) ;

r e t u r n −1;

}

i f( s t r c m p ( a r g v [ 1 ] , ” term ”) == 0 ) r e t u r n term ( ) ;

r e t u r n −1;

}

Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 4 / 4

Cytaty

Powiązane dokumenty

Porównanie dokładności pomiaru współrzędnych tłowych zdjęć oryginalnych i cyfrowych przeprowadzono dla pięciu barwnych diapozytywów pola testowego Otto Wagner

Dużo prościej jest dla korekty jednego błędu - potrafimy oszacować od dołu, że liczba bitów kontrolnych musi wynosić co najmniej 4, i faktycznie dla 4 bitów udało nam

Program przyjmuje prosty, jednoznakowy argument pozwalający decydować, czy pliki będą wysyłane, czy odbierane, oraz argumenty po- zwalające wybrać port COM oraz plik do

Środowisko uru- chomieniowe języka Java jest bardzo dobrze rozpowszechnione na telefonach komórkowych oraz urządzeniach mobilnych, dzięki czemu stworzone przy pomocy J2ME aplikacje

W każdym kroku losujemy jednostajnie jedną z kul, sprawdzamy jej kolor, zwracamy ją do urny, a następnie dokładamy do urny kolejną kulę tego samego koloru.. W urnie znajdują się

Ponieważ ta instrukcja może okazać się niewystarczająca udostępniam test gry z 7 zadaniami aby sprawdzić możliwości platformy – dostępny jest on pod nr

W dowolnym postępie geometrycznym 2013-wyrazowym wyrazy m-ty, n-ty, k-ty tworzą (w tej właśnie kolejności) trójwyrazowy postęp geometryczny... Punkt D jest środkiem boku AB

Wysłać do 21