[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [lwip-users] Xilinx PowerPC receive udp messages
From: |
Peter Kampmann |
Subject: |
Re: [lwip-users] Xilinx PowerPC receive udp messages |
Date: |
Wed, 23 Aug 2006 02:00:23 -0700 (PDT) |
Hi Sathya,
thanks a lot, that example quite helped me.
But as I want to use the lwip in C++ I get an error at
XIntc_RegisterHandler(XPAR_OPB_INTC_0_BASEADDR,
XPAR_OPB_INTC_0_ETHERNET_MAC_IP2INTC_IRPT_INTR,
(XInterruptHandler)XEmac_IntrHandlerFifo,
xemacif_ptr->instance_ptr);
the error is: undefined reference to `XEmac_IntrHandlerFifo'
Even if I tell the C++ Compiler to handle this code as c code via
#ifdef __cplusplus
extern "C" { ...
I get this error. What am I doing wrong?
Regards,
Peter
Sathya Thammanur wrote:
>
> Hi Peter,
> Xilkernel is needed when you want to use the sockets API of lwIP. The
> kernel
> provides the semaphores and mailboxes feature required for the sockets
> mode
> operation. However, the RAW API works using callback functions. The code
> definitely is different for Sockets mode vs Raw mode. Mixing the two modes
> will not work correctly. A TCP echo server example using the RAW API mode
> is
> attached.
>
> Hope this helps.
>
> Sathya
>
>
> On 8/21/06, Peter Kampmann <address@hidden>
> wrote:
>>
>>
>> Hi everyone,
>>
>> after trying various ways to receive an udp-packet to the powerPC, I want
>> to
>> ask if somebody of you sees perhaps the missing or wrong code that makes
>> my
>> code refusing to accept udp packages.
>>
>>
>> static u8_t my_timer = 0;
>>
>> struct ip_addr ipaddr, netmask, gw;
>> char macAdress[6];
>> char port = 9050;
>> struct netif * networkInterface;
>> struct pbuf *pb;
>> int waiting_for_timer = 1;
>> XTime ml_base, ml_new, ml_offset;
>>
>> extern XEmacIf_Config XEmacIf_ConfigTable[];
>>
>> struct udp_pcb *pcb;
>>
>> //init the lwip services
>> void init()
>> {
>> err_t err;
>> macAdress[0] = 0x00;
>> macAdress[1] = 0x0A;
>> macAdress[2] = 0x35;
>> macAdress[3] = 0x00;
>> macAdress[4] = 0x22;
>> macAdress[5] = 0x21;
>>
>> //we need a timer
>>
>> //init the lwip parts
>> sys_init();
>>
>> mem_init();
>> xil_printf("heap initialised\r\n");
>>
>> memp_init();
>> xil_printf("memp initialised\r\n");
>>
>> pbuf_init();
>> xil_printf("pbuf init done\r\n");
>>
>> xil_printf("Wait some time, for initialising\r\n");
>>
>> unsigned int init_wait = 15000000;
>> while(init_wait--);
>>
>> //set the Hardware MAC-Address
>> xemacif_setmac(0,(u8_t *) macAdress );
>>
>> //set up the ipAddress, Netmask and Gateway
>> IP4_ADDR(&gw, 0,0,0,0);
>> IP4_ADDR(&ipaddr, 192,168,1,1);
>> IP4_ADDR(&netmask, 255,255,255,0);
>>
>> //init netif
>> netif_init();
>> xil_printf("netif_init done\r\n");
>>
>> ip_init();
>>
>> //tcp_init();
>>
>> udp_init();
>>
>> //allocate memory for the netif
>> networkInterface = (netif*)mem_malloc(sizeof(struct netif));
>>
>> //add a new network interface.
>> networkInterface = netif_add(networkInterface,
>>
>>
>>
>> &ipaddr,
>>
>>
>>
>> &netmask,
>>
>>
>>
>> &gw,
>>
>>
>>
>> &XEmacIf_ConfigTable[0],
>>
>>
>>
>> xemacif_init,
>>
>>
>>
>> ip_input);
>>
>> xil_printf("wait for network to start...\r\n");
>> init_wait = 15000000;
>> while(init_wait--);
>>
>> netif_set_default(networkInterface);
>>
>> xil_printf("Network started up!\r\n");
>>
>> pcb = udp_new();
>>
>> err = udp_bind(pcb, IP_ADDR_ANY, port);
>> //err = udp_bind(pcb, &ipaddr, port);
>>
>> if (err == ERR_OK)
>> {
>> xil_printf("NOTICE, Successfuly bound to port\r\n");
>>
>> }
>> else
>> {
>> xil_printf("ERROR, Could not bound to port\r\n");
>> }
>>
>> }
>>
>> void echo_udp_init(void)
>> {
>> struct udp_pcb *pcb;
>>
>> pcb = udp_new();
>> udp_bind( pcb, IP_ADDR_ANY, port );
>> udp_recv( pcb, &echo_udp_recv, NULL );
>> }
>>
>>
>> static void echo_udp_recv( void* arg, struct udp_pcb *pcb, struct pbuf
>> *p,
>> struct ip_addr *addr, u16_t port )
>> {
>>
>> xil_printf("receive...\r\n");
>>
>> err_t err;
>>
>> err = udp_connect( pcb, addr, port );
>> if (err != ERR_OK)
>> {
>> printf( "ERROR: udp_connect() error: %d\n", err );
>> }
>> err = udp_send( pcb, p );
>> if (err != ERR_OK)
>> {
>> printf( "ERROR: udp_send() error: %d\n", err );
>> }
>> pbuf_free( p );
>> udp_remove( pcb );
>> echo_udp_init();
>> return;
>> }
>>
>> int main()
>> {
>> init();
>>
>> echo_udp_init();
>>
>> // Get the current Time-Base Register Value
>> // offset it by ml_offset
>> XTime_SetTime(0);
>> XTime_GetTime(&ml_base);
>> ml_base += ml_offset;
>>
>> while (1) {
>> while (waiting_for_timer) {
>> xemacif_input(networkInterface);
>> XTime_GetTime(&ml_new);
>> if ( ml_new >= ml_base ) {
>> waiting_for_timer = 0;
>> ml_base = ml_new + ml_offset;
>> }
>> }
>> // Call my_tmr() every ml_offset cycles
>> my_tmr();
>> waiting_for_timer = 1;
>>
>> }
>> return(1);
>> }
>>
>> As far as I understand the raw API, after calling the function
>> echo_udp_init()
>> the function echo_udp_recv is registered as a callback function, when a
>> udp
>> package arrives, the function is then called automatically.
>>
>> Instead of registering the callback function like udp_recv( pcb,
>> &echo_udp_recv, NULL ); I tried also udp_recv( pcb, &echo_udp_recv,
>> networkInterface );
>> But that didn't work, too.
>>
>> Does this code not work in the stand-alone version? Do I need to use the
>> xilkernel?
>>
>> Hope somebody can help me.
>>
>> Thanks and regards,
>> Peter
>> --
>> View this message in context:
>> http://www.nabble.com/Xilinx-PowerPC-receive-udp-messages-tf2138912.html#a5902800
>> Sent from the lwip-users forum at Nabble.com.
>>
>>
>>
>> _______________________________________________
>> lwip-users mailing list
>> address@hidden
>> http://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>
> _______________________________________________
> lwip-users mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/lwip-users
>
--
View this message in context:
http://www.nabble.com/Xilinx-PowerPC-receive-udp-messages-tf2138912.html#a5940602
Sent from the lwip-users forum at Nabble.com.
- [lwip-users] Xilinx PowerPC receive udp messages, Peter Kampmann, 2006/08/21
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Sathya Thammanur, 2006/08/22
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Mumtaz Ahmad, 2006/08/23
- Re: [lwip-users] Xilinx PowerPC receive udp messages,
Peter Kampmann <=
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Pedro Alves, 2006/08/23
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Peter Kampmann, 2006/08/23
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Pedro Alves, 2006/08/23
- RE: [lwip-users] Xilinx PowerPC receive udp messages, Matthew Yingling, 2006/08/23
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Sathya Thammanur, 2006/08/23
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Peter Kampmann, 2006/08/25
- Re: [lwip-users] Xilinx PowerPC receive udp messages, Peter Kampmann, 2006/08/25