You are on page 1of 61

A Microchip TCP/IP Stack implementcijnak alkalmazsa a gyakorlatban

Ivanov Pter 2004. mjus 18.

Tartalomjegyzk
1. Bevezeto 1.1. Ksznetnyilvnts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Soros vonal 3. A TCP/IP Stack felptse 3.1. A Stack rtegei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. User Datagram Protocol (UDP) 5. A TCP/IP Stack kongurlsa 6. A TCP/IP Stack moduljai 6.1. Address Resolution Protocol modul . . . . . . . . . 6.1.1. ARP funkcik . . . . . . . . . . . . . . . . . . 6.1.2. ARPTask funkcik . . . . . . . . . . . . . . . 6.2. User Datagram Protocol (UDP) modul . . . . . . . . 6.3. Stack Manager modul . . . . . . . . . . . . . . . . . 6.4. A soros-UDP talakt modul . . . . . . . . . . . . . 6.5. HTTP szerver modul . . . . . . . . . . . . . . . . . . 6.5.1. Dinamikus honlap generls . . . . . . . . . 6.5.2. HTTP CGI . . . . . . . . . . . . . . . . . . . . 6.6. Microchip fjlrendszer (MPFS) . . . . . . . . . . . . 6.6.1. MPFS kp ksztse . . . . . . . . . . . . . . . 6.6.2. MPFS knyvtr . . . . . . . . . . . . . . . . . 6.7. FTP szerver modul . . . . . . . . . . . . . . . . . . . 6.7.1. MPFS kp feltltse FTP kliens segtsgvel . 7. Hardver 7.1. Alkatrszek . . . . . . . . . . . . . . . . 7.1.1. PIC18F452 mikrovezrl o. . . . . 7.1.2. RTL8019AS ethernet vezrl o . . 7.1.3. 24LC256 tpus soros EEPROM . 7.1.4. MAX232A soros vonali illeszt o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 5 7 9 13 14 14 16 17 27 27 34 35 36 39 40 41 41 42 44 44 44 48 48 49

ii 8. Az eszkz hasznlata s tesztelse 8.1. Az eszkz hasznlata . . . . . . . . . 8.2. Kongurls bngsz oprogrammal . 8.2.1. Hlzat belltsa . . . . . . . 8.2.2. Soros vonal belltsa . . . . 8.2.3. Statisztika . . . . . . . . . . . 8.3. Az eszkz tesztelse . . . . . . . . . 50 50 51 51 53 53 54

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

iii

brk jegyzke
1.1. A rendszer blokkvzlata . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Egy bjt tvitele soros vonalon . . . . . . . . . . . . . . . . . . . . . . 3.1. A TCP/IP referencia modell rtegei . . . . . . . . . . . . . . . . . . . . 3.2. A referencia modell s a Microchip TCP/IP Stack rtegei . . . . . . . . 4.1. UDP csomag felptse . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Az el o-fejlc felptse . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. 7.1. 7.2. 7.3. 7.4. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 8.8. A Stack Manager algoritmusnak folyamatbrja . . . . . . A Serial2UDP_GetSerialData fggvny folyamatbrja . . A Serial2UDP_ProcessUDPData fggvny folyamatbrja Urlapok kezelse . . . . . . . . . . . . . . . . . . . . . . . . MPFS kpfjl felptse . . . . . . . . . . . . . . . . . . . . . MPFS FAT bejegyzs felptse . . . . . . . . . . . . . . . . MPFS adatblokk felptse . . . . . . . . . . . . . . . . . . . MPFS kpfjl feltltse FTP kliens segtsgvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 5 7 8 28 31 32 38 39 40 40 43 45 46 49 49 50 51 52 52 53 54 54 55

Soros vonali illeszt o s tpfeszltsg stabiliztor kapcsolsi rajza A PIC18F452 tpus mikrovezrl o lbkiosztsa . . . . . . . . . . . A 24LC256 tpus soros EEPROM lbkiosztsa . . . . . . . . . . . A MAX232 tpus soros vonali illeszt o lbkiosztsa . . . . . . . . A doboz oldal- s ellnzete . . . . . . . . . . . Az eszkz hasznlata . . . . . . . . . . . . . . . Kongurls bngsz oprogrammal: index . . . Hlzat belltsa bngsz oprogrammal . . . . Soros vonal belltsa bngsz oprogrammal . Statisztika megtekintse bngsz oprogrammal Az eszkz tesztelse . . . . . . . . . . . . . . . Az UDP test program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iv

Tblzatok jegyzke
5.1 6.1 6.2. 6.3. 6.4. Kongurcis dencik ill. vltozk . . . . . . . . . . . . . . . . . . . TCP/IP Stack moduljai . . . . . . . . . . . . . . . . . . A soros-UDP talakt modul kongurcis vltozi A soros-UDP talakt modul bels o vltozi . . . . . A soros-UDP modul talakt llapotai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 29 29 33

1. fejezet Bevezeto
Manapsg az ethernet hlzat elterjedst lthatjuk a htkznapi hasznlatban s az iparban egyarnt. A csavart rpros kbelek nagy tvolsgra vezethet ok, olcsk, knnyen szerelhet ok s az rnykolatlan kbelek (UTP) is relatve rzketlenek az elektromos zavarokra, de ipari alkalmazsban ltalban rnykolt kbeleket (STP) hasznlnak. A most bemutatsra kerl o rendszerrel egyszeruen s gyorsan kpess tehetjk PIC mikrokontrolleres alkalmazsunkat, hogy kommunikljon az intraneten vagy interneten. E szakdolgozatban egy a valsgban is felhasznlhat alkalmazst mutatok be, hogyan illeszthetjk a soros vonalon kommunikl rgebbi fejlesztsu eszkznket ethernet hlzathoz. A rendszer leegyszerustett blokkvzlata az 1.1. brn lthat.

1.1. bra. A rendszer blokkvzlata A Microchip kifejlesztette a PIC18-as mikrokontroller csaldhoz a TCP/IP Stack-et s egy komplett web szervert. Fejlesztseit szabadon hozzfrhet ov tette s letlthet o az internetr ol. Ezeket a forrskdokat hasznltam fel. A programcsomaggal egy HTTP szervert pthetnk, aminek honlapjt FTP-n frissthetjk. Szksg van egy PIC 18-as mikrovezrl ore, egy NIC-re (pldul Realtek 8019AS). Kell mg egy C fordt, a program lefordtshoz. n a PIC C18 dem verzijt hasznltam. rdemes letlteni az MPLAB legfrissebb verzijt. Ez egy integrlt

2 fejleszt oi krnyezet (IDE) amiben szerkeszthetjk a forrsfjlokat, lefordthatjuk a programot s fel is tlthetjk a mikrovezrl obe. Kell mg egy PIC programoz is. n az ICD2 nevezetu programoz s nyomkvet o eszkzt hasznltam. A szgletes zrjelben lev o szmokkal mindig az irodalomjegyzkben szerepl o dokumentumokra hivatkozok.

1.1.

Ksznetnyilvnts

Ezton szeretnm megksznni Dr. Knya Lszl tanr rnak s Kolinger Attilnak a segtsget s a fejlesztshez nlklzhetetlen eszkzket.

2. fejezet Soros vonal


Els osorban az RS-232C szabvnyrl lesz sz ebben a fejezetben. Ez az adattviteli forma szles krben elterjedt s mg most is nagyon sok eszkz hasznlja az iparban s a szmtstechnikban ezt a mdszert. Az RS232 htrnyai kz tartozik, hogy aszimetrikus, teht kzs a fld, ezrt zaj rzkeny s csak kis tvolsgra vezethet o. Nagyobb tvolsgok thidalsra az RS-422 ill. RS-485 szabvny adattvitel hasznlhat. Az tvitel aszinkron, full duplex s a bjtok tvitele mindig egy start bit elkldsvel kezd odik, ezt kveti 59 darab adatbit vgl egy, msfl vagy kett o stop bit. A kilencedik bit lehet parits bit is vagy a cl eszkz megcmzsre hasznlhatjuk. A kilencedik bitet alapesetben RS-232C kapcsolatnl cmzsre hasznlni nem lehet (de lehet pldul az RS-422-nl s RS-485-nl). A legelterjedtebb a 8n1 tpus tvitel, ahol 8 adatbit egy stop bit kldse ill. fogadsa lehetsges, parits nlkl. Az ltalam elksztett program is ebben a formtumban kezeli az adatokat. Az adattviteli sebessg 75, 150, . . . , 2400, 4800, 9600, 19200, 38400, 57600, . . . baud lehet. A baud az tvitt jel rtkben trtn o vltozsok szma egy msodperc alatt. Teht a sebessg megadsnl a baud mrtkegysg nem egyezik meg a bit/msodperccel, mert az utbbiba nem rtend o bele a start-, stop- s parits bitek tvitele. Egy bjt (0xC8) tvitele lthat a 2.1. brn (TTL szintuek a jelek).

2.1. bra. Egy bjt tvitele soros vonalon

3. fejezet A TCP/IP Stack felptse


Szmos TCP/IP implementci kveti a TCP/IP referencia modell nevu szoftver architektrt. Azok a programok, amik erre a modellre alapulnak tbb rtegre vannak osztva, ezek a rtegek egymsra plnek1 s minden rteg egy vagy tbb alatta lv o rteggel kommunikl. A TCP/IP referencia modell a 3.1. brn lthat.

3.1. bra. A TCP/IP referencia modell rtegei A TCP/IP rtegek aktvak, vagyis nem csak akkor mukdnek, ha krs rkezik egy szolgltatshoz, hanem akkor is, id otllps trtnt vagy egy j csomag rkezett. Egy olyan rendszer, ahol sok adat- s programmemria ll rendelkezsre knnyen teljesti a krseket. Egy multitaszkos opercis rendszer extra kpessgei lehet ov teszik, hogy az implementci modulris legyen. A program viszont bonyolult lesz, ha csak egy 8 bites mikrovezrl o ll rendelkezsre nhny szz bjt RAM-mal s korltozott programmemrival. Tovbb, egy multitaszkos opercis rendszer nlkl sok id ot kell arra fordtani a programozs sorn, hogy a Stack fggetlen maradjon a f o alkalmazstl. Relatve knnyu elkszteni s helytakarkos az a TCP/IP Stack, amely bele van integrlva a f o alkalmazsba. De sok problma lphet fel, amikor jabb funkcikat szeretnnk a programhoz hozzadni.
1

Az egymsra plst angolul a stacked szval fejezik ki, ezrt hvjk TCP/IP Stack-nek.

5 Ez a TCP/IP Stack modulris, C programozsi nyelven rdott s a Microchip C18 s a HiTech PICC 18 fordtkkal is lefordthat. A forrsfjl automatikusan eldnti, hogy milyen fordtval szeretnnk fordtani. A kt fordt kztti klnbsgekb ol ered o problmkat a compiler.h fjlban lev o dencikkal kszbljk ki. Ez a TCP/IP Stack csak PIC 18-as mikrovezrl okn fut.

3.1.

A Stack rtegei

A 3.2 brn is lthat, hogy a Microchip TCP/IP Stack is klnbz o rtegekre van osztva. A kd gy lett megrva, hogy minden rteg kln forrsfjlban van, mg az API2 kln fejlcfjlban van.

3.2. bra. A TCP/IP referencia modell s a Microchip TCP/IP Stack rtegeinek sszehasonltsa Ellenttben a referencia modellel, a Microchip TCP/IP Stack-ben egyes rtegek nem csak a kzvetlenl alatta lev o rteget rik el. A legnagyobb klnbsg a hagyomnyos TCP/IP Stack implementcitl kt j modul: StackTask s az ARPTask. A StackTask vezrli a Stack sszes moduljnak mukdst az ARPTask pedig az ARP rteg szolgltatsait valstja meg. Ez a Stack az ltalnosan ismert kooperatv multitaszk technikt alkalmazza, hogy fggetlen legyen a f o alkalmazstl. Egy kooperatv multitaszkos rendszerben tbb taszk mukdik, minden taszk vgrehajt egy feladatrszt, majd a vezrlst visszaadja s a kvetkez o taszk fut. Ebben az rtelmezsben a StackTask s az ARPTask egy-egy kooperatv taszk. A f oprogramba vagy az opercis rendszerbe is lehet implementlni a kooperatv vagy ms tpus multitaszkot megvalst kdot. A Stack gy lett megtervezve, hogy fggetlen legyen brmilyen opercis rendszert ol, vagyis sajt kooperatv multitaszk rendszere van. Ennek eredmnyeknt hasznlhat brmilyen rendszerben fggetlenl attl, hogy hasznl-e multitaszkos opercis rendszert vagy sem. Azonban, ha a sajt alkalmazsunk hasznlja ezt a
2

Application Programming Interfaces, vagyis a felhasznli program interfsz.

6 TCP/IP Stack-et, alkalmaznunk kell a kooperatv multitaszk technikt a sajt taszkjaink megrsakor. Ez elrhet o gy is, hogy a feladatot tbb taszkra osztjuk vagy a feladatot egy FSM-nek (Finite State Machine, Vges llapot Automata) tovbbtjuk ami a feladatot sok kis rszfeladatra bontja s egyms utn futtatja le o ket. A HTTP szerver az utbbi megoldst hasznlja. Jegyezzk meg, hogy ebben a TCP/IP Stack-ben nincs implementlva az sszes olyan modul, ami egy tlagos TCP/IP Stack-ben implementlva van, de ha szksg van egy olyan funkcira, ami nincs implementlva, brmikor megrhat kln taszkknt vagy modulknt.

4. fejezet User Datagram Protocol (UDP)


Az RFC 768-as [2] dokumentumban tallhat az UDP protokoll lersa. Ez a protokoll az Internet Protocol-ra (IP) pl. El onye, hogy a programok nagyon egyszeruen kldhetnek s fogadhatnak zeneteket, de nincs garantlva, hogy az zenet nem veszik el ill. nem duplzdik. Azok az alkalmazsok amelyeknl adatfolyamok megbzhat tovbbtsra van szksg, a Transmission Control Protocol-t (TCP) hasznljk.

4.1. bra. UDP csomag felptse Az UDP csomagok felptse a 4.1. brn lthat. A forrs port opcionlis mez o, akkor rdemes hasznlni, ha a csomagot kld o folyamat vlaszt vr. Ha nincs hasznlva, nullt kell a helyre rni. A cl port a cl cmen bell egy folyamatot vagy programrszt jelent, de lehet ms jelentse is. A hossz a csomag oktetjeinek szmt mutatja meg, belertve a fejlcet s az adatokat is. Teht a legkisebb rtk, amit felvehet: nyolc. Az ellen orz o sszeg az IP fejlcb ol kszlt el o-fejlc, az UDP fejlc s az adat egyes komplemense 16 bitre kiegsztve. Azrt hvjk el o-fejlcnek, mert az IP fejlcb ol msoldnak az adatok. Az el o-fejlc (4.2. bra) az UDP fejlc el ott van s tartalmazza a forrs- s clcmet, protokoll tpust s az UDP csomag hosszt. Ez az informci vd az eltvedt csomagok ellen. Az ellen orz o sszeg szmtsa hasonlt a TCP-ben hasznlt ellen orz o sszeg szmtshoz. Ha a kiszmtott ellen orz o sszeg nulla, akkor az sszeg egyes komplemense lesz elkldve (FFFFh). Ha az ellen orz o sszegknt nullt kld a forrs, az azt jelenti, hogy

4.2. bra. Az el o-fejlc felptse a kld o nem szmolt sszeget. Nyomkvetskor alkalmazhat vagy, ha a fels obb szintu protokollok nem hasznljk ezt az sszeget. Ebben a TCP/IP Stack-ben az ellen orz o sszeg szmts nincs implementlva. Az UDP modulnak ismernie kell a forrs s cl internet cmt s a protokoll tpust. Ezt a protokollt hasznljk az internetes nv szerverek (DNS) s Trivial File Transfer Protocol (TFTP). Ha az Internet Protocol-on bell hasznljuk az UDP-t, akkor az a 17-es (oktlisan 21) szm protokoll.

5. fejezet A TCP/IP Stack kongurlsa


Ez a kooperatv multitaszk rendszer lehet ov teszi, hogy a felhasznli alkalmazs sajt taszkokat futtasson. Ekzben a TCP/IP Stack-kel nem is kell foglalkoznia. Ehhez termszetesen az kell, hogy a felhasznl gy rja meg programjt, hogy a kooperatv multitaszkos rendszerben mukdjn. Az egyszeru kongurls rdekben a program C dencikat hasznl. A legtbb paramter engedlyezse, tiltsa vagy belltsa a StackTsk.h fejlc fjlban lehetsges. Azok a paramterek, amelyek ms fjlban tallhatak, azoknak zrjelben megadom a fjl nevt. Ha valamelyik paramtert vltoztattuk, a projektet vagy egyes rszeit jra kell fordtani1 . Azonost CLOCK_FREQ (compiler.h) rtkek rajel frekv. (Hz) 10-255 2, 4, 8, 16, 32, 64, 128, 256 0-255 Kls o mem. kdja Hasznl Tick.c Megjegyzs Denilja a rendszer rajel frekvencijt, hogy ki lehessen szmolni az id ozt o szmll rtkt. Egy msodperc hny taktusbl ll. Id oztshez milyen el ooszt legyen belltva. Ha a programmemrit akarjuk hasznlni adattrolsra. Ha kls o soros EEPROM-ot akarunk adattrolsra hasznlni. Az MPFS fjlrendszer el ott fenntartott bjtok szma. Hogy meg tudjuk cmezni a kls o EEPROMot.

TICKS_PER_SECONDS TICK_PRESCALE_VALUE

Tick.c Tick.c

MPFS_USE_PGRM

MPFS.c

MPFS_USE_EEPROM

MPFS.c

MPFS_RESERVE_BLOCK

MPFS.c

EEPROM_CONTROL

MPFS.c

1 Az MPLAB fejleszt oi krnyezet rzkeli a vltoztatsokat s kezeli a fgg osgeket, csak azt fordtja le, ami szksges.

10 Azonost STACK_USE_ICMP STACK_USE_SLIP STACK_USE_IP_GLEANING rtkek Hasznl Megjegyzs StackTsk.c Ha nincs szksg ICMP-re, ne deniljuk. SLIP.c Ha nincs szksg SLIPre ne deniljuk. StackTsk.c Ha nincs szksg IP Gleaning-re ne deniljuk. DHCP.c, Ha nincs szksg DHCPStackTsk.c re ne deniljuk. FTP.c Ha nincs szksg FTP szerverre ne deniljuk. TCP.c, Ha nincs szksg TCPStackTsk.c re ne deniljuk. Automatikusan engedlyezi, ha valamelyik modulnak szksge van TCP-re. UDP.c, Ha nincs szksg UDPStackTsk.c re ne deniljuk. Automatikusan engedlyezi, ha valamelyik modulnak szksge van UDP-re. ARP.c, Ha deniljuk a kliens TCP.c md fggvnyek engedlyez odnek. TCP.c A TCP vrjon vagy ne az ACK-re a kvetkez o csomag kldse el ott. felh. alk. Alap IP: 10.10.5.15 felh. alk. Alap netmaszk: 255.255.255.0 felh. alk. Alap tjr: 10.10.5.15 felh. alk. Alap MAC: 00:04:163:00:00:00 felh. alk. Aktulis IP. Ha DHCP engedlyezett akkor a szerver ltal adott kongurci. felh. alk. Aktulis netmaszk. felh. alk. Aktulis tjr. felh. alk. Aktulis MAC.

STACK_USE_DHCP STACK_USE_FTP_SERVER STACK_USE_TCP

STACK_USE_UDP

STACK_CLIENT_MODE

TCP_NO_WAIT_FOR_ACK

MY_DEFAULT_IP_ADDR_BYTE? 0-255 MY_DEFAULT_MASK_BYTE? 0-255 MY_DEFAULT_GATE_BYTE? MY_DEFAULT_MAC_BYTE? MY_IP_BYTE? 0-255 0-255 0-255

MY_MASK_BYTE? MY_GATE_BYTE? MY_MAC_BYTE?

0-255 0-255 0-255

11 Azonost MAX_SOCKETS rtkek 1-253 Hasznl TCP.c Megjegyzs Denilja, hogy hny TCP socket hasznlhat (a RAM mennyisgt ol fgg). Fordts kzben ellen orzi, hogy elegend o-e a TCP moduloknak a megadott rtk. Denilja, hogy hny UDP socket hasznlhat (a RAM mennyisgt ol fgg). Fordts kzben ellen orzi, hogy elegend o-e a UDP moduloknak a megadott rtk. Denilja a kld o puer mrett. Denilja a kld o puerek szmt. Denilja az egyszerre fenntarthat HTTP kapcsolatok szmt. Denilja a lapmretet az MPFS fjlrendszerhez. Denilja az FTP felhasznlnv maximlis hosszt. Denilja az urlapok mez oinek maximlis szmt, belertve a mez o nevt is. Denilja az urlappal tadhat sztring maximlis hosszt. Ha nincs szksg a soros-UDP talakt modulra ne deniljuk. Alap cl IP cm: 10.10.5.5. Alap cl port: 2222.

MAX_UDP_SOCKETS

1-254

UDP.c

MAC_TX_BUFFER_SIZE MAX_TX_BUFFER_COUNT MAX_HTTP_CONNECTIONS

201-1500 1-255 1-255 1-255 1-31 1-31

TCP.c, MAC.c MAC.c HTTP.c

MPFS_WRITE_PAGE_SIZE (MPFS.h) FTP_USER_NAME_LEN (FTP.h) MAX_HTTP_ARGS (HTTP.c)

MPFS.c

FTP.c

HTTP.c

MAX_HTML_CMD_LEN (HTTP.c)

1-128

HTTP.c

STACK_USE_SER2UDP

0-255 1-65535

ser2udp.c

TARGET_DEFAULT_ IP_ADDR_BYTE? (ser2udp.h DEFAULT_TARGET_PORT (ser2udp.h

ser2udp.c ser2udp.c

12 Azonost DEFAULT_LOCAL_PORT (ser2udp.h INITWAIT_SEC (ser2udp.h rtkek 1-65535 042949672 Hasznl ser2udp.c ser2udp.c Megjegyzs Alap forrs port: 2221.

ARP krs el otti vrakozs ideje msodpercben. Alap: 4. TIMEOUT_SEC (ser2udp.h 0ser2udp.c ARP krs utn hny 42949672 msodpercig vr a vlaszra. Alap: 4. SER2UDP_USE_INTERRUPT ser2udp.c A soros adatok vtel(ser2udp.h hez hasznljon-e megszaktst a modul. 5.1. tblzat: Kongurcis dencik ill. vltozk

A fejleszts sorn egy projektet rdemes hasznlni. Projekt fjlbl is van el ore elksztett a programcsomagban. n az MPNICEE.pjt fjlt hasznltam. Ezt a fjlt akkor rdemes hasznlni, ha a Microchip C18 fordtt Realtek NIC-et s kls o soros EEPROM-ot hasznlunk, tovbb szksgnk van HTTP, FTP szerverre s ICMP-re. Ugyanis ezeket tudja alapbl az a program, amit ezzel a projekt fjllal fordtunk. Fontos megjegyezni, hogy a projekt fjlokban is lehet dencikat megadni.

13

6. fejezet A TCP/IP Stack moduljai


A modulris felpts miatt knnyen bellthajuk, hogy milyen szolgltatsokra van szksgnk. Egy modul letiltsa csak annyibl ll, hogy a megfelel o denci el egy megjegyzs jelet tesznk s a forrsfjlokat eltvoltjuk a projektb ol. A TCP/IP Stack moduljainak rvid ttekintse: Modul MAC SLIP ARP Fjl szksges MAC.c, Delay.c SLIP.c Lers Kzeghozzfrsi rteg Kzeghozzfrsi rteg SLIPhez Address Resolution Protocol Internet Protocol Internet Control Message Protocol Transmission Control Protocol User Datagram Protocol Stack Manager (StackTask), ami vezrli a TCP/IP Stack moduljait. HyperText Transfer Protocol szerver Dynamic Host Conguration Protocol

ARP.c, ARPTsk.c, MAC.c vagy SLIP.c, Helpers.c IP IP.c, MAC.c vagy SLIP.c, Helpers.c ICMP ICMP.c, StackTsk.c, IP.c, MAC.c vagy SLIP.c, Helpers.c TCP StackTsk.c, TCP.c IP.c, MAC.c vagy SLIP.c, Helpers.c, Tick.c UDP StackTsk.c, UDP.c, IP.c, MAC.c vagy SLIP.c, Helpers.c Stack Manager StackTsk.c, TCP.c, IP.c, ICMP.c, ARPTsk.c, ARP.c, MAC.c vagy SLIP.c, Tick.c, Helpers.c HTTP Server HTTP.c, TCP.c, IP.c, MAC.c vagy SLIP.c, Helpers.c, Tick.c, MPFS.c, XEEPROM.c DHCP Client DHCP.c, UDP.c, IP.c, MAC.c, Helpers.c, Tick.c

14 Modul IP Gleaning FTP Server Serial2UDP Fjl szksges Lers StackTsk.c, ARP.c, IP cm kongurlshoz ARPTsk.c, ICMP.c, MAC.c vagy SLIP.c FTP.c, TCP.c, IP.c, File Transfer Protocol szerver MAC.c vagy SLIP.c ARP.c, UDP.c, MAC.c vagy Soros-UDP talakt SLIP.c 6.1. tblzat: TCP/IP Stack moduljai

Most a soros-UDP talakt modul ltal hasznlt modulok rszletes lersa kvetkezik. Az itt nem trgyalt modulok (MAC, SLIP, IP, ICMP, TCP, DHCP) angol nyelvu lersa az AN833-as [1] dokumentumban tallhat.

6.1.

Address Resolution Protocol modul

Az ARP modul gondoskodik arrl, hogy az IP cmekb ol megtudjuk, hogy milyen hardveres cm (MAC cm) tartozik hozz s hogy ms eszkzk az IP cmnket tudva, megkapjk a MAC cmnket. Az Microchip TCP/IP Stack-jnek ARP rtege kt modulbl ll: ARP.c s ARPTask.c. Az ARP modulban (ARP.c) az ARP alapvet o fggvnyeit denilja. Az ARPTask ami az ARPTsk.c fjlban tallhat ezeket a fggvnyeket felhasznlva valstja meg az ARP szolgltatst. Az ARPTask vlaszol az ARP krsekre s egy egyszintu trban trolja a ms hosztok ARP vlaszt. Az ARPTask modulban nincs megvalstva az id otllps kezelse, ezt a fels obb szintu modulokban kell megoldani. Az ARPTask ktfle mdban mukdhet: szerver illetve szerver/kliens. A szerver/kliens mdban lehetsges ARP krsek generlsa. Szerver mdban ez a kdrsz nincs befordtva. ltalban az alkalmazsok szerver mdban futnak s rdemes is szerver mdba fordtani, a kd mretnek cskkentse rdekben. Tovbb szerver mdban nem kerl lefoglalsra az egyszintu tr s ezzel RAM terletet takarthatunk meg. Ha a STACK_CLIENT_MODE denilva van szerver/kliens mdban fog mukdni az ARPTask modul. A soros-UDP konverter szerver/kliens mdban hasznlja az ARP modult.

6.1.1. ARP funkcik


ARPIsTxReady Ez egy makr ami megllaptja, hogy adatok kldse lehetsges-e. Szintaxis: ARPIsTXReady() Paramter: Nincs Visszatrsi rtk: IGAZ: Ha legalbb egy kld o puer res. HAMIS: Nincs res kld o puer. Elofelttel: Nincs

15 Mellkhats: Nincs Megjegyzs: Ez csak egy makrdenci a MACIsTxReady fggvnyre. Plda: // Ha a kld puffer res, elkldnk egy ARP csomagot if ( ARPIsTxReady() ) { // ARP csomag kldse ARPPut(&RemoteNode, ARP_REPLY); } ARPGet Ez a funkci beolvas egy ARP csomagot s visszatrskor megadja a szksges informcikat a csomagrl. Szintaxis: BOOL ARPGet(NODE_INFO *remote, BYTE *opCode) Paramter: remote [kimen o] A tvoli eszkzhz tartoz informcik, a MAC s az IP cm. opCode [kimen o] ARP kd. A paramter lehetsges rtkei a kvetkez ok: ARP_REPLY Egy ARP vlasz csomag rkezett ARP_REQUEST Egy ARP krs csomag rkezett ARP_UNKNOWN Egy ismeretlen ARP csomag rkezett Visszatrsi rtk: IGAZ: Ha egy rvnyes ARP csomag rkezett s az a mi eszkznknek van cmezve. HAMIS: Ha ismeretlen ARP kdja van a csomagnak vagy nem neknk van cmezve a csomag. Elofelttel: MACGetHeader mr meg volt hvva s a kapott MAC csomag tpusa MAC_ARP Mellkhats: Nincs Megjegyzs: Ez a funkci azt felttelezi, hogy az aktv puerben van egy ARP csomag s a hozzfrsi mutat az ARP csomag elejre mutat. ltalban a magasabb szintu rtegek ellen orzik a MAC puert s csak akkor hvjk ezt a fggvnyt, ha ARP csomagot rzkeltek. Ez a funkci beolvassa az egsz ARP csomagot s felszabadtja az aktv puert. Plda: // Ha MAC csomag rkezett... if ( MACGetHeader(\&RemoteNode, \&PacketType) ) \{ // Ha ez egy ARP csomag, beolvassuk if ( PacketType == MAC\_ARP ) \{ // Ez egy ARP csomag ARPGet(\&RemoteNode, \&ARPCode); ...

16 ARPPut Ez a funkci feltlti a MAC puert egy rvnyes ARP csomaggal. Szintaxis: void ARPPut(NODE_INFO *remote, BYTE opCode) Paramter: remote [bemen o] A tvoli eszkz adatai, mint a MAC s az IP cm opCode [bemen o] ARP kd. Lehetsges rtkei a kvetkez ok: ARP_REPLY ARP vlaszknt kldi el a csomagot ARP_REQUEST ARP krsknt kldi el a csomagot Visszatrsi rtk: Nincs Elofelttel: ARPIsTxReady == TRUE Mellkhats: Nincs Megjegyzs: Felpti az ARP csomagot s elkldi. Plda: // Megnzzk, hogy kld puffer elrhet-e if ( ARPIsTxReady() ) { // Igen, elkldjk ARPPut(&RemoteNode, ARP_REQUEST); ... }

6.1.2. ARPTask funkcik


ARPInit Ez a funkci inicializlja az ARPTask modult s el okszti az ARP krsek kldsre s megvlaszolsra. Szintaxis: void ARPInit() Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Szerver/kliens mdban ez a funkci inicializlja az egyszintu trolt. Plda: // Initialize ARPTask ARPInit(); ... ARPResolve Ez a funkci egy ARP krst kld egy tvoli eszkznek. Szintaxis: void ARPResolve(IP_ADDR *IPAddr) Paramter: IPAddr [bemen o] A tvoli eszkz IP cme, aminek a MAC cmt szeretnnk tudni. Visszatrsi rtk: Nincs Elofelttel: ARPIsTxReady == TRUE

17 Mellkhats: Nincs Megjegyzs: Ez a funkci csak szerver/kliens mdban elrhet o. Plda: // Ellenrizzk, hogy a kld puffer elrhet-e if ( ARPIsTxReady() ) { // ARP krs kldse ARPResolve(\&RemoteNodeIP); ... } ARPIsResolved Ez a funkci ellen orzi a bels o trolt s visszatrsi rtkknt megadja a cl hoszt MAC cmt. Szintaxis: BOOL ARPIsResolved(IP_ADDR *IPAddr, MAC_ADDR *MACAddr) Paramter: IPAddr [bemen o] A tvoli eszkz IP cme, aminek a MAC cmt szeretnnk tudni. MACAddr [kimen o] A puer ami a tvoli hoszt MAC cmt fogja trolni. Visszatrsi rtk: IGAZ: Ha egyez o IP cm van a bels o trolban s az tmsoldott a MACAddr vltozba. HAMIS: Ha nincs egyez o IP cm a bels o trolban. Ilyenkor a MACAddr rtke nem vltozik. Elofelttel: Nincs Mellkhats: A bels o trolbl az tmsolt adatok eltvoltsra kerlnek. Megjegyzs: Az ARPTask csak egyszintu trolval dolgozik, ezrt a fels obb rtegnek kell arrl gondoskodnia, hogy msik ARP krst ne kldjn, mg az el oz ore nem rkezett vlasz. Ez a funkci csak szerver/kliens mdban elrhet o. Plda: // Ellenrizzk, hogy rkezett-e vlasz if ( ARPIsResolved(&RemoteIPAddr, &RemoteMACAddr) ) { // MAC cm megvan. Ms feladat kvetkezhet... ... } else { // Mg nincs meg a MAC. Vrunk... ... }

6.2.

User Datagram Protocol (UDP) modul

Az UDP rteg az UDP.c fjlban van implementlva. A fejlc fjlban (UDP.h) vannak denilva a rteg szolgltatsai. Ebben a Stack architektrban az UDP egy aktv

18 rteg. Veszi az UDP csomagot s a megfelel o UDP socket-et rtesti az adat rkezsr ol. Az UDP modul kooperatv taszkknt van implementlva s automatikusan mukdik a f o alkalmazstl fggetlenl. A rteg legfeljebb 254 UDP socket-et hasznlhat. Ez az rtk csak az elrhet o memritl s a fordttl fgg. Tbb socket hasznlatval tbb szimultn UDP kapcsolat hasznlhat. Fontos megjegyezni, hogy minden socket krlbell 19 byte memrit hasznl (rdemes ellen orizni az UDP.h fjlt) s minden socket nveli az UDP csomagok feldolgozsnak idejt. Ellenttben a tbbi socket implementcitl, a Microchip TCP/IP Stack-ben minden socket egy kld o puert hasznl. Ez cskkenti a RAM szksgletet, de problmt okozhat, ha nhny socket nem szabadtja fel a kld o puert. Ebben az esetben a tvoli hosztok s/vagy helyi alkalmazsok nem tudnak kapcsolatba lpni az eszkzzel. Ennek elkerlse rdekben a felhasznlnak gondoskodnia kell arrl, hogy az sszes socket szmra elegend oen nagy puer lljon rendelkezsre. A vteli oldalon is csak egy puer van, ezrt ha adatot olvasunk, az sszes adatot be kell olvasni egy taszkban s rteni a puert, hogy a tbbi socket is tudja olvasni az adatt. Nem lehet azt tenni, hogy a taszk csak a puer egy rszt olvassa be s majd egy kvetkez o hvs esetn dolgozza fel a maradkot. A Microchip TCP/IP Stack-ben nincs implementlva az UDP ellen orz o sszeg kpzs. Az ellen orz o sszeg helyre mindig nulla rtk kerl. Ezrt minden UDP-t hasznl modulnak magnak kell gondoskodnia az adatok integritsrl. UDPInit Ez a funkci inicializlja az UDP modult s el okszti a tbbszl UDP kapcsolatokra. Szintaxis: void UDPInit() Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt csak egyszer kell meghvni. Plda: // Initialize UDP UDPInit(); ... UDPOpen Ez a funkci el okszti egy UDP socket-et, hogy a megadott porton adatokat tudjon tovbbtani. Szintaxis: UDP_SOCKET UDPOpen(UDP_PORT localPort, NODE_INFO *remoteNode, TCP_PORT remotePort) Paramter: localPort [bemen o] A helyi UDP port, ahonnan az adat jn. remoteNode [bemen o] A tvoli hoszt, ahova az adatokat kldjk. remotePort [bemen o] A tvoli hoszt egy UDP portja, ahova az adatokat kldjk.

19 Visszatrsi rtk: Egy rvnyes socket azonost, ha volt szabad socket vagy INVALID_UDP_SOCKET, ha nem volt szabad socket. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ez a funkci egyszerre hasznlhat helyi ill. tvoli kezdemnyezsu adattovbbtsra. Nincs konkrt kapcsoldsi sma az UDP-ben. Ha egy UDP socketet megnyitottak, akkor az ksz az adatok kldsre s fogadsra is, egszen addig, amg be nem zrjk a socket-et. Plda: switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // Egy DHCP zenet elkldse break; ... UDPClose Bezrtja a megadott UDP socket-et s szabadnak jelli. Szintaxis: void UDPClose(UDP_SOCKET socket) Paramter: socket [bemen o] A bezrand socket azonostja. Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt csak egyszer kell meghvni. Plda: switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else

20 { // Egy DHCP zenet elkldse ... // Socket bezrsa UDPClose (DHCPSocket); } break; ... UDPIsPutReady Ez a makr llaptja meg, hogy a megadott socket ksz-e az adatok kldsre. A socket akkor ksz adatkldsre, ha legalbb egy MAC kld o puer res. Amikor ezt a makrt meghvjuk, automatikusan aktv socket-t vlik. Szintaxis: BOOL UDPIsPutReady(UDP_SOCKET socket) Paramter: socket [bemen o] Az ellen orizend o socket azonostja. Visszatrsi rtk: IGAZ: Ha a megadott socket ksz az adatok kldsre. HAMIS: Ha nincs szabad kld o puer. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Egy socket mindig ksz az adatkldsre, amg van res MAC kld o puer. Amikor ellen orizzk a socket-et, az aktvv vlik s a tbbi UDP funkci is mukd okpes lesz: UDPGet, UDPFlush s UDPDiscard. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre... ...

21 } break; ... UDPPut Az aktv socket kld o puerbe egy bjt adatot helyez. Szintaxis: BOOL UDPPut(BYTE byte) Paramter: byte [bemen o] Az adat, amit a kld o puerbe akarunk tenni. Visszatrsi rtk: IGAZ: Ha a megadott adatot sikerlt a puerbe tlteni s mg van hely tbb adatnak. HAMIS: Ha az adatot sikerlt a puerbe tlteni, de nincs hely tbb adatnak. Elofelttel: UDPIsPutReady == TRUE Mellkhats: Nincs Megjegyzs: Ha egy socket kldsre ksz, akkor sszes adatot be kell tltennk vagy addig tlthetjk fel amg teljesen tele nem lesz a socket puere. A felhasznl nem tltheti az adat egyik felt egy socket-be a msik felt egy msik socket-be. Fontos megjegyezni, hogy amikor betltjk az adatokat, akkor az adatok kldse nem trtnik meg. Kivve akkor, ha a puer megtelik, ekkor a funkci automatikusan elkezdi az adatok kldst s HAMIS rtkkel tr vissza. A felhasznli program ks obb prblhat adatot betlteni. Ha az elkldend o adat kevesebb, mint a kld o puer, a felhasznli programnak kell kezdemnyezni a puer rtst az UDPFlush funkci hvsval. ltalban, rdemes a puert rteni, ha egy egysgnyi adatot betltttnk a puerbe, attl fggetlenl, hogy a puer mg nincs tele. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre...

22 // Az UDPPut kzvetlenl nem kapja meg az DHCPSocket paramtert // Az UDPPut az aktv socket-et hasznlja, // amit az UDPIsPutReady() llt be, ez a DHCPSocket. UDPPut(0x55); ... } break; ... UDPFlush Az aktv socket kld o puert kldsre ksznek lltja be. Szintaxis: void UDPFlush() Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Az UDPPut() fggvny mr meg volt hvva s a socket aktv, vagyis mr futtattuk a UDPIsPutReady() fggvnyt. Mellkhats: Nincs Megjegyzs: Ez a funkci kldsre ksznek lltja a kld o puert, de a klds nem indul el egyb ol. A felhasznlnak nem kell ellen oriznie a kldsi folyamat llapott. A NIC 15-szr prblja meg a elkldeni az adatot (legalbbis a RTL8019AS, ms NIC esetn a NIC adatlapjban tallhat ez az informci). Ha a socket puer egyszer mr rtve volt s res, a tovbbi UDPFlush hvsokat a program gyelmen kvl hagyja. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre...

23 // Az UDPPut kzvetlenl nem kapja meg az DHCPSocket // paramtert. Az UDPPut az aktv socket-et hasznlja, // amit az UDPIsPutReady() llt be, ez a DHCPSocket. UDPPut(0x55); ... // Most elkldjk UDPFlush(); } break; ... UDPIsGetReady Ez a funkci megllaptja, hogy a megadott socket tartalmaz-e vett adatokat s a socket-et aktvnak jelli ki. Szintaxis: BOOL UDPIsGetReady(UDP_SOCKET socket) Paramter: socket [bemen o] A socket azonostja Visszatrsi rtk: IGAZ: Ha a megadott socket tartalmaz vett adatokat. HAMIS: Ha a megadott socket nem tartalmaz vett adatokat. Elofelttel: Az UDPOpen() fggvny mr meg volt hvva. Mellkhats: Nincs Megjegyzs: Nincs Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... ... } break;

24 ... UDPGet Az aktv socket vteli puerb ol egy bjt adatot olvas ki. Szintaxis: BOOL UDPGet(BYTE *byte) Paramter: byte [kimen o] A beolvasott adatbjt. Visszatrsi rtk: IGAZ: Ha sikerlt egy bjtot beolvasni. HAMIS: Ha nem sikerlt az adat beolvassa. Elofelttel: UDPIsGetReady == TRUE Mellkhats: Nincs Megjegyzs: Ha a socket-ben adatok vannak, a felhasznli programnak be kell olvasnia egy vagy tbb bjtot egy taszk ideje alatt s a socket puert felszabadtani. Ms socket-b ol adatot kiolvasni addig nem szabad, amg az el oz o puer nem lett felszabadtva. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... // A buffer egy BYTE mutat while( UDPGet(buffer) ) buffer++; // Feldolgozzuk... ... // Socket puffer rtse ... } break; ...

25 UDPDiscard Az aktv socket vteli puert felszabadtja. Szintaxis: BOOL UDPDiscard() Paramter: Nincs Visszatrsi rtk: IGAZ: Ha a vteli puert sikerlt felszabadtani. HAMIS: Ha a vteli puer egyszer mr fel lett szabadtva. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Nincs Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... // A buffer egy BYTE mutat while( UDPGet(buffer) ) buffer++; // Feldolgozzuk... ... // Socket puffer rtse UDPDiscard(); } break; ... UDPProcess Ez a funkci egy taszkknt mukdik. Egy berkezett UDP csomagrl megllaptja, hogy melyik UDP socket-hez tartozik. Ezt a funkcit csak akkor kell meghvni,

26 ha egy UDP csomag rkezett. Szintaxis: BOOL UDPProcess(NODE_INFO *remote, WORD len) Paramter: remote [bemen o] A tvoli eszkz adatai, ahonnan az UDP csomag rkezett len [bemen o] Az UDP csomag teljes hossza a fejlcet is beleszmtva Visszatrsi rtk: IGAZ: Ha a taszknak sikerlt teljesen feldolgoznia a megadott csomagot. HAMIS: Ha a taszknak csak rszben sikerlt feldolgoznia a megadott csomagot. Elofelttel: IPGetHeader == TRUE s IPProtocol = IP_PRO_UDP Mellkhats: Nincs Megjegyzs: Ahogy fentebb is megjegyeztk, ez a funkci valstja meg az UDP taszk funkcit. Akkor kell meghvni, ha egy UDP csomag rkezett ez a funkci beolvassa s feldolgozza azt. A funkci visszatrsi rtke mutatja meg a hvnak, hogy a StackTask llapotjelz ojt meg kell-e vltoztatni. Ebben a implementciban mindig IGAZ rtkkel tr vissza a funkci. Tovbbi informcirt a Stack Manager forrskdjt rdemes megnzni, ami a StackTsk.c fjlban tallhat. Fontos szben tartani, hogy ezzel a funkcival nem kell tr odni, ha a StackTask funkcit hasznljuk. Plda: ... switch(smState) { case SM_STACK_IDLE: if ( MACGetHeader(&RemoveMAC, &MACFrameType) ) { if ( MACFrameType == MAC_IP ) smState = SM_STACK_IP; ... return; case SM_STACK_IP: if ( IPGetHeader(&RemoteNode, &IPFrameType, &IPDataCount) ) { if ( IPFrameType == IP_PROT_UDP ) smState = SM_STACK_UDP; ... return; case SM_STACK_UDP: if ( UDPProcess(&RemoteNode, IPDataCount) ) smState = SM_STACK_IDLE; return; ...

27

6.3.

Stack Manager modul

Ahogy mr korbban is emltettem, ez a Stack klnbz o modulok gyujtemnye. Nhny modult (mint az IP, TCP, UDP s ICMP), akkor kell meghvni, ha olyan csomag rkezett. Annak az alkalmazsnak, ami a Microchip TCP/IP Stack-et hasznlja, gondoskodnia kell arrl, hogy ezek a modulok megfelel o id okznknt fussanak. A Stack Manager modul csak a TCP/IP Stack moduljait vezrli. A f o alkalmazsban nem kell foglalkoznunk a klnbz o modulok meghvsval, csak a StackTask nevu taszkot kell meghvnunk. Ez a modul egy kln rteg a StackTask rteg aminek a forrsa a StackTask.c fjlban tallhat. Amikor ez a taszk fut, megkrdezi a hlzatelrsi rteget, hogy rkezett-e valamilyen csomag. Ha rkezett, akkor megnzi a fejlct s a megfelel o modulnak tadja tovbbi feldolgozs cljbl. Miel ott a Stack Manager-t munkra fognnk, meg kell hvni a StackInit() funkcit, ami inicializlja a modult. Ha ez megtrtnt a StackTask() fggvnyt kell periodikusan meghvni, hogy a berkez o csomagokat id oben elirnytsuk s ekzben az id o tllpst s hibkat is kezelni tudjuk. A StackTask pontos mukdsnek algoritmusa a 6.1. brn lthat.

6.4.

A soros-UDP talakt modul

Mivel ezt a modult rtam n, ezrt rszletesen lerom a bels o mukdst. A modul hasznlathoz kt darab UDP socket-re van szksg. A soros vonalon rkez o adatokat megszaktssal s polling eljrssal is vtelezhetjk. Termszetesen rdemes a megszakts hasznlatt engedlyezni a ser2udp.h fjlban. A soros vonalrl rkez o adatok egy alapbl 50 bjtos puerbe kerlnek. Ha megtelik vagy enter (0xA, 0xD) karakter rkezik, akkor azonnal felptjk s elkldjk az UDP csomagot. A soros adatok kldsekor sajnos nem lehet megszaktst hasznlni, mert ha az UDP csomagot megkaptuk azt fel kell dolgozni s fel kell szabadtani a puert ugyanabban a taszkban, ahol rzkeltk, hogy UDP csomag rkezett. Ha lenne elegend o memrink, akkor az adatokat tmsolva megoldhat lenne a megszaktsos adatklds. Az AppConfig struktrjba kerlt j vltozk listja a 6.2. tblzatban lthat. A 6.2. tblzatban lthat vltozk a websrvr.c fjlban az InitAppConfig fggvnyben kapnak egy kezdeti rtket, ill. ha ltezik elmentett bellts a kls o soros EEPROM-ban, akkor az rtkk onnan tlt odik be. Jelenleg sem soros adatfolyamszablyozs sem parits ellen orzs nincs implementlva. A 6.3. tblzatban lev o bels o vltozkat a modul fggvnyei hasznljk. Serial2UDP_Init A modul inicializlst ez a fggvny vgzi el. Szintaxis: Serial2UDP_Init Paramter: Nincs Visszatrsi rtk: Nincs

28

6.1. bra. A Stack Manager algoritmusnak folyamatbrja

29 NODE_INFO target WORD target_port WORD local_port BYTE refresh BYTE baud BYTE FlowCtrl A cleszkz adatai: IP cm s MAC cm. A cl port szma. A helyi port szma. A statisztikk megtekintsekor a frisstsek kztti id o msodpercben. Az baud-dal arnyos kiszmtott rtk, ami az SPBRG vltozba kerl. rtke lehet 0: nincs szablyozs, 1: szoftveres szablyozs, 2: hardveres adatfolyam szablyozs. (Jelenleg nincs hasznlva, ks obbi fejlesztshez fenntartva.) rtke lehet 0: nincs parits ellen orzs, 1: pratlan parits, 2: pros parits ellen orzs. (Jelenleg nincs hasznlva, ks obbi fejlesztshez fenntartva.)

BYTE Parity

6.2. tblzat. A soros-UDP talakt modul kongurcis vltozi static UDP_SOCKET UDPSocket BYTE status DWORD rxbytes, txbytes static WORD count static BYTE buf[BUF_SIZE] static BYTE buf_end static BYTE_VAL misc Az adatok tovbbtshoz hasznlt socket. A modul llapott trol vltoz. Tovbbi informcik a 6.4. tblzatban. A fogadott s elkldtt oktetek szma. A bemeneti soros puerben elkldsre vrakoz bjtok szma. A bemeneti soros puer. Alapesetben 64 bjt mretu. Az adatok szma a soros puerben. Egyes bitjei ms-ms jelentssel brnak. A 0. bit: A SendSerialData fggvny legkzelebbi futsakor megprbljuk-e elkldeni az adatokat.

6.3. tblzat. A soros-UDP talakt modul bels o vltozi Elofelttel: Nincs Mellkhats: A modul inicializlsa legalbb 4 msodpercig (INITWAIT_SEC) tart. Megjegyzs: El oszr vr 4 msodpercet. Ennyi id o elg, hogy felledjen a NIC s rzkelje, hogy a kapcsolat l. (A ks obbiekben rdemes lenne kdot trni gy, hogy a NIC interfszn keresztl krdezze le, hogy l-e a kapcsolat.) Utna elkld egy ARP krs csomagot, hogy megtudja a cl IP cmhez tartoz MAC cmet. Mg ngy msodpercig vr (TIMEOUT_SEC) utna Hiba: MAC cm lekrdezse kzben id otllps trtnt hiballapotba lp. Ha sikerlt a MAC lekrdezse megprbl egy UDP socket-et megnyitni. Ennek sikertelensge esetn Hiba: Nincs szabad UDP socket, ellenkez o esetben Rendben llapotba kerl. A fggvnyt csak egyszer kell meghvni. Plda: ... Serial2UDP_Init ();

30 ... Serial2UDP_GetSerialData Beolvassa a soros vonalrl jv o adatot s elhelyezi a buf puerben, ha lehetsges. Ha a puer megtelt vagy soremels (0xD), kocsi vissza (0xA) karakter rkezett, akkor a flush vtozt igaz rtkre lltja. Ha a soros vonali adatok vtelnl keret hiba trtnt a modul Hiba: RS-232 keret hiba llapotba kerl. Ha az adatok vtelekor a vteli puer fellrsa kvetkezett be, akkor a Hiba: Az RS-232 puer fellrs llapot ll be. A fggvny folyamatbrja a 6.2. brn lthat. Az brn a szaggatott vonal akkor rvnyes, ha ezt a fggvnyt a Serial2UDP fggvny hvja meg s nem megszaktssal mukdik. Szintaxis: void Serial2UDP_GetSerialData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Megszaktsos mdban s a pollingolsnl is ez a fggvny mukdik. Pollingnl a Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs Serial2UDP_SendSerialData Ha a buf puer tele van (a flush bit 1 rtku), akkor elkszt egy UDP csomagot s elkldi a belltott IP cmnek. Szintaxis: void Serial2UDP_SendSerialData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs Serial2UDP_ProcessUDPData A fogadott UDP csomagot azonnal elkldi a soros vonalon keresztl. Folyamatbrja a 6.3. brn lthat. Szintaxis: void Serial2UDP_ProcessUDPData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs

31

6.2. bra. A Serial2UDP_GetSerialData fggvny folyamatbrja Serial2UDP Ez egy kooperatv taszk, amit a f o ciklusban kell meghvni. Szintaxis: void Serial2UDP () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Inicializls megtrtnt. Mellkhats: Nincs Megjegyzs: A soros vonalon berkez o adatokat a buf puerben trolja a Serial2UDP_GetSerialData () fggvny segtsgvel (csak polling mdszernl).

32

6.3. bra. A Serial2UDP_ProcessUDPData fggvny folyamatbrja A SendSerialData () eljrssal kldi el a buf puerben trolt adatokat a soros vonalon s a ProcessUDPData () fggvnnyel a megadott portra rkez o UDP csomagokat egyb ol kirja a soros vonalra. Plda: ... StackTask(); HTTPServer(); Serial2UDP(); ... Serial2UDP_ReInit A kongurci megvltozsakor kell meghvni. Szintaxis: void Serial2UDP_ReInit () Paramter: Nincs Visszatrsi rtk: Nincs

33 Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Szinte teljesen megegyezik az Serial2UDP_Init funkcival, de az ARP krs kikldse el ott nincs 4 msodperces vrakozs. Plda: Serial2UDP_GetStatusString A modul llapotra vonatkoz stringre mutat mutatt ad vissza. Szintaxis: char *Serial2UDP_GetStatusString (void) Paramter: Nincs Visszatrsi rtk: Egy sztring mutat, ami megegyezik a Serial2UDP_StatusString vltozban lev o rtkkel. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A sztring HTML kdokat tartalmaz, 0 kd karakterrel van lezrva s a programmemriban van. A lehetsges llapotok szvegei a 6.4. tblzatban lthatk. Sorszm 0 1 2 3 4 5 6 Angolul Unknown Ok Error: UDP socket not available Error: Cant resolve MAC address, time out Error: Buer is full Error: RS-232 Framing error Error: RS-232 Overrun error Magyarul Ismeretlen Rendben Hiba: Nincs szabad UDP socket Hiba: MAC cm lekrdezse kzben id otllps trtnt Hiba: A puer tele van Hiba: RS-232 keret hiba Hiba: RS-232 puer fellrs

6.4. tblzat. A soros-UDP modul talakt llapotai Plda: ... WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val) { switch(var) { case VAR_DEVSTATUS: if (ref == HTTP_START_OF_VAR) { Serial2UDP_GetStatusString (); ref = (BYTE)0; } *val = Serial2UDP_StatusString[(BYTE)ref]; if (Serial2UDP_StatusString[(BYTE)ref + 1] == \0) return HTTP_END_OF_VAR;

34 (BYTE)ref++; return ref; ...

6.5.

HTTP szerver modul

Ez a HTTP szerver kooperatv taszkknt fut, amit a f o alkalmazsbl kell meghvni. A szerver a HTTP.c forrsfjlban van implementlva s a felhasznli programban kt segdrutint (angolul callback function) hasznlhatunk. Az bemutat alkalmazs forrsfjljt a websrvr.c fjlt hasznltam fel a sajt programom rshoz. Ez a HTTP szerver egy cskkentett tuds program, direkt begyazott rendszerekhez rdott. A szerver tulajdonsgai: Tbbszl HTTP kapcsolatok Egy egyszeru fjlrendszert tmogat (MPFS) A honlapokat a bels o programmemriban s kls o EEPROM-ban is trolhatjuk Tartalmaz egy PC-s programot MPFS kpfjl ltrehozshoz A HTTP GET metdust tmogatja (ms metdusok knnyen hozzadhatk) Egy mdostott Common Gateway Interface-t (CGI) tmogat Dinamikusan generlhat a honlapok tartalma. A HTTP szerver hasznlatbavtelhez a kvetkez o lpseket kell vgrehajtani: 1. A StackTsk.h fjlban vagy a projekt belltsnl denilni kell a STACK_USE_HTTP_SERVER dencit. 2. A StackTsk.h fjlban be kell lltani a MAX_HTTP_CONNECTIONS rtkt. 3. A http.c s mpfs.c fjlokat hozz kell adni a projekthez. 4. Attl fgg oen, hogy hol szeretnnk a weblapokat trolni, denilni kell az MPFS_USE_PGRM vagy az MPFS_USE_EEPROM kulcsszavakat. Ha kls o EEPROMot hasznlunk trolelemnek az xeeprom.c fjlt is hozz kell adni a projekthez. 5. A main() fggvnyt mdostani kell, hogy a HTTP szerver mukdjn. Az sszes weblapot egy MPFS (Microchip File System) fjlrendszerbe kell konvertlni. Ha az MPFS kpfjlt kls o EEPROM-ban troljuk, akkor a felhasznli programba implementlni kell az adatok rgztshez szksges fggvnyt. A HTTP szerver alap honlapknt az index.htm fjlt hasznlja. Ha pldul egy bngsz o a HTTP szerverhez fordul gy hogy csak az IP cmet adtk meg a bngsz onek az index.htm fjlt kapja meg a bngsz o. Teht minden MPFS kpfjlban lennie kell egy index.htm fjlnak. Ha szksges az alap fjlnv megvltoztathat, ha a http.c forrsban a HTTP_DEFAULT_FILE_STRING dencit trjuk. Fontos, hogy a weblap fjlok nevei ne tartalmazzk a kvetkez o karaktereket:

35 aposztrf s idz ojel ( s ") kisebb-nagyobb jelek (< s >) kett os kereszt jel (#) szzalk jel (%) szgletes s kapcsos zrjelek ([, }, [, {) szur o jel (|) vissza perjel (\) kalap jel Ha egy fjl neve tartalmaz ezek kzl egy karaktert, akkor az a honlap nem lesz elrhet o. A HTTP szerveren van egy lista a tmogatott fjl tpusokkal. Ezt az informcit a bngsz o hasznlja fel; ebb ol llaptja meg, hogy hogyan rtelmezze a kapott adatokat. A fjlok azonostsa a hrombetus kiterjeszts alapjn trtnik. Alapbl a HTTP szerver a kvetkez o fjltpusokat tmogatja: .txt, .htm, .gif, .cgi, .jpg, .cla, .wav. Ha egy alkalmazsban olyan fjltpust akarunk hasznlni, ami nincs a listban, akkor a http.c fjlban httpFiles tblzatot kell mdostani utna a httpContents felsorolst. Az ismert fjltpusok listjt a stluslapok tpussal b ovtettem (.css).

6.5.1. Dinamikus honlap generls


A HTTP szerver dinamikusan meg tudja vltoztatni a honlapok tartalmt. A CGI (.cgi kiterjesztsu legyen) fjlokban a %xx kulcssz helyre tetsz oleges adat helyettesthet o. A % jel egy vezrl o karakter. Az xx egy ktjegyu azonost, hexadecimlis formban. gyeljnk arra, hogy az A-F karakterek nagy betuvel legyenek rva! gy 256 fle vltozt hasznlhatunk. Ha % jelet szeretnnk kirni, rjunk egyms utn kt szzalk jelet: %%. Az eredeti Microchip megoldsban nem teljes rtku hexadecimlis szmok voltak megadhatk. A % jel utn kt darab decimlis szmot kellett rni, amit a programban hexadecimlis szmknt kellet feldolgozni. gy 00-99 vltoz megadsa lehetsges. n rtam egy egyszeru konvertert, ami a hexadecimlis stringet talaktja egy bjtt. gy 00-tl FF-ig adhatk meg az azonostk. HTTPGetVar Ez a funkci egy segdfggvny (callback function) a HTTP-hez. Ha HTTP szerver egy %xx szveget tall egy CGI lapon, akkor meghvja ezt a funkcit. Ezt a funkcit a felhasznli programban kell megrni s klnbz o vltoz adatokat tudunk vele tovbbtani. Szintaxis: WORD HTTPGetVar(BYTE var, WORD ref, BYTE *val) Paramter: var [bemen o] A vltoz azonostja, aminek az llapott akarjuk lekrdezni.

36 ref [bemen o] Ez az rtk jelzi, hogy ha ez az els o fggvnyhvs. Ekkor a vltoz rtke HTTP_START_OF_VAR. Ez els o hvs utn mr ez a vltoz a felhasznli alkalmazs. Egyszerre csak egy bjt tvitele lehetsges. Ez a vltoz teszi lehet ov, hogy tbb bjt tvitele esetn a HTTP szerver nyomon kvesse az adatok tvitelt gy, hogy ebben a vltozban az tvitt adat indext kell tenni s visszatrskor is ezt a vltozt kell tadni. Az utols bjt tvitelekor HTTP_END_OF_VAR rtket kell visszatrsi rtknek megadni. A HTTP szerver egszen addig meghvja ezt a funkcit, amg nem kap egy HTTP_END_OF_VAR rtket. val [kimen o] Egy bjt adat, amit kldeni szeretnnk. Visszatrsi rtk: A ref vltoz j rtke, amit a felhasznli alkalmazs llapt meg. Ha HTTP_END_OF_VAR rtket ad vissza, legkzelebb csak akkor hvdik meg, ha megint szksg van a vltoz rtkre. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ez a fggvny egy vltozt kr a felhasznli alkalmazstl, de annak nem felttlenl kell rtkeket adni. Az hogy milyen informcit ad t a fggvny, az a hozzrendelt weblaptl fgg. Plda: A soros-UDP talakthoz ksztettem a stats.cgi fjlt, ebben a kvetkez o olvashat: <tr><td>Device status</td><td>%01</td></tr> Amikor a HTTP szerver a fjl feldolgozsa sorn a %01 szveghez r, meghvja a kvetkez o funkcit: HTTPGetVar(1, HTTP_START_OF_VAR, &value). A felhasznli alkalmazsban lev o websrvr.c fjlban van ez a funkci s ehhez hasonlan nz ki: WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val) { switch(var) { ... case VAR_RXBYTES: if (ref == HTTP_START_OF_VAR) { ltoa (rxbytes, TmpString); ref = (BYTE)0; } *val = TmpString[(BYTE)ref]; if (TmpString[(BYTE)ref + 1] == \0) return HTTP_END_OF_VAR; (BYTE)ref++; return ref; ...

6.5.2. HTTP CGI


A CGI-nek egy mdostott verzija hasznlhat ebben az implementciban. Ezzel az interfsszel a HTTP kliens egy funkcit tud meghvni a felhasznli alkal-

37 mazsban a HTML GET mdszervel. Tovbbi informcik az RFC1866-os dokumentumban [5] tallhatk. A HTTP szerver nem dekdolja az tadott URL-t. Ez azt jelenti, hogy ha az tadott urlapok mez oje specilis karaktereket tartalmaz (<, >, %, kezetes karakterek, stb.), akkor a funkcinak tadott paramter %xx formtum sztringeket fog tartalmazni, ahol a xx az ASCII karakter hexadecimlis kdja. Az urlapokat tartalmaz oldalakat .cgi kiterjesztssel kell elltni. Fontos szben tartani, hogy amikor jelszavakat tovbbtunk CGI segtsgvel, a jelszavakat kdolatlanul tovbbtjuk, teht azok lehallgathatk. HTTPExecCmd Ez egy segdfggvny (callback function). Ha a HTTP szerver a GET mdszerrel trtn o lekrdezsnl tbb mint egy paramtert kap, akkor hvja meg ezt a funkcit. Ezt a funkcit a felhasznli alkalmazsnak kell tartalmaznia. Szintaxis: void HTTPExecCmd(BYTE **argv, BYTE argc) Paramter: argv [bemen o] Ez egy sztring tmb. Az els o sztring (argv[0]) az urlap action mez ojnek tartalma, a tbbi (argv[1..n]) a paramterek. argc [bemen o] A paramterek szma, beleszmtva az action mez ot is. Visszatrsi rtk: A felhasznli alkalmazsnak be kell lltania az argv[0] vltozt egy rvnyes honlapnvre, ami a visszatrsi eredmnyt tartalmazza. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt a HTTP szerver hvja meg. A felhasznli alkalmazsnak ki kell tudnia szolglnia az egyms utni hvsokat. Alapesetben az argumentumok szma maximum 5 s az argumantumsztringek hossza legfeljebb 80 lehet. Ha egy alkalmazsnak ennl tbb argumentum vagy hosszabb sztring kell, a MAX_HTTP_ARGS vagy a MAX_HTML_CMD_LEN dencit kell megvltoztatni. Ezek a http.c fjlban tallhatk. Plda: A setup.cgi fjlt is a soros-UDP talakthoz ksztettem. Ebben olvashat a kvetkez o: <form action="setup.cgi" method="get"> <table border=0> <tr><td>Local IP</td> <td><input type="text" name="0" value="%0C"></td></tr> <tr><td>Local Port</td> <td><input type="text" name="1" value="%0D"></td></tr> <tr><td>Netmask</td> <td><input type="text" name="2" value="%0E"></td></tr> <tr><td>Gateway</td> <td><input type="text" name="3" value="%0F"></td></tr> <tr><td>Target IP</td> <td><input type="text" name="4" value="%09"></td></tr> <tr><td>Target Port</td> <td><input type="text" name="5" value="%0A"></td></tr> <tr><td>Refresh rate</td>

38 <td><input type="text" name="6" value="%06"></td> <td>sec</td></tr> <tr><td><input type="submit" name="7" value="Save"></td></tr> </table> </form> Ennek a tblzatnak a msodik oszlopaiban adhatunk meg klnfle szveg formtum adatokat. A kperny on lthat kp a 6.4. brn van. Az utols sorban egy gomb lthat Save felirattal. Ha rkattintunk erre a gombra, akkor az urlapot a GET mdszerrel elkldi a bngsz o.

6.4. bra. Urlapok kezelse A HTTP krs ez lesz: setup.cgi?0=10.10.5.15&1=2221&2=255.255.255.0& 3=10.10.5.15&4=10.10.5.5&5=2222&6=5&7=Save Ennek hatsra HTTP szerver pedig a kvetkez o paramterekkel meghvja a HTTPExecCmd fggvnyt: argc = 17 argv[0] = "setup.cgi" argv[1] = "0" argv[2] = "10.10.5.15" argv[3] = "1" argv[4] = "2221" argv[5] = "2" argv[6] = "255.255.255.0" argv[7] = "3" argv[8] = "10.10.5.15" argv[9] = "4" argv[10] = "10.10.5.5" argv[11] = "5" argv[12] = "2222" argv[13] = "6" argv[14] = "5" argv[15] = "7" argv[16] = "Save" Ehhez termszetesen MAX_HTTP_ARGS s a MAX_HTML_CMD_LEN rtkt is meg kell nvelni. Az adatokat feldolgoz fggvny pedig gy nz ki: void HTTPExecCmd(BYTE** argv, BYTE argc) { BYTE i; BYTE var; for (i = 1; i < argc; i += 2) { switch(argv[i][0] - 0) { case CGI_CMD_LOCALIP: StringToIPAddress (argv[i + 1], &AppConfig.MyIPAddr);

39 break; case CGI_CMD_LOCALPORT: AppConfig.local_port = atoi (argv[i + 1]); break; ... case CGI_CMD_BUTTON: // Ez a parameter adodik at utolsonak... Serial2UDP_ReInit (); SaveAppConfig (); break; } ... } Az egy karakterb ol ll azonostk hasznlata leegyszerusti a program kdjt, ezrt rdemes alkalmazni.

6.6.

Microchip fjlrendszer (MPFS)

A HTTP szerver egy egyszeru fjlrendszert hasznl a honlapok trolsra. A fjlrendszer kpe a mikrovezrl o memrijban s egy kls o soros EEPROM-ban is trolhat. A fjlrendszer formtuma a 6.5. brn lthat.

6.5. bra. MPFS kpfjl felptse A fenntartott terlet mrete az MPFS_RESERVE_BLOCK denciban van megadva. A fenntartott terletet a felhasznli alkalmazs hasznlhatja a kongurcis rtkek trolsra. Egy MPFS trol egy vagy tbb MPFS FAT (Fjl Elhelyezkedsi Tbla, File Allocation Table) bejegyzst tartalmaz, amit egy vagy tbb adatblokk kvet. A FAT bejegyzs hatrozza meg a fjl nevt, pozcijt a memriban s a fjl llapott. A FAT bejegyzs formtuma a 6.6. brn van.

40 Az llapotjelz o mutatja meg, hogy a bejegyzs hasznlatban van, trlve van ill. a FAT vgt is jelezheti. Minden FAT bejegyzs tartalmaz egy 16 vagy 24 bites cmet. A cm hossza a felhasznlt memria tpustl fgg. Ha a bels o programmemrit hasznljuk kis (small) memriamodellel, akkor 16 bites cmeket fog hasznlni. Ha a bels o programmemrit hasznljuk viszont nagy (large) memriamodellel, akkor 24 bites cmeket fog hasznlni. A kls o EEPROM eszkzknl mindig 16 bites cmzsi mdszert hasznlunk, fggetlenl a memriamodellt ol. Ebben a fjlrendszerben a fjlnevek 8+3 bjt hosszak. A fjl neve 8 bjtos s a kiterjeszts tovbbi 3 bjt hosszsg. A 16 bites cm megadja az els o adatblokkot. Minden fjlnv nagybetukkel szerepel a knnyebb nvkezels rdekben. Az adatblokk formtuma a 6.7. brn szerepel. A blokk vgt egy specilis karakter jelzi; az EOF (End Of File), amit 0xFFFF (16 bites cmzsnl) vagy 0xFFFFFF (24 bites cmzsnl) kvet. Ha a fjl tartalmazza az EOF karaktert, akkor egy DLE (Data Link Escape) karakterrel jelezzk, hogy ez a fjl rsze. Ha a DLE karakter szerepel az adatblokkban, akkor kt DLE karakter jelzi, hogy az a fjl rsze.

6.6.1. MPFS kp ksztse


A csomag rsze egy PC-s program (MPFS.exe), amivel MPFS kpfjlokat hozhatunk ltre. A program kpes binris s C nyelvu adatok ltrehozsra is. Az MPFS.exe hasznlata: mpfs [/?] [/c] [/b] [/r<blokk>] [bemenet] [kimenet], ahol /? hatsra segtsget r ki, /c paramter segtsgvel C kdot krhetnk, /b paramterrel binris kdot kszt (ez az alapbellts), /r paramterrel megadhatjuk hny bjtot szeretnnk fenntartani sajt hasznlatra, (ez csak binris mdban mukdik, alap: 32 bjt), bemenet a bemen o adatokat tartalmaz knyvtr,

6.6. bra. MPFS FAT bejegyzs felptse

6.7. bra. MPFS adatblokk felptse

41 kimenet az MPFS kpet tartalmaz fjl. Pldul: mpfs /c Honlap honlap.c gy egy C fjlt kapunk benne a Honlap knyvtrban lv o fjlok adatai. Binris fjlt kapunk az mpfs Honlap honlap.bin parancs hatsra. A binris fjl elejn 32 bjt fenntartott. Ha megvltoztatjuk a fenntartott terlet mrett ne felejtsk el a StackTsk.h fjlban a MPFS_RESERVE_BLOCK dencit megvltoztatni. Miel ott a kpfjlt ltrehozzuk az sszes honlapot egy knyvtrba kell msolni. Ha egy fjl kiterjesztse .htm, akkor a program az sszes kocsi vissza, j sor karaktert trli, hogy cskkentse a kpfjl mrett. Ha az MPFS kpfjlt C adatknt hasznljuk, akkor a projektnkhz hozz kell adni a C fjlt. Ha a kpfjlt kls o soros EEPROMban troljuk, a binris fjlt fel kell tlteni a memriba. Tovbbi informci a 41. oldalon az FTP szerver modul rsznl. Az MPFS kpkszt o program nem ellen orzi az elkszlt fjl mrett. Binris adat ksztse esetn ellen orizni kell az adat mrett.

6.6.2. MPFS knyvtr


Az MPFS fjlrendszer elrshez szksges knyvtr az MPFS.c fjlban van implementlva. Az MPFS knyvtrat a HTTP s az FTP szerver hasznlja a felhasznli alkalmazstl fggetlenl. Az MPFS knyvtr jelenlegi verzijval nem lehet egy ltez o fjlrendszerhez j fjlokat adni ill. trlni. Brmilyen vltozs esetn egy jabb kpfjlt kell ltrehozni. Ha a bels o programmemrit hasznljuk a trolsra, az MPFS_USE_PGRM szt denilni kell. Ha viszont kls o EEPROM-ot hasznlunk, a MPFS_USE_EEPROM kulcsszt kell denilni. Egyszerre csak egyik denci szerepelhet a StackTsk.h fjlban; ennek ellen orzsre a futsid o alatt egy ellen orz okd fut le. A memria tpustl fgg oen klnbz o lappuer mretet kell belltani. Az alap mret (amit az MPFS_WRITE_PAGE_SIZE hatroz meg) 64 bjt. Ha ms puermretre van szksg az MPFS_WRITE_PAGE_SIZE dencit kell megvltoztatni. Az MPFS knyvtrnak ez a verzija az xeeprom.c fjlt hasznlja a kls o EEPROM elrshez. Mikzben egy fjlt olvas vagy r kizrlagosan az MPFS irnytja az I2 C buszt s nem engedlyezi ms I2 C eszkzknek legyen az szolga vagy mester a hozzfrst. Ha tbb I2 C eszkzt hasznlunk, akkor a felhasznli alkalmazs rsakor ezt gyelembe kell venni.

6.7.

FTP szerver modul

Ez a modul is egy kooperatv taszkknt funkcionl s az FTP.c fjlban van a szerver forrskdja. Ez az FTP szerver nem tudja az sszes szolgltatst, ami az RFC 959ben [6] le van lerva, mivel direkt begyazott rendszerekhez lett tervezve, minimlis a mrete s a tudsa. A modul jellemz oi: Egy szl FTP kapcsolat. A felhasznl azonostsa az alkalmazs feladata, Automatikusan kezeli az MPFS fjlrendszert,

42 A PUT paranccsal egy j MPFS kp tlthet o fel, A fjlok egyenknti feltltse nem lehetsges. A modul kt rszb ol ll: maga az FTP szerver s a felhasznl azonost fggvny, ami a felhasznli alkalmazsnak kell tartalmaznia. Egy FTPVerify fggvnyt kell rnia a felhasznlnak, ami ellen orzi az FTP felhasznlt s a jelszt. Itt is megjegyzem, hogy a jelszt kdolatlanul kldi el a szmtgp, teht azok a megfelel o eszkzkkel lehallgathatk. Az FTP szerver hasznlathoz a kvetkez oket kell megtettnk: 1. A STACK_USE_FTP_SERVER-t denilni kell. A komment jelet el kell tvoltani a StackTsk.h fjlban a denci el ol. 2. A denilt socket-ek szmt nvelni kell kett ovel ugyancsak a StackTsk.h fjlban. 3. Az FTP.c s az mpfs.c fjlokat hozz kell adni a projektnkhz. 4. Vagy az MPFS_USE_PGRM MPFS_USE_EEPROM dencit be kell lltani, attl fgg oen, hogy milyen trolelemet hasznlunk. Ha kls o EEPROM-ot, az xeeprom.c fjlt is adjuk hozz a projektnkhz. 5. Mdostsuk a main() fggvnyt, hogy az FTP szerver inicializl fggvnye s taszkja fusson. Az FTP szerver 180 msodperc utn jelez id otllpst feltltsnl s letltsnl egyarnt. Ha egy kapcsolat 180 msodpercnl tovbb van IDLE (ttlen) llapotban, akkor automatikusan megszaktja a szerver a kapcsolatot. gy a bennragadt kliensek nem gtolhatjk meg a tovbbi FTP muveleteket.

6.7.1. MPFS kp feltltse FTP kliens segtsgvel


Az FTP szerver f o feladata ebben a Stack-ben, hogy tvolrl lehessen frissteni az MPFS kpfjlt. A jelenlegi verzi csak akkor mukdik, ha kls o EEPROM-ot hasznlunk adattrolsra. Egy kpfjl feltltse lthat a 6.8. brn. A vastagon szedett betuk a felhasznl ltal bert adatokat jelzi. A jelsz termszetesen nem ltszdik a kperny on. FTPVerify Ez egy segdfggvny (callback function), amit az FTP szerver akkor hv meg, ha krst vesz a kapcsolat felptsre. Ezt a funkcit a felhasznli alkalmazsnak kell tartalmaznia. Szintaxis: BOOL FTPVerify(char *login, char *password) Paramter: login [bemen o] Egy sztring, ami tartalmazza a felhasznl nevt. password [bemen o] Sztring, ami a jelszt tartalmazza. Visszatrsi rtk: IGAZ: Ha a felhasznli nv s a jelsz rvnyes. HAMIS: Ha vagy a felhasznl neve, vagy a jelsz rvnytelen.

43 c:\> ftp 10.10.5.15 220 ready User (10.10.5.15: (none)): ftp 331 Password required Password: microchip 230 Logged in ftp> put mpfsimg.bin 200 ok 150 Transferring data... 226 Transfer Complete 16212 bytes transferred in 0.01Seconds 16212000.00Kbytes/sec. ftp> quit 221 Bye 6.8. bra. MPFS kpfjl feltltse FTP kliens segtsgvel Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A felhasznlnv hossza nulltl kilencig vltozhat. Ha hosszabb felhasznlnvre van szksg az FTP_USER_NAME_LEN dencit kell megvltoztatni az ftp.h fjlban. A jelsz s az FTP utastsok hossza legfeljebb 31 karakter hossz lehet. Ha hosszabb jelsz s/vagy parancs szksges, akkor a MAX_FTP_CMD_STRING_LEN dencit kell megvltoztatni az FTP.c fjlban. Plda: ROM char FTP_USER_NAME[] #define FTP_USER_NAME_LEN ROM char FTP_USER_PASS[] #define FTP_USER_PASS_LEN = "ftp"; (sizeof(FTP_USER_NAME)-1) = "microchip"; (sizeof(FTP_USER_PASS)-1)

BOOL FTPVerify(char *login, char *password) { if ( !memcmppgm2ram(login, (ROM void*)FTP_USER_NAME, FTP_USER_NAME_LEN) ) { if ( !memcmppgm2ram(password, (ROM void*)FTP_USER_PASS, FTP_USER_PASS_LEN) ) return TRUE; } return FALSE; }

44

7. fejezet Hardver
A PIConNET krtya kapcsolsi rajzt s a nyomtatott ramkrt a ChipCad Kft. ksztette. A kapcsolsi rajz az 1. szm mellkleten lthat. A rajzon lthat 93LC46B tpus soros EEPROM nem lett beforrasztva. A krtyhoz ksztettem egy soros vonali illeszt ot s egy egyszeru tpfeszltsgstabiliztort, ami a 7.1. brn lthat. A soros vonal illesztst egy MAX232A tpus integrlt ramkr valstja meg. A rajzon MAX232 IC szerepel, a kt IC kztt annyi a klnbsg, hogy a MAX232 mell 1 F-os kondenztorokat kell tenni, mg a MAX232A megelgszik 100 nF-os kondenztorokkal. A tpfeszltsg stabilizlst pedig egy 78L05 IC vgzi el.

7.1.

Alkatrszek

7.1.1. PIC18F452 mikrovezrlo


Ez egy FLASH programmemrival rendelkez o RISC mikrokontroller10 MIPS teljestmnyre kpes s maximum 40 MHz-en mukdhet. 32 kilobjt FLASH ptettek be a programmemrinak, 1536 bjt RAM s 256 bjt EEPROM van benne. Utastskszlete 75 utastsbl ll s gy optimalizltk, hogy a C programnyelven trtn o fejlesztst megknnytse. 31 szintu verem van beptve, ami ha szksges szoftveresen b ovthet o. A nyomtatott ramkri lapon felhasznlt TQFP tok rajza a 7.2. brn lthat. Az IC rszletes lersa az angol nyelvu adatlapon [7] van. Perifrik jellemz oi: A lbak ramleadsa vagy -felvtele 25 mA lehet. Hrom kls o megszaktst generl lb ll rendelkezsre. Timer0 modul: 8 bit ill. 16 bites id ozt o/szmll 8 bites programozhat el oosztval. Timer1 modul: 16 bites id ozt o/szmll. Timer2 modul: 8 bites id ozt o/szmll 8 bites peridus regiszterrel (id oalap a PWM-hez).

45

7.1. bra. Soros vonali illeszt o s tpfeszltsg stabiliztor kapcsolsi rajza

46

7.2. bra. A PIC18F452 tpus mikrovezrl o lbkiosztsa Timer3 modul: 16 bites id ozt o/szmll. Opcionlis msodlagos oszcilltor Timer1-es s Timer3-as modulokhoz. Kt Capture/Compare/PWM modul. A modul hromflekppen kongurlhat: Capture (mintavtelez o) bemenetknt (16 bites, maximum felbonts 6, 25ns = TCY /16), Compare (sszehasonlt) bemenetknt (16 bites, maximum felbonts 100ns = TCY ), PWM kimenetknt (felbonts 1 bitt ol 10 bitig vltoztathat, 8 bites felbontsnl fmax = 156kHz, 10 bites felbontsnl fmax = 39kHz). Szinkron soros port (Master Synchronous Serial Port, MSSP) modul. Hrom mdban mukdhet: 3 vezetkes SPI mdban (mind a ngyfajta SPI mdban mukdik), I2 C mester mdban, I2 C szolga mdban.

47 Cmezhet o USART modul. RS-232 s RS-485 mdot is tmogatja. Prhuzamos szolga port (PSP). Analg paramterek: 10 bites AD konverter jellemz oi: Gyors mintavtelez o kpessg, Mukdik szundi (SLEEP) mdban, Linearits 1 Lsb. Programozhat feszltsgess jelzs (Programmable Low Voltage Detection, PLVD): megszakts krhet o, ha leesik a feszltsg. Tpfeszltsg-kiess esetn bellthat reset folyamat (Brown-out Reset, BOR). Specilis jellemz ok: Tipikusan szzezerszer trlhet o/rhat a FLASH programmemria. Tipikusan egy milliszor trlhet o/rhat az adat EEPROM. A FLASH s az adat EEPROM legalbb 40 vig megtartja tartalmt. A szoftverb ol lehet rni/olvasni a programmemrit. Fejlett beptett reset ramkr: Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer (OST). Watchdog id ozt o (WDT) sajt RC oszcilltorral. Programozhat kdvdelem. Tpegysgkml o szundi (SLEEP) md. Vltoztathat oszcilltorbelltsok: az els odleges oszcilltor ngyszerezse (PLL hasznlatval), msodlagos rajel engedlyezse/tiltsa. Soros programozs kt lbon keresztl (In-Circuit Serial Programming, ICSP). Nyomkvets kt lbon keresztl (In-Circuit Debugging, ICD). CMOS technolgia el onyei: Alacsony teljestmnyu, nagy sebessgu FLASH/EEPROM technolgia Szles tpfeszltsg-tartomny (2.05.5V) Ipari- s kiterjesztett h omrskleti tartomnyok Alacsony teljestmnyigny: kisebb, mint 1,6 mA, ha 5V a tpfeszltsg s 4 MHz a frekvencia 25 A, ha 3V a tpfeszltsg s 32 kHz a frekvencia kisebb, mint 0,2 A szundi zemmdban

48

7.1.2. RTL8019AS ethernet vezrlo


Ez az IC valstja meg a zikai kapcsolatot az ethernet hlzattal. A rgebbi verzij RTL8019-et tovbbfejlesztettk s 16 kilobjt SRAM-ot ptettek be egy tokba. Full-duplex-es s 10 Mbit/s sebessg rhet o el. Csavart rpros (10baseT) s koaxilis kbellel (10base5, 10base2) is hasznlhat, tovbb a mr igen elavult AUI csatlakozst is hasznlhatunk. A PIConNET krtyn egy RJ45-s csatlakoz lett kialaktva a csavart rpros kapcsolathoz, tovbb van ngy LED, amely a kapcsolat ltrejttt ill. a hlzati forgalmat jelzi. Tovbbi informci az IC adatlapjn [8] tallhat. Ez az integrlt ramkr a beptett SRAM-ot puerknt felhasznlva ethernet kereteket kld ill. fogad manchester kdolssal s kezeli az tkzseket. Az OSI/ISO modellben gyakorlatilag a zikai- s adatkapcsolati rteget valstja meg.

7.1.3. 24LC256 tpus soros EEPROM


Ebben a memriban 32 kilobjt mretu EEPROM tallhat s I2 C buszon keresztl kommunikl a mikrokontrollerrel. Egy specilis formtumba csomagolva FTP-n keresztl tlthetjk fel honlapunkat a memriba, tovbb ebben az EEPROM-ban troljuk az alkalmazs belltsait. Tovbbi informci az angol nyelvu adatlapon [11] van. A 7.3. brn lthat a tok lbkiosztsa. A tok jellemz oi a kvetkez ok: Kis fogyaszts CMOS technolgival kszl: Az rskor felvett ram 3 mA 5.5V-os tpfeszltsgnl. Az olvasskor felvett ram maximum 400 A 5.5V-os tpfeszltsgnl. Nyugalmi ram tlagosan 100 nA 5.5V-os tpfeszltsgnl. Kt vezetkes I2 C kompatibilis soros busz. Kaszkdba kthet o maximum 8 eszkz. Bels o id oztsu rsi- s olvassi ciklusok. 64 bjt mretu lapok rsa tmogatott. Maximlis rsi id o 5 ms. Hardveres rs vdelem. Schmitt Trigger-es bemenetek. Egymilli trls/rs ciklus. Minimum 4 kV-os elektrosztatikus kisls ellen vdett. Adatmegtartsi id o legalbb 200 v. 8 rintkez os PDIP, SOIC, TSSOP, MSOP, DFN s 14 rintkez os TSSOP tokkal is gyrtjk.

49

7.3. bra. A 24LC256 tpus soros EEPROM lbkiosztsa

7.1.4. MAX232A soros vonali illeszto


A soros vonal illesztst vgzi ez az integrlt ramkr (lbkiosztsa a a 7.4. brn lthat). Az 5V-os TTL szintu jeleket 12V-os szintre alaktja, ehhez ngy darab 100 nF-os kondenztorra van szksg. Kt darab bemenetet s kt darab kimenetet kezel, ebb ol csak egyet-egyet hasznltam fel. Az IC rszletes lersa az adatlapjn [10] olvashat.

7.4. bra. A MAX232 tpus soros vonali illeszt o lbkiosztsa

50

8. fejezet Az eszkz hasznlata s tesztelse


8.1. Az eszkz hasznlata

A ksz eszkzn hrom csatlakoz s t LED tallhat(8.1. bra).

8.1. bra. A doboz oldal- s ellnzete Jelmagyarzat: 1. Soros vonal: egy DSUB9-es csatlakoz tallhat a dobozon. Ezen keresztl trtnik az RS-232 szabvny szerinti kommunikci. 2. Ethernet: egy RJ45-s foglalat van a csavart rpros kbelnek. 3. Tpfeszltsg: a protokollkonverternek 5-15V egyenfeszltsgre van szksge. 4. Link LED (srga): Ha vilgt, a kapcsolat ltrejtt a kt ethernet-es kszlk kztt. 5. RX LED (zld): Ha villog, adatok rkeznek az ethernet hlzaton az eszkz fel. 6. TX LED (zld): Ha villog, az eszkz adatokat kld az ethernet hlzaton. 7. OK LED (zld): Ha vilgt, akkor az eszkz megfelel oen mukdik. 8. ERROR LED (piros): Ha vilgt, akkor az eszkz mukdse sorn hiba lpett fel.

51 Az eszkz hasznlata a 8.2. brn lthat. Az ethernet hlzat kialaktsra szmtalan lehet osg van: lehet csak csavart rpros technolgit hasznlni vagy csavart rpros kbeleket s optikai vagy mikrohullm tvitelt is. Az thidalhat tvolsg akr tbb kilomter is lehet.

8.2. bra. Az eszkz hasznlata

8.2.

Kongurls bngszoprogrammal

Az eszkz kongurlst brmilyen bngsz oprogrammal elvgezhetjk. Alapesetben az eszkz IP cme 10.10.5.15 hlzati maszkja 255.255.0.0. A http://10.10.5.15 cmet berva a bngsz obe a 8.3. brn lthat kpet kell ltnunk. A Help linkre kattintva ennek a fejezetnek a kivonatos verzijt olvashatjuk el. Az egyes linkekre kattintva bellthatjuk a soros vonalat, a hlzatot ill. megtekinthetjk a statisztikkat.

8.2.1. Hlzat belltsa


A Network setup linkre kattintva a 8.4. brn lthat oldalon a kvetkez oket llthatjuk be: Local IP: az eszkz IP cme (alap: 10.10.5.15). Local Port: az eszkz ezen a porton vrja az adatokat (alap: 2221). Netmask: hlzati maszk (alap: 255.255.0.0). Gateway: ha a cl IP cme msik tartomnyba esik meg kell adni az tjrt (alap: 10.10.5.15). Ha ugyanabban a hlzatban van, akkor az tjr megegyezik az eszkz IP cmvel. Target IP: a soros vonalrl rkez o adatokat ennek az IP cmnek fogja tovbbtani (alap: 10.10.5.5). Target Port: a soros vonalrl rkez o adatokat a megadott portra kldi (alap: 2222).

52

8.3. bra. Kongurls bngsz oprogrammal: index

8.4. bra. Hlzat belltsa bngsz oprogrammal

53 Refresh rate: A statisztika megtekintsekor ennyi msodpercenknt fog frisslni a lap (alap: 10). A Save gombra kattintva az adatokat eltrolja a I2 C buszos EEPROM-ba s az eszkz lekrdezi a megadott cl IP cm MAC cmt.

8.2.2. Soros vonal belltsa


A Serial port setup oldalon (8.5. bra) a soros vonal sebessgt lehet belltani. A sebessg 2400-tl 57600 baud-ig llthat. A Save gombra kattintva a bellts azonnal rvnyes lesz s az rtket elmenti az EEPROM-ba.

8.5. bra. Soros vonal belltsa bngsz oprogrammal

8.2.3. Statisztika
A statisztikkat tartalmaz oldalon (a 8.6. bra) lthatjuk az eszkz llapott (rendben van ill. valamilyen hiba trtnt), a belltott paramtereket s az eddig tvitt adatok szmt bjtban. Ez a HTML oldal automatikusan frissl alapesetben 10 msodpercenknt. Ez frisstsi rtk (Refresh rate) a hlzati belltsokat tartalmaz lapon tllthat tetsz oleges rtkre.

54

8.6. bra. Statisztika megtekintse bngsz oprogrammal

8.3.

Az eszkz tesztelse

Mivel csak egy eszkzt kszlt el, ezrt a tesztelshez szmtgpen egy programmal (UDP test) szimulltam a msik eszkzt s egy egyszeru terminlprogrammal kldtem s fogadtam a soros vonali adatokat. A 8.7. brn lthat az eszkz s a szmtgp sszektse.

8.7. bra. Az eszkz tesztelse Az UDP test (8.8. bra) nevu programot C++ nyelven rtam direkt azrt, hogy a kszlket tesztelni tudjam. A program egy f o ablakbl ll, ami kt rszre van osztva.

55

8.8. bra. Az UDP test program A bal oldalon tallhat egy UDP kliens: a megadott IP cmre s annak megadott portjra elkldi a szvegdobozban tallhat szveget. A jobb oldalon az UDP szerver vezrelhetjk, ami a program futtatsakor automatikusan elindul. A szerver megadott portjra rkez o adatokat a program egy szvegdobozban jelenti meg. A program mukdst egyszeruen ki lehet prblni: a szerver cmnek a loopback eszkz cmt kell megadni (pldul 127.0.0.1). Majd a kliensnek is ezt a cmet s a szerver portjt adjuk meg. Ha az elkld gombra kattintunk az zenetnek meg kell jelennie a jobb oldali szvegdobozban.

56

Irodalomjegyzk
[1] Nilesh Rajbharti. The Microchip TCP/IP Stack, 2002. Fjl: tcpipstack/an833.pdf [2] J. Postel. User Datagram Protocol, RFC 768, 1980. Fjl: rfc/rfc768.txt.pdf [3] T. Bradley, C. Brown, A. Malis. Inverse Address Resolution Protocol, RFC 2390, 1998. Fjl: rfc/rfc2390.txt.pdf [4] David C. Plummer. An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware, RFC 826, 1982. Fjl: rfc/rfc826.txt.pdf [5] T. Berners-Lee. Hypertext Markup Language - 2.0, RFC 1866, 1995. Fjl: rfc/rfc1866.txt.pdf [6] J. Postel, J. Reynolds. File Transfer Protocol, RFC 959, 1985. Fjl: rfc/rfc959.txt.pdf [7] Microchip. PIC18FXX2 Data Sheet, DS39564B, 2002. Fjl: adatlapok/pic18fxx2/pic18fxx2.pdf [8] Realtek. RTL8019AS, Realtek Full-Duplex Ethernet Controller with Plug and Play Function, Ver 2.0, 1996. Fjl: adatlapok/realtek/rtl8019asds.pdf [9] Realtek. RTL8019 Realtek Full-Duplex Ethernet Controller with Plug and Play Function, LS003.6, 1995. Fjl: adatlapok/realtek/rtl8019.pdf [10] Maxim. MAXIM +5V-Powered, Multichannel RS-232 Drivers/Receivers, 19-4323; Rev 11; 2003. Fjl: adatlapok/MAX220-MAX249.pdf [11] Microchip. 24LC256, DS21203K, 2003. Fjl: adatlapok/24lc256.pdf

You might also like