This is an old revision of the document!


Table of Contents

Ethernet

Translation

Necessary knowledge: [HW] Controller module

The following part of library contains HomeLab Ethernet functions.

Constants

  • static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24} - controller MAC address (you can choose a random address, but it is important to be unique in the network).
  • static uint8_t myip[4] = {192,168,1,100} - IP address corresponding to LAN, you must choose different last digit, if it is already present in the network.
  • static uint8_t buf[BUFFER_SIZE+1] - size of data buffer (usually 600+1 B).

Functions

  • void ethernet_standby(void)

Brings Ethernet controller into sleep mode (low energy consumption).

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

Ethernet controller initial setup with MAC and IP addresses.

  Parameters:
  * //*mac// - MAC address array.
  * //*ip// - IP address array.
  • uint16_t ethernet_get_packet (uint16_t maxlen, uint8_t* packet)

Polls network until it receives packet addressed to it and containing data.

  Parameters:
  * //maxlen// - maximum allowed data buffer size.
  * //*buffer// - array where to save received data for further operations.
  * If the packet has arrived, outputs the length of the received packet in baits and in opposite case 0.
  • uint16_t ethernet_analyse_packet(uint8_t *buf,uint16_t plen)

Analüüsib, kas vastuvõetud andmepakett sisaldab URL-i kohta andmeid. Vajadusel vastab pingile.

  Parameters:
  * //*buf// - andmete massiiv, mida analüüsida.
  * //plen// - saabunud paketi pikkus baitides.
  * 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 prog_char *progmem_s)

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

  Parameters:
  * //*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 salvestatud programmi mällu 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 *buf,uint16_t dlen)

Kuvab veebilehte vastavalt valmislaetud html-koodile.

  Parameters:
  * //*buf// - andmemassiiv, kuhu html on valmis laetud.
  * //dplen// - andmete lõpu aadress puhvris, milleni kuvab koodi.

 

Example

#include <string.h>
#include <homelab/module/ethernet.h>
#include <homelab/pin.h>
 
//	Veebilehe koostamiseks eraldi funktsioon
uint16_t ethernet_load_webpage(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};
 
//andmejada pikkus
static uint16_t gPlen; 
 
//Andmete puhvri suurus
#define BUFFER_SIZE 600
static uint8_t buf[BUFFER_SIZE+1];
 
//LED PB7 muutuja määramine
pin debug_led = PIN(B, 7);
 
 
int main(void)
{
 
	uint16_t pktlen;
	char *str;  
 
	// LED PB7 on väljund
	pin_setup_output(debug_led);
 
	// Etherneti initseerimine vastavalt etteantud aadressidele
	ethernet_init(mymac, myip);			
 
        while(1)
	{
	// Võtab vastu pakette, kuni saab endale määratud andmetega paketi
    	pktlen=ethernet_get_packet(BUFFER_SIZE, buf);
 
        // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab paketi URL-i.
        gPlen=ethernet_analyse_packet(buf,pktlen);
 
	// Kui on URL-is on infot, siis hakkab seda analüüsima
        if (gPlen!=0)
	{               
            // Laeb URL-i aadressiosa viita "str". Olgu veel öeldud, et 
	    //URL-is on neli esimest kohta IP aadressi numbrid.       
            str = (char *)&(buf[gPlen+4]);
 
			// Otsib URL-ist stringi "/1"              
			if (strncmp("/1",str,2)==0)
			{
	                        // Laeb veebilehe
				gPlen = ethernet_load_webpage(0);
 
				// LED põlema
				pin_clear(debug_led);		
 
	                 }
			// Järgmisena otsib URL-ist stringi "/0"
			else if (strncmp("/0",str,2)==0)
			{
	                        // Laeb veebilehe
				gPlen = ethernet_load_webpage(1);
 
				// LED kustutada
				pin_set(debug_led);
 
	                 }
			// Muul juhul lae veebileht vastavalt LED olekule
	                else 
			{	           
	                   gPlen=ethernet_load_webpage(pin_get_value(debug_led));
	                }                                    
 
			// Kuva varem valmis laetud veebileht                
                        ethernet_print_webpage (buf,gPlen);    							
 
		}
    }
    return (0);
}
 
 
// Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse
uint16_t ethernet_load_webpage(uint8_t on_off)
{
    uint16_t plen=0; 
 
	// Laeb html koodi saatmiseks puhvrisse
	// Need suured stringid on salvestatud PSTR makro abil programmimälusse,
	// et mitte raisata liigselt töömälu.
 
	// Laeb veebilehe päise
       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, siis kuva nii.
    if (on_off)
    {
         plen=ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>"));
    }
    // Kui LED põleb.
    else
    {
         plen=ethernet_load_data(buf,plen,PSTR("<font color=\"#FF0000\"> ON</font>"));
    }
    // Lae "Refresh" nupp
    plen=ethernet_load_data(buf,plen,PSTR(" <small><a href=\".\">[refresh status]</a></small></p>\n<p><a href=\"."));
 
    // Lae LED oleku muutmise nupp vastavalt selle olekule.
    if (on_off)
    {
        plen=ethernet_load_data(buf,plen,PSTR("/1\">Switch on</a><p>"));
 
    }
    else
    {
         plen=ethernet_load_data(buf,plen,PSTR("/0\">Switch off</a><p>"));
 
    } 
 
    // Väljasta andmete lõpu aadress puhvris
    return(plen);
}
en/software/homelab/library/module/ethernet.1338381904.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