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 10:19] eero.valjaotset:software:homelab:library:module:ethernet [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 5: Line 5:
 See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone. See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.
  
-===== Andmetüübid =====+===== Konstandid =====
  
-  * **//ir_distance_sensor//** \\ Infrapuna-kaugusanduri kauguse arvutuse funktsiooni parameetrite struktuur. Kauguse arvutusvalem on  //a / (ADC + b- k//Struktuuri liikmed: +    * **//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). 
-    * //a// - jagatav+    * **//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
-    * //b// - vabaliige. +    * **//static uint8_t buf[BUFFER_SIZE+1]//*andmepuhvri suurus (tavaliselt 600+1 baiti).
-    //k// korrigeerimiskonstant. +
- +
-===== Konstandid =====+
  
-    * **//ir_distance_sensor GP2Y0A21YK//** - Sharp GP2Y0A21YK kaugusanduri parameetrite struktuuri objekt. 
  
 ===== Funktsioonid ===== ===== Funktsioonid =====
  
-  * **//signed short thermistor_calculate_celsius(unsigned short adc_value)//** \\ +  * **//void ethernet_standby(void)//** \\ 
-    Termistori temperatuuri arvutamine Celsiuse kraadides ADC muunduri väärtusest. Funktsioon põhineb teisendustabelil. Parameetrid: +    Viib etherneti kontrolleri magavasse (madala energiatarbega) olekusse.
-    * //adc_value// - ADC teisenduse väärtus. +
-    * Tagastab temperatuuri Celsiuse kraadides -20 kuni 100 kraadi piires.+
  
-  * **//signed short ir_distance_calculate_cm(ir_distance_sensor sensorunsigned short adc_value)//** \\ +  * **//void ethernet_init(uint8_t *macuint8_t *ip)//** \\ 
-    IR kaugusanduri väljundpinge ADC väärtuse sentimeetriteks ümberarvutamise funktsioon. Parameetrid: +    Etherneti kontrolleri algseadistus koos MAC ja IP aadressidega. Parameetrid: 
-    * //sensor// - Kaugusanduri parameetrite struktuuri objekt+    * //*mac// - MAC aadressi massiiv
-    * //adc_value// - 10-bitine +5 V võrdluspingega ADC väärtus. +    * //*ip// - IP aadressi massiiv.
-    * Tagastab kauguse sentimeetrites või -1, kui seda ei saanud arvutada.+
  
-  * **//unsigned short ultrasonic_measure(pin triggerpin echo)//** \\ +  * **//uint16_t ethernet_get_packet (uint16_t maxlenuint8_t* packet)//** \\ 
-    Ultraheli-kaugusanduri mõõtmise teostamise funktsioon. Funktsioon tekitab SRF04 kaugusmõõdiku päästikuimpulsi ja mõõdab kajaimpulsi saabumise aega. Aja põhjal arvutatakse objekti kaugus. Mõõtmine võtab aega kuni 36 ms. Funktsioon eeldab 14.7456 MHz mikrokontrolleri taktsagedust. Parameetrid: +    Kuulab võrku, kuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid: 
-    * //trigger// - päästiku viigu muutuja+    * //maxlen// - maksimaalne lubatud andmepuhvri suurus
-    * //echo// - kaja viigu muutuja+    * //*buffer// - massiiv, kuhu salvestab vastuvõetud andmed edasiseks töötluseks
-    * Tagastab kauguse sentimeetrites või 0kui mõõtmine ebaõnnestus.+    * Kui pakett on saabunudtagastab saabunud paketi pikkuse baitides, vastasel juhul tagastab 0.
  
-~~PB~~+  * **//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: 
 +    * //*buf// - andmete massiiv, mida analüüsida. 
 +    * //plen// - saabunud paketi pikkus baitides. 
 +    * Tagastab URL-i esimese tähemärgi aadressi. Kui URL on tühi, siis tagastab 0.
  
-===== Näide =====+  * **//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: 
 +    * //*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. 
 +    * //*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.
  
-<code c> +  * **//void ethernet_print_webpage (uint8_t *buf,uint16_t dlen)//** \\ 
-// html stringide salvestamiseks programmimälusse +    Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid: 
-#include <avr/pgmspace.h>+    * //*buf// - andmemassiiv, kuhu html on valmis laetud. 
 +    * //dplen/- andmete lõpu aadress puhvris, milleni kuvab koodi.
  
-// Ethernelt funktsioonid 
-#include "ip_arp_udp_tcp.h" 
-#include "enc28j60.h" 
-#include "net.h" 
-#include "ethernet.h" 
  
-#include <homelab/delay.h> +<pagebreak> 
-#include <homelab/pin.h>+ 
 +===== Näide ===== 
 + 
 +<code c> 
 +#include <string.h> 
 +#include <homelab/module/ethernet.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 63: 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 uint8_t buf[BUFFER_SIZE+1]; +static uint16_t gPlen
- +
-// LED PB7 muutuja määramine +
-pin debug_led = PIN(B, 7);+
  
 +//Andmete puhvri suurus
 +#define BUFFER_SIZE 600
 +static uint8_t buf[BUFFER_SIZE+1];
  
 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 +    // Etherneti initseerimine vastavalt etteantud aadressidele 
- ethernet_init(mymac,myip); +    ethernet_init(mymac, myip);  
- +         
- // LED PB7 on väljund +    while(1) 
- pin_setup_output(debug_led);+    { 
 +        // Võtab vastu pakette, kuni saab endale määratud andmetega paketi 
 +        pktlen=ethernet_get_packet(BUFFER_SIZE, buf);
  
- while(1) +        // Teeb paketi eeltöötluse ja vastab "ping" paketile. Tagastab URL-i. 
-+        gPlen=ethernet_analyse_packet(buf,pktlen);
- // Võtab vastu pakette, kuni saab endale määratud andmetega paketi +
- ethernet_get_packet(buf);+
  
- // Vaatab, mis url-is sisaldub +        // Kui on URL-is on infot, siis hakkab seda analüüsima 
- dat_p ethernet_analyse_url(buf); +        if (gPlen!=0
-  +                       
- // Leiab vastuvõetud jadast url-i esimese tähemärgi +            // Laeb URL-i aadressiosa viita "str". Olgu veel öeldud, et  
- cmd = buf[dat_p]; +            //URL-is on neli esimest kohta IP aadressi numbrid.        
-                                 +            str = (char *)&(buf[gPlen+4]); 
- // Kui sümbol on asciis '0' +  
- if (cmd == '0') +        // Otsib URL-ist stringi "/x"               
-+        if (strncmp("/x",str,2)==0
- // LED kustutada +        
- pin_set(debug_led); +            // Laeb veebilehe 
- // Lae veebilehet vastavalt LED-i olekule +            gPlen = ethernet_load_webpage(0);              
- // Vajalik on jälgida andmejada lõppu +        }                                   
- plen = ethernet_load_webpage(buf,pin_get_value(debug_led)); +  
-+        // Kuva varem valmis laetud veebileht                 
- else if (cmd == '1') //sümbol on '1' +        ethernet_print_webpage (buf,gPlen);               
- +         
- // LED põlema +    } 
- pin_clear(debug_led); +    return (0);
- 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.1316071145.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