This is an old revision of the document!


Table of Contents

Ethernet

Seotud mooduliga: [HW] Kontrollermoodul

See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.

Konstandid

  • static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24} - suvaliselt valitud MAC aadress kodulaborile.
  • static uint8_t myip[4] = {192,168,1,100} - IP aadress vastavalt kohtvõrgule, viimane number tuleb ise valida, juhul kui see on võrgus juba hõivatud.
  • static uint8_t buf[BUFFER_SIZE+1] - andmepuhvri suurus (550+1 baiti).

Funktsioonid

  • void ethernet_standby(void)

Viib etherneti kontrolleri madala energiatarbega olekusse, juhul kui teda ei kasutata:

  • void ethernet_init(uint8_t *mac, uint8_t *ip)

Etherneti kontrolleri algseadistus koos MAC ja IP aadressidega. Parameetrid:

  • *mac - MAC aadressi massiiv.
  • *ip - IP aadressi massiiv.
  • void ethernet_get_packet (uint8_t *buffer)

Pollib võrku kuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid:

  • *buffer - massiiv, kuhu salvestab vastuvõetud andmed edasiseks töötluseks.
  • uint16_t ethernet_analyse_url(uint8_t *buffer)

Analüüsib, kas vastuvõetud andmepakett sisaldab url-i kohta andmeid. Parameetrid:

  • *buffer - andmete massiiv, mida analüüsida.
  • Tagastab url-i esimese tähemärgi aadressi. Kui url on tühi, siis tagastab 0.
  • uint16_t ethernet_load_data (uint8_t *buf, uint16_t pos, const char *progmem_s)

Laeb veebilehe kuvamiseks html-koodi kontrolleri programmimälust TCP saatmise puhvrisse. Parameetrid:

  • *buf - andmemassiiv, mida saata TCP kaudu.
  • pos - andmete lõpu aadress puhvris, mida tuleb jälgida, kui andmeid üksteise järele laadida sinna. Esimene aadress on 0.
  • *progmem_s - stringi nimi, mis on programmi mälusse salvestatud ja kust andmed laetakse saatmise massiivi. * Tagastab andmejada lõpu aadressi, mida saab sisestada parameetrina järgmise html-koodi laadimiseks. * void ethernet_print_webpage (uint8_t *bf, uint16_t plen)
    Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid: *
    *bf - andmemassiiv, kuhu html on valmis laetud. * plen - andmete lõpu aadress puhvris, milleni kuvab koodi.
     
    ===== Näide ===== <code c>
    html stringide salvestamiseks programmimälusse

#include <avr/pgmspace.h>

Ethernelt funktsioonid #include “ip_arp_udp_tcp.h” #include “enc28j60.h” #include “net.h” #include “ethernet.h” #include <homelab/delay.h> #include <homelab/pin.h> Veebilehe koostamiseks eraldi funktsioon uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off);

MAC ja IP peavad olema unikaalsed oma kohtvõrgus, kahte ühesugust aadressi ei saa olla seadmetel. See MAC on suvaliselt võetud (üldjuhul pole vaja muuta) static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; IP vastavalt kohtvõrgule (viimane number valida ise) static uint8_t myip[4] = {192,168,1,100};

andmete puhvri suurus static uint8_t buf[BUFFER_SIZE+1]; LED PB7 muutuja määramine pin debug_led = PIN(B, 7);

int main(void) {

uint16_t plen = 0;	//andmejada pikkus
uint16_t dat_p;		//url-i alguse aadress
int8_t cmd;
// Etherneti initseerimine vastavalt etteantud aadressidele
ethernet_init(mymac,myip);
// LED PB7 on väljund
pin_setup_output(debug_led);
while(1)
{
	// Võtab vastu pakette, kuni saab endale määratud andmetega paketi
	ethernet_get_packet(buf);
	// Vaatab, mis url-is sisaldub
	dat_p = ethernet_analyse_url(buf);
	
	// Leiab vastuvõetud jadast url-i esimese tähemärgi
	cmd = buf[dat_p];
                              
	// Kui sümbol on asciis '0'
	if (cmd == '0')
	{
		// LED kustutada
		pin_set(debug_led);
		// Lae veebilehet vastavalt LED-i olekule
		// Vajalik on jälgida andmejada lõppu
		plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
	}
	else if (cmd == '1')	//sümbol on '1'
	{
		// LED põlema
		pin_clear(debug_led);
		plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
	}
	// Muul juhul lae veebileht vastavalt LED olekule
	else plen = ethernet_load_webpage(buf,pin_get_value(debug_led));
	// Kuva varem valmis laetud veebileht
	ethernet_print_webpage(buf,plen);
}

}

Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off) { uint16_t plen; Laeb html koodi saatmiseks puhvrisse

// Need suured stringid on salvestatud PSTR makro abil programmimälusse,
// et mitte raisata liigselt töömälu
plen = ethernet_load_data(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"));
plen = ethernet_load_data(buf,plen,PSTR("<center><p>Homelab PB7 LED: "));

// Kui LED ei põle
if (on_off)
{
	plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#FF0000\"> ON</font>"));
	plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./0\">Switch off</a><p>"));
}
// Kui LED põleb
else
{
	plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>"));
	plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./1\">Switch on</a><p>"));
}
// Väljasta andmete lõpu aadress puhvris
return(plen);

} </code>

et/software/homelab/library/module/ethernet.1316073941.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0