FITkit
Fakulta informačních technologií

Dokumentace souboru enc28j60_tcp.c

#include "enc28j60_spi.h"
#include "enc28j60_eth.h"
#include "enc28j60_ip.h"
#include "enc28j60_tcp.h"

Zobrazit zdrojový text tohoto souboru.

Funkce

void tcp_recv (struct ip_h *ip_header)
 Funkce volaná funkcí ip_recv() po příchodu TCP datagramu.
char tcp_send ()
 Odešle TCP datagram s daty uloženými v tx bufferu - volána uživatelem.
char tcp_out (unsigned long seq, unsigned long ack, unsigned char flags)
 Odešle TCP datagram - volána konečným automatem, interní funkce.
unsigned int tcp_checksum (unsigned long dest_ip, unsigned int length)
 Vypočítá 16-bitový checksum z TCP datagramu - interní funkce.
char tcp_send_header (unsigned char flags)
 Odešle prázdný TCP datagram,pouze hlavičku - volána konečným automatem, interní funkce.
void tcp_fsm_reset ()
 Reset konečného automatu.
unsigned char create_tcp_socket (unsigned int src_port, void *handler)
 Vytvoří TCP socket, zaregistruje TCP handler k portu src_port.
je možné vytvořit pouze jeden TCP socket.
char delete_tcp_socket ()
 Odstraní TCP socket.
void change_tcp_handler (void *new_handler)
 Změní TCP handler v socketu.
char tcp_connect (unsigned long ip, unsigned int port)
 Připojí se ke vzdálenému počítači.
char tcp_bind ()
 Naslouchání socketu na portu.
char tcp_unbind ()
 Zrušení naslouchání socketu na portu.
void tcp_disconnect ()
 Ukončí TCP spojení (ne zcela, pouze konečný automat přejde do stavu ukončení spojení).
char tcp_connected ()
 Vrací stav spojení.
char tcp_is_idle ()
 Vrací stav TCP socketu.
void tcp_timer ()
 TCP časovač, funkci je nutné volat v časových intervalech pro správnou funkci spojení (přeposílání datagramů apod.).
Doba mezi voláními časovače by měla být nejméně 250ms a neměla přesáhnout 2 vteřiny.

Proměnné

unsigned long dest_seq_num = 0
unsigned long local_seq_num = 0
unsigned long expected_ack_num = 0
ip_hip_header_ptr
unsigned long local_ip
unsigned int tcp_fsm_timer
tcp_socket socket


Dokumentace funkcí

void change_tcp_handler ( void *  new_handler  ) 

Změní TCP handler v socketu.

Parametry:
new_handler - Callback handler (TCP_APP_HANDLER()).

Definice je uvedena na řádku 254 v souboru enc28j60_tcp.c.

Odkazuje se na socket.

unsigned char create_tcp_socket ( unsigned int  src_port,
void *  handler 
)

Vytvoří TCP socket, zaregistruje TCP handler k portu src_port.
je možné vytvořit pouze jeden TCP socket.

Parametry:
src_port - port socketu
handler - Callback handler (TCP_APP_HANDLER()), funkce, která bude volána při příchodu TCP datagramu na port socketu.
Vracené hodnoty:
0 - chyba, neplatné argumenty nebo není volný socket
jinak - číslo registrovaného portu

Definice je uvedena na řádku 221 v souboru enc28j60_tcp.c.

Odkazuje se na socket.

char delete_tcp_socket (  ) 

Odstraní TCP socket.

Vracené hodnoty:
0 - socket odstraněn
-1 - chyba, socket je používán

Definice je uvedena na řádku 238 v souboru enc28j60_tcp.c.

Odkazuje se na NULL, socket a tcp_is_idle().

char tcp_bind (  ) 

Naslouchání socketu na portu.

Vracené hodnoty:
1 - socket naslouchá na portu
0 - chyba, socket je zaneprázdněn

Definice je uvedena na řádku 280 v souboru enc28j60_tcp.c.

Odkazuje se na socket.

unsigned int tcp_checksum ( unsigned long  dest_ip,
unsigned int  length 
)

Vypočítá 16-bitový checksum z TCP datagramu - interní funkce.

Definice je uvedena na řádku 166 v souboru enc28j60_tcp.c.

Odkazuje se na local_ip a tx_checksum().

Používá se v tcp_out().

char tcp_connect ( unsigned long  ip,
unsigned int  port 
)

Připojí se ke vzdálenému počítači.

Parametry:
ip - IP adresa cílového počítače
port - cílový port
Vracené hodnoty:
0 - připojení se navazuje
-1 - chyba, socket je již připojen

Definice je uvedena na řádku 264 v souboru enc28j60_tcp.c.

Odkazuje se na NULL, socket a tcp_fsm().

char tcp_connected (  ) 

Vrací stav spojení.

Vracené hodnoty:
1 - spojení navázáno, lze odesílat data
0 - spojení nenavázáno nebo se navazuje

Definice je uvedena na řádku 319 v souboru enc28j60_tcp.c.

Odkazuje se na socket.

Používá se v tcp_send().

void tcp_disconnect (  )  [inline]

Ukončí TCP spojení (ne zcela, pouze konečný automat přejde do stavu ukončení spojení).

Definice je uvedena na řádku 307 v souboru enc28j60_tcp.c.

Odkazuje se na expected_ack_num, NULL, socket, tcp_fsm() a tcp_fsm_timer.

void tcp_fsm_reset (  ) 

Reset konečného automatu.

Definice je uvedena na řádku 207 v souboru enc28j60_tcp.c.

Odkazuje se na socket a tx_unlock().

Používá se v tcp_fsm().

char tcp_is_idle (  ) 

Vrací stav TCP socketu.

Vracené hodnoty:
1 - TCP socket je nečinný
0 - TCP socket je zaneprázdněn

Definice je uvedena na řádku 330 v souboru enc28j60_tcp.c.

Odkazuje se na socket.

Používá se v delete_tcp_socket().

char tcp_out ( unsigned long  seq,
unsigned long  ack,
unsigned char  flags 
)

Odešle TCP datagram - volána konečným automatem, interní funkce.

Definice je uvedena na řádku 126 v souboru enc28j60_tcp.c.

Odkazuje se na tcp_h::ack_num, tcp_h::checksum, tcp_h::data_offset, tcp_h::dest_port, tcp_h::flags, HTONL, HTONS, ip_send(), tcp_h::reserved, tcp_h::seq_num, socket, tcp_h::src_port, tcp_checksum(), TCP_HEADER_LEN, tx_data_len(), tx_seek(), tx_write(), tcp_h::urgent_ptr a tcp_h::window_size.

Používá se v tcp_fsm() a tcp_send_header().

void tcp_recv ( struct ip_h ip_header  ) 

Funkce volaná funkcí ip_recv() po příchodu TCP datagramu.

Definice je uvedena na řádku 66 v souboru enc28j60_tcp.c.

Odkazuje se na tcp_h::data_offset, tcp_h::dest_port, HTONS, ip_header_ptr, NTOHL, NTOHS, rx_read(), rx_skip, socket, ip_h::src_ip, tcp_h::src_port, tcp_fsm() a TCP_HEADER_LEN.

Používá se v ip_recv().

char tcp_send (  ) 

Odešle TCP datagram s daty uloženými v tx bufferu - volána uživatelem.

Vracené hodnoty:
0 - datagram odeslán
-1 - chyba při odesílání

Definice je uvedena na řádku 105 v souboru enc28j60_tcp.c.

Odkazuje se na expected_ack_num, local_seq_num, NULL, tcp_connected(), tcp_fsm(), TCP_HEADER_LEN, tx_data_len(), tx_save() a tx_seek().

char tcp_send_header ( unsigned char  flags  ) 

Odešle prázdný TCP datagram,pouze hlavičku - volána konečným automatem, interní funkce.

Definice je uvedena na řádku 195 v souboru enc28j60_tcp.c.

Odkazuje se na dest_seq_num, local_seq_num, tcp_out(), tx_close() a tx_init().

Používá se v tcp_fsm().

void tcp_timer (  )  [inline]

TCP časovač, funkci je nutné volat v časových intervalech pro správnou funkci spojení (přeposílání datagramů apod.).
Doba mezi voláními časovače by měla být nejméně 250ms a neměla přesáhnout 2 vteřiny.

Definice je uvedena na řádku 343 v souboru enc28j60_tcp.c.

Odkazuje se na NULL a tcp_fsm().

char tcp_unbind (  ) 

Zrušení naslouchání socketu na portu.

Vracené hodnoty:
1 - socket odpojen
0 - chyba, socket je zaneprázdněn, pravděpodobně je někdo připojen

Definice je uvedena na řádku 294 v souboru enc28j60_tcp.c.

Odkazuje se na socket.


Dokumentace proměnných

unsigned long dest_seq_num = 0

Definice je uvedena na řádku 51 v souboru enc28j60_tcp.c.

Používá se v tcp_fsm() a tcp_send_header().

unsigned long expected_ack_num = 0

Definice je uvedena na řádku 53 v souboru enc28j60_tcp.c.

Používá se v tcp_disconnect(), tcp_fsm() a tcp_send().

Definice je uvedena na řádku 55 v souboru enc28j60_tcp.c.

Používá se v tcp_fsm() a tcp_recv().

unsigned long local_ip

Definice je uvedena na řádku 59 v souboru enc28j60_ip.c.

unsigned long local_seq_num = 0

Definice je uvedena na řádku 52 v souboru enc28j60_tcp.c.

Používá se v tcp_fsm(), tcp_send() a tcp_send_header().

struct tcp_socket socket

unsigned int tcp_fsm_timer

Definice je uvedena na řádku 54 v souboru enc28j60_tcp_fsm.c.

Používá se v tcp_disconnect() a tcp_fsm().