Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:software:homelab:library:module:ethernet [2011/09/15 11:12] eero.valjaotset:software:homelab:library:module:ethernet [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 7: Line 7:
 ===== Konstandid ===== ===== Konstandid =====
  
-    * **//static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}//** - suvaliselt valitud MAC aadress kodulaborile.+    * **//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 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 (550+1 baiti).+    * **//static uint8_t buf[BUFFER_SIZE+1]//** - andmepuhvri suurus (tavaliselt 600+1 baiti).
  
  
Line 15: Line 15:
  
   * **//void ethernet_standby(void)//** \\   * **//void ethernet_standby(void)//** \\
-    Viib etherneti kontrolleri madala energiatarbega olekusse, juhul kui teda ei kasutata:+    Viib etherneti kontrolleri magavasse (madala energiatarbegaolekusse.
  
   * **//void ethernet_init(uint8_t *mac, uint8_t *ip)//** \\   * **//void ethernet_init(uint8_t *mac, uint8_t *ip)//** \\
Line 22: Line 22:
     * //*ip// - IP aadressi massiiv.     * //*ip// - IP aadressi massiiv.
  
-  * **//void ethernet_get_packet (uint8_t *buffer)//** \\ +  * **//uint16_t ethernet_get_packet (uint16_t maxlen, uint8_t* packet)//** \\ 
-    Pollib võrku kuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid:+    Kuulab võrkukuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid: 
 +    * //maxlen// - maksimaalne lubatud andmepuhvri suurus.
     * //*buffer// - massiiv, kuhu salvestab vastuvõetud andmed edasiseks töötluseks.     * //*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_url(uint8_t *buffer)//** \\ +  * **//uint16_t ethernet_analyse_packet(uint8_t *buf,uint16_t plen)//** \\ 
-    Analüüsib, kas vastuvõetud andmepakett sisaldab url-i kohta andmeid. Parameetrid: +    Analüüsib, kas vastuvõetud andmepakett sisaldab URL-i kohta andmeid. Vajadusel vastab pingile. Parameetrid: 
-    * //*buffer// - andmete massiiv, mida analüüsida. +    * //*buf// - andmete massiiv, mida analüüsida
-    * Tagastab url-i esimese tähemärgi aadressi. Kui url on tühi, siis tagastab 0.+    * //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 char *progmem_s)+  * **//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:     Laeb veebilehe kuvamiseks html-koodi kontrolleri programmimälust TCP saatmise puhvrisse. Parameetrid:
     * //*buf// - andmemassiiv, mida saata TCP kaudu.     * //*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.     * //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 programmi mälusse salvestatud ja kust andmed laetakse saatmise massiivi.+    * //*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.     * Tagastab andmejada lõpu aadressi, mida saab sisestada parameetrina järgmise html-koodi laadimiseks.
  
-  * **//void ethernet_print_webpage (uint8_t *bf, uint16_t plen)//** \\+  * **//void ethernet_print_webpage (uint8_t *buf,uint16_t dlen)//** \\
     Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid:     Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid:
-    * //*bf// - andmemassiiv, kuhu html on valmis laetud. +    * //*buf// - andmemassiiv, kuhu html on valmis laetud. 
-    * //plen// - andmete lõpu aadress puhvris, milleni kuvab koodi.+    * //dplen// - andmete lõpu aadress puhvris, milleni kuvab koodi.
  
  
-~~PB~~+<pagebreak>
  
 ===== Näide ===== ===== Näide =====
  
 <code c> <code c>
-// html stringide salvestamiseks programmimälusse +#include <string.h> 
-#include <avr/pgmspace.h> +#include <homelab/module/ethernet.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 // Veebilehe koostamiseks eraldi funktsioon
-uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off);+uint16_t ethernet_load_webpage(uint8_t on_off);
  
 // MAC ja IP peavad olema unikaalsed oma kohtvõrgus, // MAC ja IP peavad olema unikaalsed oma kohtvõrgus,
Line 73: Line 67:
 static uint8_t myip[4] = {192,168,1,100}; static uint8_t myip[4] = {192,168,1,100};
  
-// andmete puhvri suurus+//andmejada pikkus 
 +static uint16_t gPlen;  
 + 
 +//Andmete puhvri suurus 
 +#define BUFFER_SIZE 600
 static uint8_t buf[BUFFER_SIZE+1]; static uint8_t buf[BUFFER_SIZE+1];
- 
-// LED PB7 muutuja määramine 
-pin debug_led = PIN(B, 7); 
- 
  
 int main(void) int main(void)
-        +
- uint16_t plen = 0; //andmejada pikkus +  
- uint16_t dat_p; //url-i alguse aadress +    uint16_t pktlen; 
- int8_t cmd;+    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);
  
- // Etherneti initseerimine vastavalt etteantud aadressidele +        // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab URL-i. 
- ethernet_init(mymac,myip);+        gPlen=ethernet_analyse_packet(buf,pktlen);
  
- // LED PB7 on väljund +        // Kui on URL-is on infot, siis hakkab seda analüüsima 
- pin_setup_output(debug_led);+        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); 
 +}
  
- 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 // Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse
-uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off)+uint16_t ethernet_load_webpage(uint8_t on_off)
 { {
- uint16_t plen;+    uint16_t plen=0
  
- // Laeb html koodi saatmiseks puhvrisse +    // Laeb html koodi saatmiseks puhvrisse 
- // Need suured stringid on salvestatud PSTR makro abil programmimälusse, +    // Need suured stringid on salvestatud PSTR makro abil programmimälusse, 
- // et mitte raisata liigselt töömälu +    // 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 +    // Laeb veebilehe päise 
- return(plen);+    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);
 } }
-</code> 
  
 +</code>
et/software/homelab/library/module/ethernet.1316074351.txt.gz · Last modified: (external edit)
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