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/10/06 12:50] – raivo.sell | et: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, | + | * **//static uint8_t mymac[6] = {0x54, |
| * **//static uint8_t myip[4] = {192, | * **//static uint8_t myip[4] = {192, | ||
| - | * **//static uint8_t buf[BUFFER_SIZE+1]// | + | * **//static uint8_t buf[BUFFER_SIZE+1]// |
| 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 |
| * **//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 |
| - | Kuulab võrku kuni saab endale mõeldud ja andmeid sisaldava andmepaketi. Parameetrid: | + | Kuulab võrku, kuni 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. | ||
| - | * **// | + | * **// |
| - | Analüüsib, | + | Analüüsib, |
| - | * //*buffer// - andmete massiiv, mida analüüsida. | + | * //*buf// - andmete massiiv, mida analüüsida. |
| - | * Tagastab | + | * //plen// - saabunud paketi pikkus baitides. |
| + | * Tagastab | ||
| - | * **// | + | * **// |
| //** \\ | //** \\ | ||
| 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, | * //*buf// - andmemassiiv, | ||
| * //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. | ||
| - | * // | + | * // |
| * 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 | + | * **//void ethernet_print_webpage (uint8_t *buf, |
| Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid: | Kuvab veebilehte vastavalt valmislaetud html-koodile. Parameetrid: | ||
| - | * //*bf// - andmemassiiv, | + | * //*buf// - andmemassiiv, |
| - | * //plen// - andmete lõpu aadress puhvris, milleni kuvab koodi. | + | * //dplen// - andmete lõpu aadress puhvris, milleni kuvab koodi. |
| - | ~~PB~~ | + | < |
| ===== Näide ===== | ===== Näide ===== | ||
| <code c> | <code c> | ||
| - | // html stringide salvestamiseks programmimälusse | + | #include <string.h> |
| - | #include <avr/ | + | |
| - | + | ||
| - | // Ethernelt funktsioonid | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | #include < | + | |
| #include < | #include < | ||
| - | #include < | + | // Veebilehe koostamiseks eraldi funktsioon |
| - | #include < | + | uint16_t ethernet_load_webpage(uint8_t on_off); |
| - | + | ||
| - | // | + | |
| - | uint16_t ethernet_load_webpage(uint8_t *buf,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, | static uint8_t myip[4] = {192, | ||
| - | //andmete | + | //andmejada pikkus |
| + | static uint16_t gPlen; | ||
| + | |||
| + | // | ||
| + | #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 | + | |
| - | uint16_t dat_p; //url-i alguse aadress | + | |
| - | int8_t cmd; | + | char *str; |
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | while(1) | ||
| + | { | ||
| + | | ||
| + | | ||
| - | // Etherneti initseerimine vastavalt etteantud aadressidele | + | |
| - | ethernet_init(mymac,myip); | + | |
| - | // LED PB7 on väljund | + | |
| - | pin_setup_output(debug_led); | + | |
| + | { | ||
| + | // Laeb URL-i aadressiosa viita " | ||
| + | //URL-is on neli esimest kohta IP aadressi numbrid. | ||
| + | str = (char *)& | ||
| + | |||
| + | // Otsib URL-ist stringi "/ | ||
| + | if (strncmp("/ | ||
| + | { | ||
| + | // Laeb veebilehe | ||
| + | gPlen = ethernet_load_webpage(0); | ||
| + | } | ||
| + | |||
| + | // Kuva varem valmis laetud veebileht | ||
| + | ethernet_print_webpage (buf, | ||
| + | |||
| + | } | ||
| + | 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 ' | ||
| - | if (cmd == ' | ||
| - | { | ||
| - | // LED kustutada | ||
| - | pin_set(debug_led); | ||
| - | // Lae veebilehet vastavalt LED-i olekule | ||
| - | // Vajalik on jälgida andmejada lõppu | ||
| - | plen = ethernet_load_webpage(buf, | ||
| - | } | ||
| - | else if (cmd == ' | ||
| - | { | ||
| - | // LED põlema | ||
| - | pin_clear(debug_led); | ||
| - | plen = ethernet_load_webpage(buf, | ||
| - | } | ||
| - | // 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, siis kuva nii | + | |
| - | 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); | ||
| } | } | ||
| - | </ | ||
| + | </ | ||