This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:software:homelab:library:module:ethernet [2011/09/15 10:19] – eero.valjaots | et: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 |
| - | | + | |
| - | * //a// - jagatav. | + | |
| - | * //b// - vabaliige. | + | |
| - | | + | |
| - | + | ||
| - | ===== Konstandid ===== | + | |
| - | * **// | ||
| ===== Funktsioonid ===== | ===== Funktsioonid ===== | ||
| - | * **//signed short thermistor_calculate_celsius(unsigned short adc_value)//** \\ | + | * **//void ethernet_standby(void)//** \\ |
| - | | + | |
| - | * // | + | |
| - | * Tagastab temperatuuri Celsiuse kraadides -20 kuni 100 kraadi piires. | + | |
| - | * **//signed short ir_distance_calculate_cm(ir_distance_sensor sensor, unsigned short adc_value)//** \\ | + | * **//void ethernet_init(uint8_t *mac, uint8_t *ip)//** \\ |
| - | | + | |
| - | * //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 trigger, pin echo)//** \\ | + | * **//uint16_t ethernet_get_packet |
| - | | + | |
| - | * //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 0, kui mõõtmine ebaõnnestus. | + | * Kui pakett on saabunud, tagastab saabunud paketi pikkuse baitides, vastasel juhul tagastab 0. |
| - | ~~PB~~ | + | * **// |
| + | Analüüsib, | ||
| + | * //*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 ===== | + | * **// |
| + | //** \\ | ||
| + | Laeb veebilehe kuvamiseks html-koodi kontrolleri programmimälust TCP saatmise puhvrisse. Parameetrid: | ||
| + | * //*buf// - andmemassiiv, | ||
| + | * //pos// - andmete lõpu aadress puhvris, mida tuleb jälgida, kui andmeid üksteise järele laadida sinna. Esimene aadress on 0. | ||
| + | * // | ||
| + | * Tagastab andmejada lõpu aadressi, mida saab sisestada parameetrina järgmise html-koodi laadimiseks. | ||
| - | <code c> | + | * **//void ethernet_print_webpage (uint8_t *buf, |
| - | // html stringide salvestamiseks programmimälusse | + | Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid: |
| - | #include <avr/pgmspace.h> | + | * //*buf// - andmemassiiv, |
| + | * //dplen// - andmete lõpu aadress puhvris, milleni kuvab koodi. | ||
| - | // Ethernelt funktsioonid | ||
| - | #include " | ||
| - | #include " | ||
| - | #include " | ||
| - | #include " | ||
| - | #include <homelab/ | + | < |
| - | #include < | + | |
| + | ===== Näide ===== | ||
| + | |||
| + | <code c> | ||
| + | #include <string.h> | ||
| + | #include < | ||
| // 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, | static uint8_t myip[4] = {192, | ||
| - | // andmete puhvri suurus | + | //andmejada pikkus |
| - | static | + | static |
| - | + | ||
| - | // 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; | + | |
| - | uint16_t | + | uint16_t |
| - | int8_t cmd; | + | char *str; |
| - | + | ||
| - | // Etherneti initseerimine vastavalt etteantud aadressidele | + | // Etherneti initseerimine vastavalt etteantud aadressidele |
| - | ethernet_init(mymac, | + | ethernet_init(mymac, |
| - | + | ||
| - | // LED PB7 on väljund | + | |
| - | pin_setup_output(debug_led); | + | { |
| + | | ||
| + | | ||
| - | while(1) | + | |
| - | { | + | |
| - | // Võtab vastu pakette, kuni saab endale määratud andmetega | + | |
| - | ethernet_get_packet(buf); | + | |
| - | // Vaatab, mis url-is sisaldub | + | |
| - | dat_p | + | if (gPlen!=0) |
| - | + | | |
| - | // Leiab vastuvõetud jadast url-i esimese tähemärgi | + | // Laeb URL-i aadressiosa viita " |
| - | cmd = buf[dat_p]; | + | //URL-is |
| - | | + | str = (char *)&(buf[gPlen+4]); |
| - | // Kui sümbol | + | |
| - | if (cmd == ' | + | |
| - | { | + | |
| - | // LED kustutada | + | { |
| - | pin_set(debug_led); | + | // Laeb veebilehe |
| - | // Lae veebilehet vastavalt LED-i olekule | + | |
| - | // 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 == ' | + | ethernet_print_webpage (buf,gPlen); |
| - | { | + | |
| - | // LED põlema | + | |
| - | pin_clear(debug_led); | + | return (0); |
| - | plen | + | |
| - | } | + | |
| - | // Muul juhul lae veebileht vastavalt LED olekule | + | |
| - | else plen = ethernet_load_webpage(buf, | + | |
| - | + | ||
| - | // Kuva varem valmis laetud veebileht | + | |
| - | ethernet_print_webpage(buf, | + | |
| - | } | + | |
| } | } | ||
| + | |||
| // 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; | + | |
| - | // 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, | + | |
| - | plen = ethernet_load_data(buf, | + | |
| - | + | ||
| - | // Kui LED ei põle | + | |
| - | if (on_off) | + | |
| - | { | + | |
| - | plen = ethernet_load_data(buf, | + | |
| - | plen = ethernet_load_data(buf, | + | |
| - | } | + | |
| - | // Kui LED põleb | + | |
| - | else | + | |
| - | { | + | |
| - | plen = ethernet_load_data(buf, | + | |
| - | plen = ethernet_load_data(buf, | + | |
| - | } | + | |
| - | // Väljasta andmete lõpu aadress puhvris | + | // Laeb veebilehe päise |
| - | return(plen); | + | plen=ethernet_load_data |
| + | ( | ||
| + | buf, | ||
| + | 0, | ||
| + | PSTR(" | ||
| + | ); | ||
| + | |||
| + | // Laeb veebilehe sisu, milleks on tekst " | ||
| + | plen=ethernet_load_data(buf, | ||
| + | |||
| + | | ||
| + | return(plen); | ||
| } | } | ||
| + | |||
| </ | </ | ||
| - | |||