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