Seotud mooduliga: [HW] Kontrollermoodul
See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.
Viib etherneti kontrolleri magavasse (madala energiatarbega) olekusse.
Etherneti kontrolleri algseadistus koos MAC ja IP aadressidega. Parameetrid:
Kuulab võrku, kuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid:
Analüüsib, kas vastuvõetud andmepakett sisaldab URL-i kohta andmeid. Vajadusel vastab pingile. Parameetrid:
Laeb veebilehe kuvamiseks html-koodi kontrolleri programmimälust TCP saatmise puhvrisse. Parameetrid:
Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid:
#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); }