int init_module(void) { unsigned int local_ip; unsigned int server_ip = rt_inet_aton(server_ip_s); struct rtnet_callback callback = {echo_rcv, NULL}; if (strlen(local_ip_s) != 0) local_ip = rt_inet_aton(local_ip_s); else local_ip = INADDR_ANY; if (interval < 1) interval = 1; if (interval > 1000) interval = 1000; if (packetsize < 1) packetsize = 1; if (packetsize > 1400) packetsize = 1400; printk("***** start of rt_client ***** %s %s *****\n", __DATE__, __TIME__); printk("local ip address %s=%08x\n", local_ip_s, local_ip); printk("server ip address %s=%08x\n", server_ip_s, server_ip); printk("interval = %d\n", interval); printk("packetsize = %d\n", packetsize); printk("start timer %d\n", start_timer); rtf_create(PRINT, 8000); /* create rt-socket */ sock = socket_rt(AF_INET,SOCK_DGRAM,0); /* bind the rt-socket to local_addr */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; bind_rt(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in)); /* set server-addr */ memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SRV_PORT); server_addr.sin_addr.s_addr = server_ip; /* set up callback handler */ ioctl_rt(sock, RTNET_RTIOC_CALLBACK, &callback); if (start_timer) { rt_set_oneshot_mode(); start_rt_timer(0); } rt_task_init(&rt_task,(void *)process,0,4096,10,0,NULL); rt_task_make_periodic_relative_ns(&rt_task, 1000000, (RTIME)interval * 1000000); return 0; }
int init_module(void) { int ret; unsigned long local_ip = rt_inet_aton(local_ip_s); unsigned long server_ip = rt_inet_aton(server_ip_s); rtf_create(PRINT, 40000); rt_sem_init(&tx_sem, 0); rt_printk ("local ip address %s=%8x\n", local_ip_s, (unsigned int) local_ip); rt_printk ("server ip address %s=%8x\n", server_ip_s, (unsigned int) server_ip); /* create rt-socket */ sock=rt_socket(AF_INET,SOCK_DGRAM,0); /* bind the rt-socket to local_addr */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; ret=rt_socket_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)); /* set server-addr */ memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SRV_PORT); server_addr.sin_addr.s_addr = server_ip; // set up receiving rt_socket_callback(sock, echo_rcv, NULL); rt_set_oneshot_mode(); start_rt_timer(TIMERTICKS); ret=rt_task_init(&rt_task,(void *)process,0,4096,10,0,NULL); rt_task_resume(&rt_task); rt_request_global_irq(parirq, parport_irq_handler); rt_startup_irq(parirq); outb(0xFF, PAR_DATA); outb(0x14 + KHZ0_1, PAR_CONTROL); return ret; }
int init_module(void) { int ret; RTIME tick_period; unsigned int local_ip = rt_inet_aton(local_ip_s); unsigned int server_ip = rt_inet_aton(server_ip_s); if (interval < 1) interval = 1; if (interval > 1000) interval = 1000; if (packetsize < 1) packetsize = 1; if (packetsize > 1400) packetsize = 1400; printk ("***** start of rt_client ***** %s %s *****\n", __DATE__, __TIME__); printk ("local ip address %s=%08x\n", local_ip_s, local_ip); printk ("server ip address %s=%08x\n", server_ip_s, server_ip); printk ("interval = %d\n", interval); printk ("packetsize = %d\n", packetsize); rtf_create(PRINT, 8000); /* create rt-socket */ sock=rt_socket(AF_INET,SOCK_DGRAM,0); /* bind the rt-socket to local_addr */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; ret=rt_socket_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)); /* set server-addr */ memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SRV_PORT); server_addr.sin_addr.s_addr = server_ip; /* set up receiving */ rt_socket_callback(sock, echo_rcv, NULL); tick_period = start_rt_timer(nano2count(TICK_PERIOD)); ret=rt_task_init(&rt_task,(void *)process,0,4096,0,0,NULL); ret=rt_task_make_periodic_relative_ns( &rt_task, 1000000, (RTIME) interval * 1000000); return 0; }
int init_module(void) { int ret; unsigned long local_ip = rt_inet_aton(local_ip_s); unsigned long broadcast_ip = rt_inet_aton(broadcast_ip_s); rtf_create(PRINT, 40000); rt_sem_init(&tx_sem, 0); rt_printk ("local ip address %s=%8x\n", local_ip_s, local_ip); rt_printk ("broadcast ip address %s=%8x\n", broadcast_ip_s, broadcast_ip); /* create rt-socket */ sock=rt_socket(AF_INET,SOCK_DGRAM,0); /* bind the rt-socket to local_addr */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; ret=rt_socket_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)); /* set server-addr */ memset(&broadcast_addr, 0, sizeof(struct sockaddr_in)); broadcast_addr.sin_family = AF_INET; broadcast_addr.sin_port = htons(SRV_PORT); broadcast_addr.sin_addr.s_addr = broadcast_ip; // set up receiving rt_socket_callback(sock, echo_rcv, NULL); /* Timer already started by RTmac in oneshot mode. */ //rt_set_oneshot_mode(); //start_rt_timer(TIMERTICKS); ret=rt_task_init(&rt_task,(void *)process,0,4096,10,0,NULL); ret=rt_task_make_periodic_relative_ns( &rt_task, 10 * 1000*1000, cycle * 1000); return ret; }
int init_module(void) { unsigned int add_rtskbs = 30; int ret; unsigned long local_ip; unsigned long client_ip; if (strlen(local_ip_s) != 0) local_ip = rt_inet_aton(local_ip_s); else local_ip = INADDR_ANY; client_ip = rt_inet_aton(client_ip_s); if (reply_size < sizeof(nanosecs_t)) reply_size = sizeof(nanosecs_t); rtos_print("local ip address %s(%8x):%d\n", local_ip_s, (unsigned int)local_ip, RCV_PORT); rtos_print("client ip address %s(%8x):%d\n", client_ip_s, (unsigned int)client_ip, XMT_PORT); rtos_print("reply message size=%d\n", reply_size); /* create rt-socket */ rtos_print("create rtsocket\n"); if ((sock = socket_rt(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { rtos_print("socket not created\n"); return sock; } /* bind the rt-socket to local_addr */ rtos_print("bind rtsocket to local address:port\n"); memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; if ((ret = bind_rt(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in))) < 0) { close_rt(sock); rtos_print("can't bind rtsocket\n"); return ret; } /* set client-addr */ rtos_print("connect rtsocket to client address:port\n"); memset(&client_addr, 0, sizeof(struct sockaddr_in)); client_addr.sin_family = AF_INET; client_addr.sin_port = htons(XMT_PORT); client_addr.sin_addr.s_addr = client_ip; if ((ret = connect_rt(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr_in))) < 0) { close_rt(sock); rtos_print("can't connect rtsocket\n"); return ret; } /* extend the socket pool */ ret = ioctl_rt(sock, RTNET_RTIOC_EXTPOOL, &add_rtskbs); if (ret != (int)add_rtskbs) { close_rt(sock); rtos_print("ioctl_rt(RTNET_RTIOC_EXTPOOL) = %d\n", ret); return -1; } ret = rtos_task_init(&rt_task, (void *)process, 0, 10); return ret; }
int init_module(void) { int ret; unsigned int i; struct sockaddr_in local_addr; unsigned long dest_ip = rt_inet_aton(dest_ip_s); if (size > 65505) size = 65505; printk("destination ip address %s=%08x\n", dest_ip_s, (unsigned int)dest_ip); printk("size %d\n", size); /* fill output buffer with test pattern */ for (i = 0; i < sizeof(buffer_out); i++) buffer_out[i] = i & 0xFF; /* create rt-socket */ sock = rt_dev_socket(AF_INET,SOCK_DGRAM,0); if (sock < 0) { printk(" rt_dev_socket() = %d!\n", sock); return sock; } /* extend the socket pool */ ret = rt_dev_ioctl(sock, RTNET_RTIOC_EXTPOOL, &add_rtskbs); if (ret != (int)add_rtskbs) { printk(" rt_dev_ioctl(RT_IOC_SO_EXTPOOL) = %d\n", ret); goto cleanup_sock; } /* bind the rt-socket to a port */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(PORT); local_addr.sin_addr.s_addr = INADDR_ANY; ret = rt_dev_bind(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in)); if (ret < 0) { printk(" rt_dev_bind() = %d!\n", ret); goto cleanup_sock; } /* set destination address */ memset(&dest_addr, 0, sizeof(struct sockaddr_in)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); dest_addr.sin_addr.s_addr = dest_ip; /* You may have to start the system timer manually * on older Xenomai versions (2.0.x): * rt_timer_start(TM_ONESHOT); */ ret = rt_task_create(&rt_recv_task, "recv_task", 0, 9, 0); if (ret != 0) { printk(" rt_task_create(rt_recv_task) = %d!\n", ret); goto cleanup_sock; } ret = rt_task_start(&rt_recv_task, recv_msg, NULL); if (ret != 0) { printk(" rt_task_start(rt_recv_task) = %d!\n", ret); goto cleanup_recv_task; } ret = rt_task_create(&rt_xmit_task, "xmit_task", 0, 10, 0); if (ret != 0) { printk(" rt_task_create(rt_xmit_task) = %d!\n", ret); goto cleanup_recv_task; } ret = rt_task_set_periodic(&rt_xmit_task, TM_INFINITE, CYCLE); if (ret != 0) { printk(" rt_task_set_periodic(rt_xmit_task) = %d!\n", ret); goto cleanup_xmit_task; } ret = rt_task_start(&rt_xmit_task, send_msg, NULL); if (ret != 0) { printk(" rt_task_start(rt_xmit_task) = %d!\n", ret); goto cleanup_xmit_task; } return 0; cleanup_xmit_task: rt_task_delete(&rt_xmit_task); cleanup_recv_task: rt_dev_close(sock); rt_task_delete(&rt_recv_task); return ret; cleanup_sock: rt_dev_close(sock); return ret; }
int init_module(void) { int ret; RTIME tick_period; struct rtsocket *socket; unsigned long local_ip = rt_inet_aton(local_ip_s); unsigned long client_ip = rt_inet_aton(client_ip_s); rt_printk ("local ip address %s=%8x\n", local_ip_s, local_ip); rt_printk ("client ip address %s=%8x\n", client_ip_s, client_ip); /* create rt-socket */ rt_printk("create rtsocket\n"); if ( !(sock=rt_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) ) { rt_printk("socket not created\n"); return -ENOMEM; } /* bind the rt-socket to local_addr */ rt_printk("bind rtsocket to local address:port\n"); memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; if ( (ret=rt_socket_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)))<0 ) { rt_printk("can't bind rtsocket\n"); return ret; } /* set client-addr */ rt_printk("connect rtsocket to client address:port\n"); memset(&client_addr, 0, sizeof(struct sockaddr_in)); client_addr.sin_family = AF_INET; client_addr.sin_port = htons(SRV_PORT); client_addr.sin_addr.s_addr = client_ip; if ( (ret=rt_socket_connect(sock, (struct sockaddr *) &client_addr, sizeof(struct sockaddr_in)))<0 ) { rt_printk("can't connect rtsocket\n"); return ret; } /* get socket-structure for printing */ if ( (socket=rt_socket_lookup(sock)) ) { rt_printk("src addr: %x:%x\n", socket->saddr, socket->sport); rt_printk("dest addr: %x:%x\n", socket->daddr, socket->dport); } /* set up receiving */ rt_socket_callback(sock, echo_rcv, NULL); /* initialize semaphore */ rt_sem_init(&tx_sem, 0); /* create print-fifo */ rtf_create (PRINT, 3000); tick_period = start_rt_timer(nano2count(TICK_PERIOD)); ret=rt_task_init(&rt_task,(void *)process,0,4096,0,0,NULL); ret=rt_task_make_periodic_relative_ns( &rt_task, 1000000, 1000000000); return ret; }
int init_module(void) { unsigned int add_rtskbs = 30; int ret; unsigned long local_ip; unsigned long server_ip; if (strlen(local_ip_s) != 0) local_ip = rt_inet_aton(local_ip_s); else local_ip = INADDR_ANY; server_ip = rt_inet_aton(server_ip_s); rtf_create(PRINT_FIFO, 40000); rt_sem_init(&tx_sem, 0); rt_printk("local ip address %s=%8x\n", local_ip_s, (unsigned int) local_ip); rt_printk("server ip address %s=%8x\n", server_ip_s, (unsigned int) server_ip); /* create rt-socket */ rt_printk("create rtsocket\n"); if ((sock = socket_rt(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { rt_printk("socket not created\n"); return sock; } /* extend the socket pool */ ret = ioctl_rt(sock, RTNET_RTIOC_EXTPOOL, &add_rtskbs); if (ret != (int)add_rtskbs) { close_rt(sock); rt_printk("ioctl_rt(RTNET_RTIOC_EXTPOOL) = %d\n", ret); return -1; } /* bind the rt-socket to local_addr */ local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; if ((ret = bind_rt(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in))) < 0) { close_rt(sock); rt_printk("can't bind rtsocket\n"); return ret; } /* set server-addr */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SRV_PORT); server_addr.sin_addr.s_addr = server_ip; rt_task_init(&xmit_task,(void *)process,0,4096,10,0,NULL); rt_task_resume(&xmit_task); rt_task_init(&recv_task,(void *)echo_rcv,0,4096,9,0,NULL); rt_task_resume(&recv_task); rt_request_global_irq(parirq, parport_irq_handler); rt_startup_irq(parirq); outb(0xFF, PAR_DATA); outb(0x14 + KHZ0_1, PAR_CONTROL); return ret; }
int init_module(void) { unsigned int nonblock = 1; unsigned int add_rtskbs = 30; int ret; unsigned long local_ip; unsigned long server_ip; if (strlen(local_ip_s) != 0) local_ip = rt_inet_aton(local_ip_s); else local_ip = INADDR_ANY; server_ip = rt_inet_aton(server_ip_s); rtf_create(PRINT_FIFO, 40000); rt_sem_init(&tx_sem, 0); rt_printk ("local ip address %s=%8x\n", local_ip_s, (unsigned int) local_ip); rt_printk ("server ip address %s=%8x\n", server_ip_s, (unsigned int) server_ip); /* create rt-socket */ rt_printk("create rtsocket\n"); if ((sock=rt_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { rt_printk("socket not created\n"); return sock; } /* switch to non-blocking */ ret = rt_setsockopt(sock, SOL_SOCKET, RT_SO_NONBLOCK, &nonblock, sizeof(nonblock)); rt_printk("rt_setsockopt(RT_SO_NONBLOCK) = %d\n", ret); /* extend the socket pool */ ret = rt_setsockopt(sock, SOL_SOCKET, RT_SO_EXTPOOL, &add_rtskbs, sizeof(add_rtskbs)); if (ret != (int)add_rtskbs) { rt_socket_close(sock); rt_printk("rt_setsockopt(RT_SO_EXTPOOL) = %d\n", ret); return -1; } /* bind the rt-socket to local_addr */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(RCV_PORT); local_addr.sin_addr.s_addr = local_ip; if ( (ret=rt_socket_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct sockaddr_in)))<0 ) { rt_socket_close(sock); rt_printk("can't bind rtsocket\n"); return ret; } /* set server-addr */ memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SRV_PORT); server_addr.sin_addr.s_addr = server_ip; /* set up receiving */ rt_socket_callback(sock, echo_rcv, NULL); ret=rt_task_init(&rt_task,(void *)process,0,4096,10,0,NULL); rt_task_resume(&rt_task); rt_request_global_irq(parirq, parport_irq_handler); rt_startup_irq(parirq); outb(0xFF, PAR_DATA); outb(0x14 + KHZ0_1, PAR_CONTROL); return ret; }
int init_module(void) { unsigned int nonblock = 1; struct sockaddr_in local_addr; struct rtnet_callback callback = {sync_callback, NULL}; rtos_print("rt_event is using the following parameters:\n" " mode = %s\n" " io = 0x%04X\n" " irq = %d\n" " my_ip = %s\n" " dest_ip = %s\n", (mode == MODE_PAR) ? "parallel port" : "serial port", io, irq, my_ip, dest_ip); tdma = open_rt(rtmac_dev, O_RDONLY); if (tdma < 0) { rtos_print("ERROR: RTmac/TDMA not loaded!\n"); return -ENODEV; } sock = socket_rt(AF_INET,SOCK_DGRAM,0); memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(SYNC_PORT); local_addr.sin_addr.s_addr = (strlen(my_ip) != 0) ? rt_inet_aton(my_ip) : INADDR_ANY; bind_rt(sock, (struct sockaddr*)&local_addr, sizeof(struct sockaddr_in)); /* switch to non-blocking */ ioctl_rt(sock, RTNET_RTIOC_NONBLOCK, &nonblock); memset(&dest_addr, 0, sizeof(struct sockaddr_in)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(REPORT_PORT); dest_addr.sin_addr.s_addr = rt_inet_aton(dest_ip); ioctl_rt(sock, RTNET_RTIOC_CALLBACK, &callback); rtos_event_sem_init(&event_sem); if (rtos_irq_request(&irq_handle, irq, irq_handler, NULL) != 0) { rtos_print("ERROR: irq not available!\n"); rtos_event_sem_delete(&event_sem); return -EINVAL; } if (mode == MODE_PAR) { /* trigger interrupt on Acknowledge pin (10) */ outb(0x10, PAR_CONTROL); } else { /* don't forget to specify io and irq (e.g. 0x3F8 / 4) */ outb(0x00, SER_LCR); outb(0x00, SER_IER); /* clear irq sources */ while ((inb(SER_IIR) & 0x01) == 0) { rtos_print("Loop init\n"); inb(SER_LSR); inb(SER_DATA); inb(SER_MSR); } /* enable RTS output and set OUT2 */ outb(0x0A, SER_MCR); /* trigger interrupt on modem status line change */ outb(0x00, SER_LCR); outb(0x0D, SER_IER); } rtos_irq_enable(&irq_handle); return rtos_task_init(&task, event_handler, 0, 10); }
int init_module(void) { int ret; unsigned int i; struct sockaddr_in local_addr; unsigned long dest_ip = rt_inet_aton(dest_ip_s); if (size > 65505) size = 65505; rt_printk("destination ip address %s=%08x\n", dest_ip_s, (unsigned int)dest_ip); rt_printk("size %d\n", size); rt_printk("start timer %d\n", start_timer); /* fill output buffer with test pattern */ for (i = 0; i < sizeof(buffer_out); i++) buffer_out[i] = i & 0xFF; /* create rt-socket */ sock = rt_socket(AF_INET,SOCK_DGRAM,0); if (sock < 0) { rt_printk(" rt_socket() = %d!\n", sock); return sock; } /* extend the socket pool */ ret = rt_setsockopt(sock, SOL_SOCKET, RT_SO_EXTPOOL, &add_rtskbs, sizeof(add_rtskbs)); if (ret != (int)add_rtskbs) { rt_printk("rt_setsockopt(RT_SO_EXTPOOL) = %d\n", ret); rt_close(sock); return -1; } /* bind the rt-socket to a port */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(PORT); local_addr.sin_addr.s_addr = INADDR_ANY; ret = rt_bind(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in)); if (ret < 0) { rt_printk(" rt_socket_bind() = %d!\n", ret); rt_close(sock); return ret; } /* set destination address */ memset(&dest_addr, 0, sizeof(struct sockaddr_in)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); dest_addr.sin_addr.s_addr = dest_ip; /* install callback handler */ rt_socket_callback(sock, recv_msg, NULL); if (start_timer) { rt_set_oneshot_mode(); start_rt_timer(0); } ret = rt_task_init(&rt_task,(void *)send_msg, 0, 4096, 10, 0, NULL); if (ret != 0) { rt_printk(" rt_task_init() = %d!\n", ret); rt_close(sock); return ret; } ret = rt_task_make_periodic_relative_ns(&rt_task, 0, CYCLE); if (ret != 0) { rt_printk(" rt_task_make_periodic_relative_ns() = %d!\n", ret); rt_close(sock); return ret; } return 0; }
int init_module(void) { int ret; unsigned int i; struct sockaddr_in local_addr; unsigned long dest_ip = rt_inet_aton(dest_ip_s); if (size > 65505) size = 65505; printk("destination ip address %s=%08x\n", dest_ip_s, (unsigned int)dest_ip); printk("size %d\n", size); #ifdef CONFIG_RTOS_STARTSTOP_TIMER printk("start timer %d\n", start_timer); #endif /* fill output buffer with test pattern */ for (i = 0; i < sizeof(buffer_out); i++) buffer_out[i] = i & 0xFF; /* create rt-socket */ sock = rt_dev_socket(AF_INET,SOCK_DGRAM,0); if (sock < 0) { printk(" rt_dev_socket() = %d!\n", sock); return sock; } /* extend the socket pool */ ret = rt_dev_ioctl(sock, RTNET_RTIOC_EXTPOOL, &add_rtskbs); if (ret != (int)add_rtskbs) { printk(" rt_dev_ioctl(RT_IOC_SO_EXTPOOL) = %d\n", ret); rt_dev_close(sock); return -1; } /* bind the rt-socket to a port */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(PORT); local_addr.sin_addr.s_addr = INADDR_ANY; ret = rt_dev_bind(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in)); if (ret < 0) { printk(" rt_dev_bind() = %d!\n", ret); rt_dev_close(sock); return ret; } /* set destination address */ memset(&dest_addr, 0, sizeof(struct sockaddr_in)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); dest_addr.sin_addr.s_addr = dest_ip; #ifdef CONFIG_RTOS_STARTSTOP_TIMER if (start_timer) { rtos_timer_start_oneshot(); } #endif ret = rtos_task_init(&rt_recv_task, recv_msg, 0, 9); if (ret != 0) { printk(" rtos_task_init(recv) = %d!\n", ret); rt_dev_close(sock); return ret; } ret = rtos_task_init_periodic(&rt_xmit_task, send_msg, 0, 10, CYCLE); if (ret != 0) { printk(" rtos_task_init_periodic(xmit) = %d!\n", ret); rt_dev_close(sock); rtos_task_delete(&rt_recv_task); return ret; } return 0; }
static int _init(void) { int broadcast = 1; int64_t timeout = -1; rt_printk("RtnetTest: Module initialisation started\n"); memset(buffer_in, 0, sizeof(buffer_in)); memset(&loc_addr, 0, sizeof (struct sockaddr_in)); memset(buffer_out, 0, sizeof(buffer_out)); memset(&tx_addr, 0, sizeof (struct sockaddr_in)); loc_addr.sin_family = AF_INET; loc_addr.sin_port = htons(UDPPORT); loc_addr.sin_addr.s_addr = INADDR_ANY; tx_addr.sin_family = AF_INET; tx_addr.sin_port = htons(UDPPORT); tx_addr.sin_addr.s_addr = rt_inet_aton("127.0.0.1"); if (((mbx = rt_typed_named_mbx_init("MYMBX", 2000*sizeof(struct sample), FIFO_Q))) == NULL) { rt_printk("RtnetTest: Cannot create the mailbox\n"); return -1; } if (((sock = rt_dev_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))) < 0) { rt_printk("RtnetTest: Error opening UDP/IP socket: %d\n", sock); return -1; } if (rt_dev_setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) == -1) { rt_printk("RtnetTest: Can't set broadcast options\n"); goto close_socks; } rt_dev_ioctl(sock, RTNET_RTIOC_TIMEOUT, &timeout); if (rt_dev_bind(sock, (struct sockaddr *) &loc_addr, sizeof(struct sockaddr_in)) < 0) { rt_printk("RtnetTest: Can't bind the network socket"); goto close_socks; } rt_set_periodic_mode(); period = start_rt_timer(nano2count(WORKCYCLE)); if (rt_task_init_cpuid(&rx_task, receiver, 0, STKSIZ, 0, 0, 0, CPU) < 0) { rt_printk("RtnetTest: Can't initialise the receiver task"); goto close_socks; } if (rt_task_init_cpuid(&tx_task, sender, 0, STKSIZ, 0, 0, 0, CPU) < 0) { rt_printk("RtnetTest: Can't initialise the transmitter task"); goto close_socks; } if (0 != rt_task_make_periodic(&tx_task, rt_get_time() + 20*period, period)) { rt_printk("RtnetTest: Make sender periodic failed\n"); goto close_socks; } if (rt_task_resume(&rx_task) < 0) { rt_printk("RtnetTest: Can't start the receiver task"); goto close_socks; } rt_printk("RtnetTest: Module initialisation completed\n"); return 0; close_socks: rt_dev_close(sock); rt_dev_shutdown(sock, SHUT_RDWR); return -1; }