LwIP obojsmerna komunikacia cez TCP port

David Belohrad david na belohrad.ch
Čtvrtek Leden 2 12:11:05 CET 2014


netconn_recv nepouzivam, ale pouzivam 'standardni' lwip rozhranni. To je
rizene ciste pres hacky (hooks). Pri inicializaci socketu udelate:

--------------------------------------------------------------------------------
  // create listening PCB and bind it
  pcb = tcp_new();
  tcp_bind(pcb, IP_ADDR_ANY, BBDIDTSOCKETS_SERVER_PORT);
  pcb = tcp_listen(pcb);
  /* initialize callback arg and accept callback */
  tcp_arg(pcb, pcb);
  tcp_accept(pcb, bbdidtSockets_accept);
--------------------------------------------------------------------------------

a pak jeste deklarujete funkci tcp_accept

--------------------------------------------------------------------------------
err_t bbdidtSockets_accept(void *arg, struct tcp_pcb *pcb, err_t err)
{
  unsigned int remoteIP, point, i;
  static char buff[1024];

  LWIP_UNUSED_ARG(err);

  /* Decrease the listen backlog counter */
  tcp_accepted(((struct tcp_pcb_listen*)arg));

  tcp_setprio(pcb, BBDIDTSOCKETS_TCP_PRIO);
  /* Set up the various callback functions */
  tcp_recv(pcb, bbdidtSockets_recv);
  tcp_err(pcb,  NULL);
  tcp_poll(pcb, NULL, BBDIDTSOCKETS_POLL_INTERVAL);
  tcp_sent(pcb, bbdidtSockets_sent);
  .... atd
--------------------------------------------------------------------------------

ve ktere zadeklarujete hacky na tcp_recv a tcp_sent. tyhle dva se
spousteji kdyz neco prijde a kdyz neco bylo odeslane. cele je to popsane
v lwip manualu.

pak funkce tcp_write posila (bez cekani) data pres enet, a kdyz neco
dostanete, zavola se funkce, kterou posilate lwip pres tcp_recv. funguje
to dobre.

funkce lwip je take pekne popsana demonstracnim programem v am335x
starterware od TI. doporucuji stahnout, nainstalovat a probrat se
prikladem 'enet_lwip', kde je vsechno nazorne vysvetleno

.d.




Stano <stano.hw na gmail.com> writes:

> Dobry den
> Mam zaciatocnicku otazku na LwIP netconn + FreeRTOS
> Pokusam sa o obojsmernu komunikaciu cez jeden TCP port. Chcel by som 
> dosiahnut
> asynchronnu komunikaciu, ked nieco pride na UART odoslu sa data cez TCP 
> port,
> ked pridu nejake data po TCP odoslu sa na UART.Problem je v tom ze funkcia
> netconn_recv() caka na prijatie dat, a funkcia citajuca z UARTu zas caka
> na prijatie dat zo seriovej linky. Prosim skusenejsich o inspiraciu co 
> hladat
> alebo ako riesit dany problem.
>
> Za odpovede vopred dakujem
>             Stano
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list