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} - kontrolleri MAC aadress (võib valida suvalise aadress, kuid oluline on, et ühes võrgus aadressid ei korduks).
  • 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 (tavaliselt 600+1 baiti).

Funktsioonid

  • void ethernet_standby(void)

Viib etherneti kontrolleri magavasse (madala energiatarbega) olekusse.

  • 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.
  • uint16_t ethernet_get_packet (uint16_t maxlen, uint8_t* packet)

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

  • maxlen - maksimaalne lubatud andmepuhvri suurus.
  • *buffer - massiiv, kuhu salvestab vastuvõetud andmed edasiseks töötluseks.
  • Kui pakett on saabunud, tagastab saabunud paketi pikkuse baitides, vastasel juhul tagastab 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. Parameetrid:

  • *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. 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 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. Parameetrid:

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

 

Näide

#include <string.h>
#include <homelab/module/ethernet.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];
 
int main(void)
{
 
    uint16_t pktlen;
    char *str;  
 
    // 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 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 "/x"              
        if (strncmp("/x",str,2)==0)
        {
            // Laeb veebilehe
            gPlen = ethernet_load_webpage(0);	            
        }		                                 
 
        // 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")
    );
 
    // Laeb veebilehe sisu, milleks on tekst "Kodulabor".    
    plen=ethernet_load_data(buf,plen,PSTR("Kodulabor"));
 
    // Väljasta andmete lõpu aadress puhvris
    return(plen);
}
et/software/homelab/library/module/ethernet.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
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