All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marco Jackel <ich@domain.hid>
To: xenomai@xenomai.org
Subject: [Xenomai-help] read data from serial device
Date: Wed, 22 Mar 2006 16:46:21 +0100	[thread overview]
Message-ID: <dvrrgc$g2a$1@domain.hid> (raw)

Hi there,

ATTENTION: I'm a xenomai-newbie
I want to read data from the serial device

I got the serial driver loop demo from
http://www.captain.at/xenomai-serial-port-example.php
It worked without any problems.
Then I modified the demo to read data only (remove all the write_task
stuff).

But I get this error when I do a "echo 123 > /dev/ttyS0" on a other
computer connected with a serial cable.

> voyage:/usr/src/tests/getserial# ./getserial
> rt_serial_uprog: PRESS CTRL-C to EXIT
> rt_serial_uprog: timer started
> rt_serial_uprog: rtser_file opened
> rt_serial_uprog: serial-port-config written
> rt_serial_uprog: read-task created
> rt_serial_uprog: starting read-task
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (1 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (2 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (3 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (4 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (5 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (6 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (7 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (8 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (9 times)
> rt_serial_uprog: rtser0 (rtser) -> EAGAIN (10 times)
> rt_serial_uprog: delete write_task
> rt_serial_uprog: stop timer
> rt_serial_uprog: exit

and:

> Mar 22 15:02:46 voyage kernel: 00000000
> Mar 22 15:02:46 voyage kernel: PREEMPT
> Mar 22 15:02:46 voyage kernel: Modules linked in: xeno_16550A xeno_rtdm ohci_hcd usbcore sis900 mii dm_mod
> Mar 22 15:02:46 voyage kernel: CPU:    0
> Mar 22 15:02:46 voyage kernel: EIP:    0060:[<00000000>]    Not tainted VLI
> Mar 22 15:02:46 voyage kernel: EFLAGS: 00010002   (2.6.15.4-gx1-25)
> Mar 22 15:02:46 voyage kernel: EIP is at _stext+0x3feffdc0/0xb4
> Mar 22 15:02:46 voyage kernel: eax: c0316b80   ebx: c03168e0   ecx: c03173a0   edx: c03168e0
> Mar 22 15:02:46 voyage kernel: esi: 00000004   edi: c03168e8   ebp: c03173d0   esp: cdc8ddd4
> Mar 22 15:02:46 voyage kernel: ds: 007b   es: 007b   ss: 0068
> Mar 22 15:02:46 voyage kernel: Process read_task (pid: 1320, threadinfo=cdc8c000 task=ce951a50)
> Mar 22 15:02:46 voyage kernel: Stack: c010c6ad 00000004 00000000 cffdf2fa 00000048 c03173e0 00000000 c03168e0
> Mar 22 15:02:46 voyage kernel:        ffffffff 00000001 00000000 00000002 c03168e0 c03168e0 00000046 c012f6fe
> Mar 22 15:02:46 voyage kernel:        018f7a35 00000048 00000000 00000000 ffffffd5 ce84a110 d0054c07 c02482c6
> Mar 22 15:02:46 voyage kernel: Call Trace:
> Mar 22 15:02:46 voyage kernel:  [__ipipe_sync_stage+468/606] __ipipe_sync_stage+0x1d4/0x25e
> Mar 22 15:02:46 voyage kernel:  [ipipe_unstall_pipeline_from+196/238] ipipe_unstall_pipeline_from+0xc4/0xee
> Mar 22 15:02:46 voyage kernel:  [pg0+265423879/1070375936] rtdm_event_timedwait+0x167/0x171 [xeno_rtdm]
> Mar 22 15:02:46 voyage kernel:  [tcp_v4_rcv+1295/2273] tcp_v4_rcv+0x50f/0x8e1
> Mar 22 15:02:46 voyage kernel:  [pg0+265260884/1070375936] rt_16550_ioctl+0x571/0x70e [xeno_16550A]
> Mar 22 15:02:46 voyage kernel:  [xnpod_announce_tick+83/164] xnpod_announce_tick+0x53/0xa4
> Mar 22 15:02:46 voyage kernel:  [xnintr_clock_handler+16/19] xnintr_clock_handler+0x10/0x13
> Mar 22 15:02:46 voyage kernel:  [__ipipe_sync_stage+468/606] __ipipe_sync_stage+0x1d4/0x25e
> Mar 22 15:02:46 voyage kernel:  [pg0+265416973/1070375936] rtdm_context_get+0x10d/0x116 [xeno_rtdm]
> Mar 22 15:02:46 voyage kernel:  [pg0+265418994/1070375936] _rtdm_ioctl+0x3c/0x50 [xeno_rtdm]
> Mar 22 15:02:46 voyage kernel:  [pg0+265428189/1070375936] sys_rtdm_ioctl+0x15/0x19 [xeno_rtdm]
> Mar 22 15:02:46 voyage kernel:  [hisyscall_event+521/768] hisyscall_event+0x209/0x300
> Mar 22 15:02:46 voyage kernel:  [__ipipe_dispatch_event+91/222] __ipipe_dispatch_event+0x5b/0xde
> Mar 22 15:02:46 voyage kernel:  [__ipipe_syscall_root+78/186] __ipipe_syscall_root+0x4e/0xba
> Mar 22 15:02:46 voyage kernel:  [system_call+32/65] system_call+0x20/0x41
> Mar 22 15:02:46 voyage kernel: Code:  Bad EIP value.

I think the error is in the following part:



> void read_task_proc(void *arg) {
>   int ret;
> //  RTIME irq_time   = 0;
>   ssize_t sz = sizeof(RTIME);
>   ssize_t red = 0;
>   struct rtser_event rx_event;
>   unsigned char buf[17];
> 
>   // we are in secondary mode now
>   while (1) {
>     /* switch to primary mode */
>     ret = rt_task_set_mode(0, T_PRIMARY, NULL);
>     if (ret) {
>       printf(RTASK_PREFIX "error while rt_task_set_mode, code %d\n",ret);
>       goto exit_read_task;
>     }
>     /* waiting for event */
>     // be careful not to do printf or so here. Otherwise rt_dev_ioctl
>     //    returns with an error, because we're not in hard real time
>     //    anymore (primary mode)
>     ret = rt_dev_ioctl(my_fd, RTSER_RTIOC_WAIT_EVENT, &rx_event );
>     if (ret) {
>       printf(RTASK_PREFIX "error while RTSER_RTIOC_WAIT_EVENT, code %d\n",ret);
>       goto exit_read_task;
>     }
>     //irq_time = rx_event.rxpend_timestamp;
>     sz = sizeof(buf);
>     red = rt_dev_read(my_fd, &buf, sizeof(buf));
>     if (red == sz ) {
>                 printf(RTASK_PREFIX "rt_dev_read=%s\n",buf);
>     } else {
>       if (red < 0 ) {
>         printf(RTASK_PREFIX "error while rt_dev_read, code %d\n",red);
>       } else {
>         printf(RTASK_PREFIX "only %d / %d byte received \n",red,sz);
>       }
>       goto exit_read_task;
>     }
>   }
> exit_read_task:
>   if (my_state & STATE_FILE_OPENED) {
>     if (!close_file( my_fd, READ_FILE " (rtser)")) {
>       my_state &= ~STATE_FILE_OPENED;
>     }
>   }
>   printf(RTASK_PREFIX "exit\n");
> }

When I use the kernel serial-drivers and do a "cat /dev/ttyS0" I get the
data that I sent from the other computer

Thanks Marco



             reply	other threads:[~2006-03-22 15:46 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-22 15:46 Marco Jackel [this message]
2006-03-23 10:08 ` [Xenomai-help] Re: read data from serial device Marco Jackel
2006-03-23 12:41 ` Marco Jackel
2006-03-23 12:49   ` Philippe Gerum
2006-03-23 12:56     ` Marco Jackel
2006-03-23 13:22       ` Philippe Gerum
2006-03-24 12:20         ` Jan Kiszka
2006-03-23 12:56   ` Gilles Chanteperdrix
2006-03-23 13:21     ` Marco Jackel
2006-03-24 12:36 ` [Xenomai-help] " Jan Kiszka
2006-03-24 17:09   ` [Xenomai-help] " Marco Jackel
2006-03-24 17:23     ` Jan Kiszka
2006-03-24 17:42       ` Marco Jackel
2006-03-25  1:06       ` Marco Jackel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='dvrrgc$g2a$1@domain.hid' \
    --to=ich@domain.hid \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.