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 [2012/01/26 23:25] heikopikneret: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 (tavaliselt 600+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 23: Line 23:
  
   * **//uint16_t ethernet_get_packet (uint16_t maxlen, uint8_t* packet)//** \\   * **//uint16_t ethernet_get_packet (uint16_t maxlen, uint8_t* packet)//** \\
-    Kuulab 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+    * //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.
-    * Tagastab saabunud paketi pikkuse baitides, kui pakett on saabunud. Vastasel juhul nulli.+    * Kui pakett on saabunud, tagastab saabunud paketi pikkuse baitides, vastasel juhul tagastab 0.
  
   * **//uint16_t ethernet_analyse_packet(uint8_t *buf,uint16_t plen)//** \\   * **//uint16_t ethernet_analyse_packet(uint8_t *buf,uint16_t plen)//** \\
-    Analüüsib, kas vastuvõetud andmepakett sisaldab url-i kohta andmeid. Vajadusel vastab pingile. Parameetrid:+    Analüüsib, kas vastuvõetud andmepakett sisaldab URL-i kohta andmeid. Vajadusel vastab pingile. Parameetrid:
     * //*buf// - andmete massiiv, mida analüüsida.     * //*buf// - andmete massiiv, mida analüüsida.
     * //plen// - saabunud paketi pikkus baitides.     * //plen// - saabunud paketi pikkus baitides.
-    * Tagastab url-i esimese tähemärgi aadressi. Kui url on tühi, siis tagastab 0.+    * 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 prog_char *progmem_s)   * **//uint16_t ethernet_load_data (uint8_t *buf,uint16_t pos, const prog_char *progmem_s)
Line 39: Line 39:
     * //*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.
  
Line 48: Line 48:
  
  
-~~PB~~+<pagebreak>
  
 ===== Näide ===== ===== Näide =====
Line 55: Line 55:
 #include <string.h> #include <string.h>
 #include <homelab/module/ethernet.h> #include <homelab/module/ethernet.h>
-#include <homelab/pin.h> 
  
-// Veebilehe koostamiseks eraldi funktsioon+// Veebilehe koostamiseks eraldi funktsioon
 uint16_t ethernet_load_webpage(uint8_t on_off); uint16_t ethernet_load_webpage(uint8_t on_off);
  
Line 74: Line 73:
 #define BUFFER_SIZE 600 #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 pktlen; +    uint16_t pktlen; 
- char *str;   +    char *str;  
- +
- // LED PB7 on väljund +
- pin_setup_output(debug_led);+
   
- // Etherneti initseerimine vastavalt etteantud aadressidele +    // Etherneti initseerimine vastavalt etteantud aadressidele 
- ethernet_init(mymac, myip); +    ethernet_init(mymac, myip);
                  
-        while(1) +    while(1) 
-+    
- // Võtab vastu pakette, kuni saab endale määratud andmetega paketi +        // Võtab vastu pakette, kuni saab endale määratud andmetega paketi 
-     pktlen=ethernet_get_packet(BUFFER_SIZE, buf);+        pktlen=ethernet_get_packet(BUFFER_SIZE, buf);
  
-        // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab paketi URL-i.+        // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab URL-i.
         gPlen=ethernet_analyse_packet(buf,pktlen);         gPlen=ethernet_analyse_packet(buf,pktlen);
  
- // Kui on URL-is on infot, siis hakkab seda analüüsima+        // Kui on URL-is on infot, siis hakkab seda analüüsima
         if (gPlen!=0)         if (gPlen!=0)
- {               +        {               
             // Laeb URL-i aadressiosa viita "str". Olgu veel öeldud, et              // Laeb URL-i aadressiosa viita "str". Olgu veel öeldud, et 
-     //URL-is on neli esimest kohta IP aadressi numbrid.       +            //URL-is on neli esimest kohta IP aadressi numbrid.       
             str = (char *)&(buf[gPlen+4]);             str = (char *)&(buf[gPlen+4]);
   
- // Otsib URL-ist stringi "/1              +        // Otsib URL-ist stringi "/x              
- if (strncmp("/1",str,2)==0) +        if (strncmp("/x",str,2)==0) 
- +        
-                         // Laeb veebilehe +            // Laeb veebilehe 
- gPlen = ethernet_load_webpage(0); +            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                 +        // Kuva varem valmis laetud veebileht                 
-                        ethernet_print_webpage (buf,gPlen);      +        ethernet_print_webpage (buf,gPlen);               
-             +        
- }+
     }     }
     return (0);     return (0);
Line 146: Line 118:
     uint16_t plen=0;      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.
  
- // Laeb veebilehe päise +    // 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 
-     +    ( 
-    plen=ethernet_load_data(buf,plen,PSTR("<center><p>Homelab PB7 LED: ")); +      buf, 
-  +      0, 
-    // Kui LED ei põlesiis kuva nii. +      PSTR("HTTP/1.0 200 OK\r\nContent-Type:   text/html\r\nPragma: no-cache\r\n\r\n"
-    if (on_off) +    ); 
-    { +        
-         plen=ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>")); +    // Laeb veebilehe sisumilleks on tekst "Kodulabor"    
-    } +    plen=ethernet_load_data(buf,plen,PSTR("Kodulabor"));
-    // 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     // Väljasta andmete lõpu aadress puhvris
     return(plen);     return(plen);
Line 185: Line 138:
  
 </code> </code>
- 
et/software/homelab/library/module/ethernet.1327613133.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