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:
Pollib 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:
// 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); }