This is an old revision of the document!
Seotud mooduliga: [HW] Kontrollermoodul
See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.
Viib etherneti kontrolleri madala energiatarbega olekusse, juhul kui teda ei kasutata:
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. 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> #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,0x56,0x58,0x10,0x00,0x28}; // IP vastavalt kohtvõrgule (viimane number valida ise) static uint8_t myip[4] = {192,168,1,70}; //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". Hiljem 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); }